使用Paramiko在主机密钥更改时自动更新known_hosts文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Paramiko在主机密钥更改时自动更新known_hosts文件相关的知识,希望对你有一定的参考价值。

目前我正在使用Paramiko(在Python中)在节点上执行远程命令。有时,远程节点会更改其公钥,因此Paramiko会因指纹不匹配而失败。有没有办法在更改时更新known_hosts文件中的密钥?如果这是不可能的,还有其他方法可以忽略抛出的警告吗?

目前我有一个hacky解决方案,在拨打电话之前删除known_hosts文件是不好的。

-Prashanth

答案

主机密钥更改时会抛出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 - 使用其指纹验证主机密钥

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

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

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

在单个主机上使用多个密钥时 SSH 使用错误的密钥

paramiko之ssh用法