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
相关产品推荐
相关产品推荐

