小能豆

Paramiko“未知服务器”

javascript

我正在尝试开始使用 Paramiko 库,但是当我尝试连接以下简单程序时,该库就会引发异常:

import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')

我收到的错误是:

Traceback (most recent call last):
File "test.py", line 6, in <module>
ssh.connect('127.0.0.1')
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 316, in connect
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 85, in missing_host_key
paramiko.SSHException: Unknown server 127.0.0.1

无论我尝试哪个服务器都会发生这种情况。


阅读 42

收藏
2024-06-28

共1个答案

小能豆

您在使用 Paramiko 时遇到的错误与主机密钥验证有关。Paramiko 抛出异常,因为它无法识别服务器(在本例中为127.0.0.1),并且无法验证其主机密钥。这是一项防止中间人攻击的安全功能。

要解决此问题,您有以下几种选择:

选项 1:禁用 StrictHostKeyChecking

此选项禁用主机密钥检查,除非您确定存在安全隐患,否则不建议在生产中使用。

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')
  • 解释set_missing_host_key_policy(paramiko.AutoAddPolicy())设置策略以自动将未知主机添加到文件known_hosts。这避免了SSHException由于未知主机密钥而导致的故障。

选项 2:手动添加主机密钥

此选项更安全,因为它明确添加了已知主机的主机密钥。

import paramiko

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')
  • 解释load_system_host_keys()从系统known_hosts文件加载主机密钥。这要求known_hosts文件存在且包含 的主机密钥127.0.0.1

其他提示:

  • 验证服务器地址:仔细检查您是否连接到正确的服务器(127.0.0.1在您的情况下)。
  • 主机密钥更改:如果服务器的主机密钥发生更改(例如,由于服务器重新安装或配置更改),Paramiko 将引发此异常。在这种情况下,您应该更新文件中的主机密钥known_hostsparamiko.AutoAddPolicy()谨慎使用。

选择最适合您的安全要求和设置的选项。如果您在本地或受信任的环境中测试,paramiko.AutoAddPolicy()可能会更方便。对于生产,请考虑使用load_system_host_keys()手动管理或谨慎管理主机密钥。

2024-06-28