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

使用Fabric使用git pull的SSH密钥密码短语,git,fabric,ssh-keys,passphrase,Git,Fabric,Ssh Keys,Passphrase,我正在尝试使用fabric自动化应用程序的部署 应用程序代码托管在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')

我正在尝试使用fabric自动化应用程序的部署

应用程序代码托管在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命令上,我都会得到一个提示:
输入密钥'/home/myuser/.ssh/id\u rsa

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


我已经试过了,但我想知道是否有更好的(即标准的)方法。制作钥匙时不要使用密码短语。只需按enter键,然后再次按确认。您还可以有多个键。有些有密码,有些没有。

您还可以使用ssh密钥代理和代理转发。始终在密钥上输入密码。Github在如何利用这一点上有很好的文档


结构现在还应该具有代理转发功能。在一些角落的情况下,我遇到了麻烦,但在一个明确的地方(“SSH - A.……”)周围绕过它们,直到解决问题。

< P>尽管我认为在接受的回答中描述的SSH-AGET转发是一个更好的解决方案(如果你成功了),但是还有其他选择,由结构本身提供:
结构有自己的密码设置选项(即
环境密码
条目)。如果设置
env.password
(),则可以使结构自动输入密码短语(和sudo passwod):

密码 默认值:
None

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

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

  • 直接在“fabfile.py”内的代码中使用
    env.password='password'
  • 在命令行中作为
    fab
    命令的选项,使用
    -p PASSWORD
    -PASSWORD=PASSWORD
    ()
  • 作为另一个选项,您可以将
    passwod=PASSWORD
    行放入
    ~/.fabrirc
    ()中,该行在每个
    fab
    命令之前加载,如果使用此选项,则不需要命令行选项或代码更改

如果他正在使用他的个人密钥,最好使用密码,以免打开的不仅仅是他要攻击的盒子。更不用说他的github页面了。对于机器人,我可能更倾向于同意无密码钥匙是可以的。应该使用多个钥匙。您不应该对所有内容都使用一个密钥。这就是.ssh/config的用途。您可以在那里分配所有这些,然后仍然使用代理转发。代理转发易受代理劫持的影响。组织禁用代理转发。如果你不愿意使用没有密码的密钥,最好使用不同的github密钥。如果你不信任box的root用户,这很容易受到影响。其中,该根用户可以模拟所述用户。但是,如果私钥是无密码的,那么将其保留在盒子中同样容易受到root(以及任何能够访问该文件的人)模拟的影响。(来自)ssh aget转发工作人员!太棒了。这实际上也解决了很多其他问题。谢谢!“始终将密码放在密钥上”不如“不要复制私钥”。生成新密钥。确实是。我得到了你的密钥副本,我可以访问你的服务器。密码密钥使其成为两阶段身份验证,而不考虑密钥的数量。请参阅有关代理劫持的评论。你无法控制。您可以控制私钥的安全性。