如何通过Fabric传递SSH选项?

时间:2013-02-01 18:42:30

标签: python ssh automation fabric

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

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

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

1 个答案:

答案 0 :(得分:8)

简短的回答是:

  1. 对于新主机,不需要任何东西。 env.reject_unknown_hosts默认为False
  2. 对于已更改密钥的已知主机,env.disable_known_hosts = True将决定继续连接到已更改的主机。
  3. 阅读你们的文档: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 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会让您大开眼界   中间人攻击!请谨慎使用。