Jua*_*oto 11 python ssh automation fabric
我们正在努力改善某些服务器进程的自动化; 我们使用Fabric.我预计必须管理多个主机,这意味着必须对之前未通过SSH进入的服务器建立SSH连接.如果发生这种情况,SSH总是要求验证连接,这将破坏自动化.
我已经解决了这个问题,在同一个过程中,使用-o stricthostkeychecking=no我用来同步代码的SSH命令选项rsync,但是我还需要在使用Fabric调用时使用它.
有没有办法将特定于ssh的选项传递给Fabric,特别是我上面提到的那个?
简短的回答是:
env.reject_unknown_hosts默认为Falseenv.disable_known_hosts = True将决定继续连接到已更改的主机.阅读你们的文档:http://docs.fabfile.org/en/1.5/usage/ssh.html#unknown-hosts
paramiko库能够加载known_hosts文件,然后将其连接的任何主机与该映射进行比较.设置可用于确定当看到未知主机(在known_hosts中找不到用户名或IP的主机)时会发生什么:
如上所述,是否拒绝或添加主机是通过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会让您对中间人攻击敞开大门!请谨慎使用.