使用 Paramiko 更改主机密钥时自动更新 known_hosts 文件
Posted
技术标签:
【中文标题】使用 Paramiko 更改主机密钥时自动更新 known_hosts 文件【英文标题】:Automatically updating known_hosts file when host key changes using Paramiko 【发布时间】:2018-05-06 09:56:35 【问题描述】:目前我正在使用 Paramiko(在 Python 中)在节点上执行远程命令。有时,远程节点会更改其公钥,因此 Paramiko 由于指纹不匹配而失败。有没有办法在 known_hosts
文件中更改密钥时更新它们?如果这不可能,还有其他方法可以忽略引发的警告吗?
目前我有一个 hacky 解决方案,其中 known_hosts
文件在拨打电话之前被删除,这是不好的。
【问题讨论】:
【参考方案1】:BadHostKeyException
在主机密钥更改时抛出,因为这是连接被劫持的标志(又名Man-in-the-middle attack)。
您永远不应盲目地忽略异常。除非可能,如果您连接到与您的客户端位于同一专用网络中的服务器。
在您的具体情况下,更好的策略是在服务器重新安装期间保留主机密钥。
无论如何,如果你真的不关心安全,并且愿意盲目接受任何主机密钥:
不要调用SSHClient.load_host_keys
,这样你就从已知主机密钥的空白列表开始;
并使用AutoAddPolicy
,自动接受新主机的主机密钥(由于前一点,所有主机都是新的):
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
【讨论】:
以上是关于使用 Paramiko 更改主机密钥时自动更新 known_hosts 文件的主要内容,如果未能解决你的问题,请参考以下文章
Python - pysftp / paramiko - 使用其指纹验证主机密钥
自动化运维:使用psutil和paramiko读取远程主机信息