Paramiko 2.8.1连接AWS SFTP报错:无可用兼容主机密钥
解决Paramiko 2.8.1连接AWS SFTP时的主机密钥不兼容问题
错误信息
paramiko.ssh_exception.SSHException: Incompatible ssh peer (no acceptable host key)
环境信息
- Paramiko版本:2.8.1(无法更新)
- 当前身份验证私钥获取方式:
pkey = Ed25519Key.from_private_key(io.StringIO(private_key_ascii))
(原RSAKey方式无法工作)
调试日志关键内容
DEBUG:paramiko.transport:Remote version/idstring: SSH-2.0-AWS_SFTP_1.1 DEBUG:paramiko.transport:server key:['rsa-sha2-512', 'rsa-sha2-256'] DEBUG:paramiko.transport:Kex agreed: curve25519-sha256@libssh.org ERROR:paramiko.transport:Exception: Incompatible ssh peer (no acceptable host key)
问题分析
从日志可见,AWS SFTP服务器仅支持rsa-sha2-512和rsa-sha2-256作为主机密钥算法,但Paramiko 2.8.1默认的主机密钥算法列表中未包含这两种,导致客户端无法匹配服务器提供的主机密钥,触发兼容性错误。
注意:你使用的Ed25519私钥是用户身份验证密钥,与本次报错的服务器主机密钥验证是两个独立环节,身份验证密钥的选择不影响主机密钥兼容性问题。
解决方案
方法1:显式指定主机密钥算法列表
在调用connect方法时,通过hostkey_algorithms参数指定服务器支持的算法,强制客户端启用对这两种RSA-SHA2算法的支持:
用SSHClient的示例代码:
import paramiko import io private_key_ascii = "你的私钥内容" pkey = paramiko.Ed25519Key.from_private_key(io.StringIO(private_key_ascii)) ssh_client = paramiko.SSHClient() # 根据实际需求选择主机密钥策略,AutoAddPolicy会自动添加未知主机密钥(仅测试环境建议) ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_client.connect( hostname="你的SFTP服务器地址", username="你的用户名", pkey=pkey, hostkey_algorithms=['rsa-sha2-256', 'rsa-sha2-512'] ) # 后续SFTP操作 sftp = ssh_client.open_sftp() # ... 你的操作代码 sftp.close() ssh_client.close()
用Transport的示例代码:
import paramiko import io private_key_ascii = "你的私钥内容" pkey = paramiko.Ed25519Key.from_private_key(io.StringIO(private_key_ascii)) transport = paramiko.Transport(("你的SFTP服务器地址", 22)) transport.connect( username="你的用户名", pkey=pkey, hostkey_algorithms=['rsa-sha2-256', 'rsa-sha2-512'] ) # 后续SFTP操作 sftp = paramiko.SFTPClient.from_transport(transport) # ... 你的操作代码 sftp.close() transport.close()
方法2:提前配置服务器主机密钥到known_hosts(生产环境推荐)
如果使用严格的主机密钥验证策略(StrictHostKeyPolicy),需要提前获取AWS SFTP服务器的RSA公钥,并添加到本地的known_hosts文件中。
获取服务器公钥的方式可以通过命令行:
ssh-keyscan -t rsa 你的SFTP服务器地址 >> ~/.ssh/known_hosts
(Windows系统路径通常为C:\Users\你的用户名\.ssh\known_hosts)
然后在代码中使用默认的主机密钥策略,同时确保hostkey_algorithms参数包含rsa-sha2-256和rsa-sha2-512。
内容的提问来源于stack exchange,提问作者LearnerJS
相关产品推荐
相关产品推荐

