我们正在努力改善某些服务器进程的自动化;我们使用Fabric。我预计必须管理多个主机,这意味着必须与以前没有通过SSH的服务器建立SSH连接。如果发生这种情况,SSH总是要求验证连接,这将破坏自动化。
我在同一个过程中使用-o stricthostkeychecking=no
选项在我用来与rsync
同步代码的SSH命令上解决了这个问题,但是我还需要在调用时使用它与Fabric。
有没有办法将特定于ssh的选项传递给Fabric,特别是我上面提到的那个?
答案 0 :(得分:8)
简短的回答是:
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 via中控制的 env.reject_unknown_hosts选项,默认为False 方便的缘故。我们认为这是一个有效的权衡 方便和安全;任何其他人都可以轻易修改 在模块级别设置enf.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会让您大开眼界 中间人攻击!请谨慎使用。