如何通过Fabric传递SSH选项?

Jua*_*oto 11 python ssh automation fabric

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

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

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

Pet*_*ons 8

简短的回答是:

  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库选项,会导致用户被提示有关未知密钥以及是否接受它.

如上所述,是否拒绝或添加主机是通过env.reject_unknown_hosts选项在Fabric中控制的,为方便起见,默认情况下为False.我们认为这是方便和安全之间的有效权衡; 任何感觉不然的人都可以在模块级别轻松修改他们的fabfiles来设置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会让您对中间人攻击敞开大门!请谨慎使用.