1

我在下面做了一个小测试任务:

set :user, "user"
set :password, "password"
set :root_password, "root password"
set :use_sudo, false
role :srv, "exmaple.com"

task :show_info do
    run "iptables -L", :shell => "su -" do |channel, stream, data|
        channel.send_data("#{root_password}\n")
    end
end

这个服务器不允许我使用sudo,所以我必须以普通用户身份登录,然后成为 root。

我也尝试surun这篇文章中创建,虽然它对我没有帮助...... :(

有人可以告诉我在 Capistrano 切换到 root 后运行命令的有希望的方法吗?

提前致谢。

PS添加了输出日志:

$ cap show_info
  * executing `show_info'
  * executing "iptables -L"
    servers: ["example.com"]
    [example.com] executing command
    command finished in 000ms
failed: "su - -c 'iptables -L'" on example.com
4

1 回答 1

2

重点是 default_run_options[:pty] = true

尝试这个

def surun(command)
  default_run_options[:pty] = true
  password = fetch(:root_password, Capistrano::CLI.password_prompt("root password: "))
  run("su - -c #{command}") do |channel, stream, output|
      channel.send_data("#{password}\n")
  end
end
于 2012-12-18T13:58:22.350 回答