欢迎访问宙启技术站
智能推送

Python中BadHostKeyException()异常的原因和处理方法

发布时间:2024-01-16 12:53:34

Python中的BadHostKeyException()异常是paramiko库中的一个异常类,当SSH连接的目标主机的主机密钥与本地保存的主机密钥不匹配时,会引发此异常。主机密钥是用于验证SSH服务器的身份,以确保连接的安全性。

主要原因:

1. 当首次连接到目标主机时,本地没有保存目标主机的主机密钥,无法验证目标主机的身份。

2. 目标主机的主机密钥在上一次连接后更改了。

处理方法:

1. 手动确认主机密钥:首次连接目标主机时,可以选择手动确认主机密钥,将其保存到本地,以便后续连接时使用。这样可以避免再次引发此异常。

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    ssh.connect('example.com', username='username', password='password')
except paramiko.BadHostKeyException as e:
    print("Host key verification failed")
    print("SSHException:", e)
ssh.close()

2. 删除本地保存的主机密钥:如果目标主机的主机密钥在上一次连接后更改了,可以删除本地保存的主机密钥,再次连接时会重新保存新的主机密钥。

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    ssh.load_host_keys(filename='/path/to/known_hosts')
    ssh.connect('example.com', username='username', password='password')
except paramiko.BadHostKeyException as e:
    print("Host key verification failed")
    print("SSHException:", e)
ssh.close()

3. 指定新的主机密钥:如果目标主机的主机密钥在更改后已知,并且希望使用新的主机密钥进行连接,可以将新的主机密钥添加到本地保存的主机密钥中。

import paramiko

new_host_key = paramiko.RSAKey(filename='/path/to/new_key')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    ssh.load_host_keys(filename='/path/to/known_hosts')
    ssh.get_host_keys().add('example.com', 'ssh-rsa', new_host_key)
    ssh.connect('example.com', username='username', password='password')
except paramiko.BadHostKeyException as e:
    print("Host key verification failed")
    print("SSHException:", e)
ssh.close()

这些处理方法可以根据实际需要进行选择,以确保SSH连接的安全性和正确性。