Capistrano,sudo命令和多个密码

时间:2012-04-16 16:07:41

标签: ssh capistrano sudo

我使用capistrano来运行命令。我有基于ssh-key的身份验证,但每台机器上都有不同的sudo密码。

我的capfile看起来像这样

default_run_options[:pty] = true
role :admin, "server1","server2","server3"

desc "myCommand"
task :mycommand, :roles=>:admin do
    run "cd <workdir> && #{sudo} <command>"
end

当我运行这个时,我得到以下输出:

  * executing `myCommand'
  * executing "cd <workdir> && sudo -p 'sudo password: ' <command>"
    servers: ["server1", "server2", "server3"]
    [server2] executing command
    [server3] executing command
Password: 
 ** [out :: server2] 
 ** [out :: server3] 
    [server1] executing command
 ** [out :: server1] 
 ** [out :: server3] CMD-OUTPUT
*** [out :: server2] Sorry, try again.
 ** [out :: server2] Sorry, try again.
Password: 
 ** [out :: server2] 
 ** [out :: server1] 
 ** [out :: server2] CMD-OUTPUT
 ** [out :: server1] 
 ** [out :: server1] Sorry, try again.
 ** [out :: server1] sudo: 3 incorrect password attempts
    command finished in 14411ms
failed: "sh -c 'cd <workdir> && sudo -p '\\''sudo password: '\\'' <command>'" on server1

显然capistrano假设我在每台服务器上都有相同的密码,这可能吗?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

对于此类自动安装,最常见的是没有设置密码短语的SSH密钥。私钥的所有权足以允许登录(因此文件本身实际上是密码)。

通过在SSH配置中限制密钥可以连接的IP地址以及允许其运行的命令,您可以进一步保护系统,以防文件出来。

答案 1 :(得分:0)

Capistrano不支持使用不同密码的多台服务器。您可以将通过sudo运行所需的某些命令设置为不需要相关用户的密码,而不是将它们全部更改为相同的密码(不建议使用)。

要在没有密码的情况下为用户提供bob sudo访问权限,您可以将其添加到您的sudoers文件中:

bob ALL=NOPASSWD: /bin/cat

这里显然存在一些安全问题,但我觉得它们不会让你的上限用户完全sudo访问你的所有盒子。请务必阅读“man sudoers”并使用NOPASSWD小心限制您允许的命令。