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

pysftp连接SFTP报SSHException: encountered EC key expected DSA key如何解决

问题根因
  • 你使用的pysftp库已停止维护,内置的私钥加载逻辑仅支持自动识别RSA、DSA两种密钥类型,无法识别你所持有的ECDSA类型密钥
  • pysftp的private_key参数仅接受密钥文件的路径字符串,不支持直接传入paramiko加载好的密钥对象,因此你手动加载ECDSAKey后传入会触发类型错误
  • 首次报错是因为.ppk是PuTTY专属的密钥格式,非OpenSSH标准格式,无法被pysftp/paramiko直接识别,你后续使用PuTTYgen转换为普通密钥文件的操作是正确的
解决方案

推荐直接使用pysftp依赖的底层库paramiko实现SFTP连接,paramiko原生支持ECDSA密钥,也支持直接传入加载好的密钥对象,示例代码如下:

import paramiko
from paramiko import ECDSAKey

# 加载ECDSA私钥
private_key = ECDSAKey.from_private_key_file("path/finalkey", password="你的密钥密码")

# 初始化SSH客户端
ssh_client = paramiko.SSHClient()
# 按需配置主机密钥校验策略,生产环境建议使用已知主机密钥校验,而非自动添加
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 建立SSH连接
ssh_client.connect(
    hostname="some.hostname.com",
    port=22,
    username="username",
    pkey=private_key
)

# 开启SFTP会话
sftp = ssh_client.open_sftp()
# 切换远程目录
sftp.chdir('/upload/')
# 上传本地文件到远程目录
sftp.put('本地路径/test.csv', 'test.csv')
print('file Uploaded')

# 按顺序关闭连接
sftp.close()
ssh_client.close()

内容的提问来源于stack exchange,提问作者rajsx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:48:04