我想使用pysftp读取远程服务器上的文件。为此,我在想要连接的服务器上生成了ssh密钥,并将公钥添加到我的代码中。在我改变我的虚拟机(debian 10)之前,它工作得很好。现在我有一个错误:
SSHException: Bad host key from server
如果有人有主意的话会对我有很大帮助的。
下面是我的代码:from base64 import decodebytes
import os
import pysftp
import paramiko
host = os.getenv('host')
username = os.getenv('username')
password = os.getenv('password')
#public key
keydata = bytes(os.getenv('key'),'UTF-8')
key = paramiko.RSAKey(data=decodebytes(keydata))
cnopts = pysftp.CnOpts()
cnopts.hostkeys.add(host,'ssh-rsa', key)
with pysftp.Connection(host=host, username=username, password=password, cnopts=cnopts, port=22) as sftp:
sftp.cwd('/home/user/')
for attr in sftp.listdir():
print(attr)
您可以通过以下方式调试:
- 检查您的密钥是否在开头或结尾有空白。
- 然后用您的密钥直接ssh到该服务器请确保您使用
-v
选项详细记录日志。 - 检查
/etc/ssh/sshd_config
是否允许sftp(好的方法是使用不同的sftp用户进行安全通信)。