3

我正在设置 Capifony(用于 symfony 的 Capistrano),但是在测试多个服务器部署时我遇到了 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 密码,即使它设置为像以前一样......这个配置有什么问题?输入密码可以让该过程继续并且一切正常,但我想避免每次都输入密码。

谢谢丹尼尔

4

2 回答 2

4

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

简而言之:

  1. 您使用生成密钥ssh-keygen -t rsa -C "youremail"
  2. 您将公钥复制到远程主机scp -p .ssh/id_rsa.pub remoteuser@remotehost:
  3. 您将公钥添加到服务器上的授权密钥文件中: cat id_rsa.pub >> ~/.ssh/authorized_keys . (您可能需要创建 .ssh 目录)

之后,您应该只需要输入一次密码,并且您不需要将密码硬编码在 deploy.rb 文件中。

于 2011-11-23T20:48:21.153 回答
1

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

set :password, "sshpassword"

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

于 2011-11-23T21:26:26.203 回答