我正在设置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密码,即使它像以前一样设置......这个配置有什么问题?输入密码可以让流程继续进行并且一切正常,但我想避免每次都输入密码。
由于 丹尼尔
答案 0 :(得分:4)
我不明白为什么capistrano一直要求你输入密码。但是,解决此问题的一种方法是使用公共密钥身份验证,这也是在capistrano wiki中建议的。 (有关如何进行设置的示例,请参阅this tutorial)
简而言之:
ssh-keygen -t rsa -C "youremail"
scp -p .ssh/id_rsa.pub remoteuser@remotehost:
cat id_rsa.pub >> ~/.ssh/authorized_keys
。 (您可能需要创建.ssh目录)之后,您只需要输入一次密码,就不需要在deploy.rb文件中对密码进行硬编码。
答案 1 :(得分:1)
根据更有经验的用户,我可以说使用密码进行ssh身份验证不是一个好习惯。使用ssh keys并依赖它们会好得多。只需要删除行
set :password, "sshpassword"
显然在每个要部署的服务器上设置公钥。