Ssh Capistrano、sudo命令和多个密码

Ssh Capistrano、sudo命令和多个密码,ssh,capistrano,sudo,Ssh,Capistrano,Sudo,我使用capistrano来运行命令。我有基于ssh密钥的身份验证,但每台机器上都有不同的sudo密码 我的档案是这样的 default_run_options[:pty] = true role :admin, "server1","server2","server3" desc "myCommand" task :mycommand, :roles=>:admin do run "cd <workdir> && #{sudo} <comman

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

我的档案是这样的

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假设我在每台服务器上都有相同的密码,这可能吗?如何修复此问题?

对于此类自动安装,最常见的是在没有设置密码短语的情况下使用SSH密钥。仅仅拥有私钥就足以允许登录,因此文件本身实际上就是密码


通过在SSH配置中限制密钥可以从哪个IP地址连接,以及允许运行哪些命令,您可以进一步保护系统,以防文件泄漏。

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

要允许用户bob sudo在无密码的情况下访问cat,您需要将以下内容添加到sudoers文件中:

bob ALL=NOPASSWD: /bin/cat

这里显然存在一些安全问题,但我觉得它们比让您的cap用户完全访问您的所有箱子要少。请务必通读“man sudoers”,并仔细限制使用NOPASSWD时允许使用的命令。

请参阅此问题的答案:我已经有了公钥登录设置,但我需要sudo。我可以以某种方式取消并行运行吗?我使用capistrano是出于管理目的,而不是部署目的。所以我需要sudo。就像我说的,我已经设置了公钥登录。这不是一个好的选择。难道没有办法以串行方式而不是并行方式执行命令吗?