使用 Fabric 使用 git pull 的 SSH 密钥密码
Posted
技术标签:
【中文标题】使用 Fabric 使用 git pull 的 SSH 密钥密码【英文标题】:SSH key passphrase with git pull using Fabric 【发布时间】:2012-09-06 15:37:51 【问题描述】:我正在尝试使用结构自动部署应用程序。
应用程序代码托管在 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 命令上我都会收到一个提示:Enter passphrase for key '/home/myuser/.ssh/id_rsa
:
有没有办法自动输入密码?每台服务器都一样,和sudo密码一样
我试过fexpect library,但我想知道是否有更好(即标准)的方法。
【问题讨论】:
【参考方案1】:您还可以使用 ssh 密钥代理并使用代理转发。始终在密钥上设置密码。 Github 有很好的文档说明如何使用这个here。
Fabric 现在还应该具有代理转发能力。在某些极端情况下,我遇到了麻烦,但使用明确的 local('ssh -A...) 解决了这些问题,直到问题得到解决。
【讨论】:
ssh-aget 转发工作!太精彩了。这实际上也解决了许多其他问题。非常感谢! “总是把密码放在密钥上”不如“不要复制私钥”。生成新密钥。 当然可以。我得到了您的密钥副本,并且可以访问您的服务器。密码密钥使其成为两阶段身份验证,无论密钥数量如何。 查看关于代理劫持的评论。你无法控制它。您可以在一定程度上控制您的私钥的安全。【参考方案2】:虽然我认为接受的答案中描述的 ssh-aget 转发是一个更可取的解决方案(如果你得到它的工作),但有替代它,由 Fabric 本身提供:Fabric 有它自己的“密码”设置 选项(即env.password
条目)。如果您设置env.password
(see documentation),您可以让fabric 自动输入密码(和sudo passwod):
密码
默认:
None
SSH 层连接远程时使用的默认密码 主机,和/或在回答 sudo 提示时。
你可以用它来设置密码:
直接在“fabfile.py”内的代码中使用env.password = 'PASSWORD'
,
在命令行中作为fab
命令的选项,使用-p PASSWORD
或--password=PASSWORD
(documentation)。
作为另一个选项,您可以将passwod=PASSWORD
行放在~/.fabricrc
(documentation) 中,该行在每个fab
命令之前加载,如果使用此选项,则不需要命令行选项或代码更改。
【讨论】:
【参考方案3】:制作密钥时不要使用密码短语。只需按回车键,然后再次确认。您还可以拥有多个密钥。有些有密码,有些没有。
【讨论】:
如果他使用他的个人密钥,最好使用密码,以免打开他部署攻击的盒子以外的其他东西。更不用说他的github页面了。对于机器人,我可能更倾向于同意无密码密钥是可以的。 应该使用多个键。您不应该对所有事情都使用一把钥匙。 这就是 .ssh/config 的用途。您可以在那里分配所有内容,然后仍然使用代理转发。 代理转发容易受到代理劫持。组织禁用代理转发。如果您不愿意使用没有密码的密钥,最好只为 github 使用不同的密钥。 如果您不信任盒子的 root 用户,它很容易受到影响。那么该root用户可以在哪里冒充所述用户。但是,在没有密码的情况下,将私钥保留在盒子上同样容易受到 root(以及任何能够访问该文件的人)的影响。 (来自unixwiz.net/techtips/ssh-agent-forwarding.html)以上是关于使用 Fabric 使用 git pull 的 SSH 密钥密码的主要内容,如果未能解决你的问题,请参考以下文章