You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:20:18