我们正在努力提高一些服务器进程的自动化;我们使用织物。我预计必须管理多个主机,这意味着必须与以前未通过 SSH 连接的服务器建立 SSH 连接。如果发生这种情况,SSH 总是要求验证连接,这会破坏自动化。
我已经在同一个过程中解决了这个问题,在-o stricthostkeychecking=no
SSH 命令上使用了我用来同步代码的选项rsync
,但我还需要在与 Fabric 的调用中使用它。
有没有办法将特定于 ssh 的选项传递给 Fabric,尤其是我上面提到的那个?
我们正在努力提高一些服务器进程的自动化;我们使用织物。我预计必须管理多个主机,这意味着必须与以前未通过 SSH 连接的服务器建立 SSH 连接。如果发生这种情况,SSH 总是要求验证连接,这会破坏自动化。
我已经在同一个过程中解决了这个问题,在-o stricthostkeychecking=no
SSH 命令上使用了我用来同步代码的选项rsync
,但我还需要在与 Fabric 的调用中使用它。
有没有办法将特定于 ssh 的选项传递给 Fabric,尤其是我上面提到的那个?
简短的回答是:
env.reject_unknown_hosts
默认为False
env.disable_known_hosts = True
将决定继续连接到已更改的主机。阅读你的老文档:http ://docs.fabfile.org/en/1.5/usage/ssh.html#unknown-hosts
paramiko 库能够加载您的 known_hosts 文件,然后将其连接到的任何主机与该映射进行比较。设置可用于确定在看到未知主机(在 known_hosts 中找不到其用户名或 IP 的主机)时会发生什么:
如上所述,是否拒绝或添加主机在 Fabric 中通过 env.reject_unknown_hosts 选项进行控制,为方便起见,默认为 False。我们认为这是便利性和安全性之间的有效权衡;任何有其他感觉的人都可以轻松地在模块级别修改他们的 fabfile 以设置 env.reject_unknown_hosts = True。
http://docs.fabfile.org/en/1.5/usage/ssh.html#known-hosts-with-changed-keys
SSH 的密钥/指纹跟踪的重点是可以检测到中间人攻击:如果攻击者将您的 SSH 流量重定向到他控制的计算机,并假装是您的原始目标服务器,主机密钥将不匹配。因此,SSH(及其 Python 实现)的默认行为是当先前记录在 known_hosts 中的主机突然开始向我们发送不同的主机密钥时立即中止连接。
在某些边缘案例(例如某些 EC2 部署)中,您可能希望忽略此潜在问题。在撰写本文时,我们的 SSH 层并没有让我们控制这种确切的行为,但我们可以通过简单地跳过加载 known_hosts 来回避它——如果要比较的主机列表是空的,那么就没有问题。当你想要这种行为时,将 env.disable_known_hosts 设置为 True;默认为 False,以保留默认的 SSH 行为。
警告启用 env.disable_known_hosts 将使您对中间人攻击敞开大门!请谨慎使用。