多服务器部署:询问每个服务器的ssh密码

时间:2011-11-23 11:45:25

标签: ssh capistrano capifony

我正在设置Capifony(Capistrano用于symfony)但是在测试多个服务器部署时我遇到了ssh密码问题。

这里有一些版本:

daniel@fiji:~$ ruby --version
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]

daniel@fiji:~$ cap --version
Capistrano v2.9.0

daniel@fiji:~$ uname -a
Linux fiji 3.0.0-13-generic-pae #22-Ubuntu SMP Wed Nov 2 15:17:35 UTC 2011 i686 i686 i386 GNU/Linux

来自deploy.rb的一些配置:

set :domain, "mydomain"
...
set :user, "sshuser"
set :password, "sshpassword"
...
role :web, domain
role :app, domain
...

部署到单个服务器的效果很好,无需输入密码。一切都很好。但是,如果我尝试使用如下配置向配置添加更多服务器(我需要部署到6到9台机器):

...
set :user, "sshuser"
set :password, "sshpassword"
role :web, "ipaddr1", "ipaddr2"
role :app, "ipaddr1", "ipaddr2"
...

Capistrano开始问我列出的每个服务器的ssh密码,即使它像以前一样设置......这个配置有什么问题?输入密码可以让流程继续进行并且一切正常,但我想避免每次都输入密码。

由于 丹尼尔

2 个答案:

答案 0 :(得分:4)

我不明白为什么capistrano一直要求你输入密码。但是,解决此问题的一种方法是使用公共密钥身份验证,这也是在capistrano wiki中建议的。 (有关如何进行设置的示例,请参阅this tutorial

简而言之:

  1. 您使用ssh-keygen -t rsa -C "youremail"
  2. 生成密钥
  3. 您将公钥复制到远程主机scp -p .ssh/id_rsa.pub remoteuser@remotehost:
  4. 您将公钥添加到服务器上的授权密钥文件 cat id_rsa.pub >> ~/.ssh/authorized_keys。 (您可能需要创建.ssh目录)
  5. 之后,您只需要输入一次密码,就不需要在deploy.rb文件中对密码进行硬编码。

答案 1 :(得分:1)

根据更有经验的用户,我可以说使用密码进行ssh身份验证不是一个好习惯。使用ssh keys并依赖它们会好得多。只需要删除行

set :password, "sshpassword"

显然在每个要部署的服务器上设置公钥。