【问题标题】:Multiple server deploy: asking ssh password for each server多服务器部署:询问每台服务器的 ssh 密码
【发布时间】:2012-01-04 17:06:07
【问题描述】:

我正在设置 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 密码,即使它设置为像以前一样......这个配置有什么问题?输入密码可以让这个过程继续进行,一切正常,但我想避免每次都输入密码。

谢谢 丹尼尔

【问题讨论】:

    标签: ssh capistrano capifony


    【解决方案1】:

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

    简而言之:

    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 文件中硬编码密码。

    【讨论】:

    • 如您所见,我最终得到了这个解决方案。我在 Capistrano ML 上得到了这个建议。谢谢。
    • hmm,即使我使用没有密码的 ssh 密钥登录服务器,它也会一直询问我的密码...有什么我可以做的吗?
    【解决方案2】:

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

    set :password, "sshpassword"
    

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

    【讨论】:

    • ssh 密码根本不应该存在。 ;-)
    猜你喜欢
    • 2019-01-01
    • 2016-08-20
    • 1970-01-01
    • 2022-10-17
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多