如何在Capistrano任务中切换用户?

时间:2012-10-05 07:29:47

标签: capistrano su

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

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。

我还尝试从this article创建surun,虽然它对我没有帮助...... :(

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

提前致谢。

P.S。添加了输出日志:

$ 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

1 个答案:

答案 0 :(得分: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