使用 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Paramiko 从 SSH 跳转主机加载密钥

Python - pysftp / paramiko - 使用其指纹验证主机密钥

自动化运维:使用psutil和paramiko读取远程主机信息

python 3 paramiko ssh代理在第三台主机上使用远程命令转发跳转主机

paramiko之ssh用法

python密钥登录主机