Ssh Capistrano、sudo命令和多个密码
我使用capistrano来运行命令。我有基于ssh密钥的身份验证,但每台机器上都有不同的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
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。就像我说的,我已经设置了公钥登录。这不是一个好的选择。难道没有办法以串行方式而不是并行方式执行命令吗?