0

我使用 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 假设我在每台服务器上都有相同的密码,这可能吗?我该如何解决?

4

2 回答 2

0

对于此类自动安装,最常见的做法是使用未设置密码的 SSH 密钥。仅拥有私钥就足以允许登录(因此文件本身实际上就是密码)。

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

于 2012-04-16T16:12:58.993 回答
0

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

要让用户 bob sudo 无需密码即可访问 cat,您可以将其添加到您的 sudoers 文件中:

bob ALL=NOPASSWD: /bin/cat

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

于 2012-04-16T21:05:17.123 回答