11

我们正在努力提高一些服务器进程的自动化;我们使用织物。我预计必须管理多个主机,这意味着必须与以前未通过 SSH 连接的服务器建立 SSH 连接。如果发生这种情况,SSH 总是要求验证连接,这会破坏自动化。

我已经在同一个过程中解决了这个问题,在-o stricthostkeychecking=noSSH 命令上使用了我用来同步代码的选项rsync,但我还需要在与 Fabric 的调用中使用它。

有没有办法将特定于 ssh 的选项传递给 Fabric,尤其是我上面提到的那个?

4

1 回答 1

9

简短的回答是:

  1. 对于新主机,什么都不需要。env.reject_unknown_hosts默认为False
  2. 对于已更改密钥的已知主机,env.disable_known_hosts = True将决定继续连接到已更改的主机。

阅读你的老文档:http ://docs.fabfile.org/en/1.5/usage/ssh.html#unknown-hosts

paramiko 库能够加载您的 known_hosts 文件,然后将其连接到的任何主机与该映射进行比较。设置可用于确定在看到未知主机(在 known_hosts 中找不到其用户名或 IP 的主机)时会发生什么:

  • 拒绝:主机密钥被拒绝,并且没有建立连接。这会导致 Python 异常,它将终止您的 Fabric 会话,并显示主机未知的消息。
  • 添加:将新的主机密钥添加到已知主机的内存列表中,建立连接,一切正常。请注意,这不会修改您磁盘上的 known_hosts 文件!
  • 问:尚未在 Fabric 级别实现,这是一个 paramiko 库选项,会导致用户被提示未知密钥以及是否接受它。

如上所述,是否拒绝或添加主机在 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 将使您对中间人攻击敞开大门!请谨慎使用。

于 2013-02-01T19:13:06.683 回答