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

从Key Vault加载密钥到Python Paramiko时报‘无效RSA私钥文件’错误

解决Synapse笔记本连接SFTP时的“not a valid RSA private key file”错误

问题原因

你从Key Vault获取的SSHkey是公钥(格式以ssh-rsa AAAA...开头),但pysftp和paramiko的私钥加载接口要求传入私钥内容,公钥无法用作身份验证的私钥,因此触发格式错误。

解决方案

1. 确认Key Vault中存储的是私钥而非公钥

私钥的标准格式有两种,你需要将对应的私钥存入Key Vault:

  • PEM格式:开头为-----BEGIN RSA PRIVATE KEY-----,结尾为-----END RSA PRIVATE KEY-----
  • OpenSSH格式:开头为-----BEGIN OPENSSH PRIVATE KEY-----,结尾为-----END OPENSSH PRIVATE KEY-----

可以本地用ssh -i 私钥文件路径 user@sftp.xxxxx.no测试私钥+密码短语是否能正常连接SFTP,验证私钥有效性。

2. 修正代码逻辑

以下是调整后的完整代码,修复私钥加载、主机密钥解码等问题:

Host = "sftp.xxxxx.no"
Username = "xxxxx"
Passphrase = "xxxxx"
port = 22

from notebookutils import mssparkutils
import paramiko
import pysftp
import io
import base64

# 从Key Vault获取私钥(确保此处为私钥内容)
private_key_content = mssparkutils.credentials.getSecret('keyvault','SSHkey')

# 处理SFTP服务器的主机公钥(来自ssh-keyscan的结果)
keydata = b"""AAAAxxx=="""  # 替换为实际的ssh-keyscan输出公钥部分
server_public_key = paramiko.RSAKey(data=base64.decodebytes(keydata))

# 配置主机密钥验证
cnopts = pysftp.CnOpts()
cnopts.hostkeys.add(Host, 'ssh-rsa', server_public_key)

# 加载带密码短语的私钥
privkey_buffer = io.StringIO(private_key_content)
private_key = paramiko.RSAKey.from_private_key(privkey_buffer, password=Passphrase)

# 建立SFTP连接
client = pysftp.Connection(
    host=Host,
    username=Username,
    private_key=private_key,
    cnopts=cnopts
)

# 测试连接:列出目录内容
output = client.listdir()
print(output)

# 关闭连接
client.close()

3. 额外排查点

  • 如果Synapse环境未安装依赖,需在笔记本开头执行:%pip install paramiko pysftp
  • 若私钥是OpenSSH格式,确保paramiko版本≥2.7(新版本支持该格式)
  • 确认密码短语(Passphrase)与私钥的加密密码完全匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:45:35