如何解决SFTP私钥的‘incorrect padding’错误?
解决SFTP私钥访问的“incorrect padding”错误
核心问题:用错了paramiko的API
你当前代码里的paramiko.hostkeys.HostKeys是用来加载**主机信任列表(类似~/.ssh/known_hosts)**的,不是用来加载用户私钥的,这是导致错误的直接原因。
正确加载私钥的方法
方法1:直接加载无密码私钥
import paramiko # 加载桌面路径下的私钥文件 private_key = paramiko.RSAKey.from_private_key_file("C:/Users/你的用户名/Desktop/你的私钥文件名") # 建立SFTP连接 transport = paramiko.Transport(("sftp服务器地址", 22)) transport.connect(username="你的SFTP用户名", pkey=private_key) sftp = paramiko.SFTPClient.from_transport(transport) # 示例操作:列出服务器根目录内容 print(sftp.listdir("/")) # 关闭连接 sftp.close() transport.close()
方法2:加载带密码的私钥
如果你的私钥设置了保护密码,加载时需要指定密码参数:
private_key = paramiko.RSAKey.from_private_key_file("C:/Users/你的用户名/Desktop/你的私钥文件名", password="你的私钥密码")
额外排查点
- 确认PuttyGen导出格式:选择
Conversion > Export OpenSSH key时,要确保导出的是私钥文件,打开文件查看开头应为-----BEGIN RSA PRIVATE KEY-----,结尾为-----END RSA PRIVATE KEY-----。 - 检查私钥完整性:确保文件未被截断、修改,可直接用记事本打开验证内容格式。
- 权限设置:Windows下将私钥文件权限设为仅当前用户可读,避免权限过宽引发的潜在问题。
内容的提问来源于stack exchange,提问作者PeterP
相关产品推荐
相关产品推荐

