使用Fabric的git pull的SSH密钥密码

时间:2012-09-13 14:05:38

标签: git fabric ssh-keys passphrase

我正在尝试使用结构自动部署应用程序。

应用程序代码托管在GitHub上,推出新版本非常简单 - 只需要'git pull'就可以了。该应用程序托管在100台服务器上,因此我希望自动部署。 Fabfile.py:

def deploy():
  code_path = '/home/myuser/myapp'
  with cd(code_path):
    run('git pull')
    run('git submodule update --init --recursive')

问题是,在每个git命令上我得到一个promt:Enter passphrase for key '/home/myuser/.ssh/id_rsa

有没有办法自动输入密码?它在每台服务器上都是一样的,与sudo密码相同

我试过fexpect library,但我想知道是否有更好(即标准)的做法。

3 个答案:

答案 0 :(得分:13)

您还可以使用ssh密钥代理并使用代理转发。始终在密钥上输入密码。 Github有关于如何利用这个here的好文档。

Fabric现在也应该具有代理转发能力。在一些极端情况下,我遇到了麻烦,但是在问题解决之前,用一个明确的本地('ssh -A ...)作为解决方法绕过它们。

答案 1 :(得分:1)

虽然我认为在接受的答案中描述的ssh-aget转发是一个更好的解决方案(如果你得到了它),但有替代它,由Fabric本身提供:
Fabric 拥有自己的“密码”设置选项(即env.password条目)。如果设置env.passwordsee documentation),你可以让fabric自动输入密码(和sudo passwod):

  

密码

     

默认值:None

     

连接到远程时SSH层使用的默认密码   主机,和/或在回答sudo提示时。

您可以使用以下任一选项设置密码

  • 直接在“fabfile.py”,
  • 中的代码中使用env.password = 'PASSWORD'
  • 在命令行中作为fab命令的选项,使用-p PASSWORD--password=PASSWORDdocumentation)。
  • 作为另一种选择,您可以将passwod=PASSWORD行放在~/.fabricrcdocumentation)中,该fab行在每个gcc命令之前加载,命令行选项和代码更改都不是如果您使用此选项,则必须提供。

答案 2 :(得分:-9)

制作密钥时请勿使用密码短语。只需按Enter键再按确认即可。您还可以拥有多个密钥。有些是密码,有些没有。