我在下面做了一个小测试任务:
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
答案 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