Paramiko:“不是有效的RSA私钥文件”

Owa*_*mad 3 python ssh paramiko

我正在尝试使用以下Spinet连接到服务器

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ip = ['x.x.x.x']
key_file = "/Users/user/.ssh/id_rsa"

key = paramiko.RSAKey.from_private_key_file(key_file)
ssh.load_system_host_keys()
ssh.connect(ips, port=22, username='XYZ', pkey=key, timeout=11)
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

不是有效的RSA私钥文件

Mar*_*ryl 12

最新版本的 OpenSSH(7.8 及更高版本)默认以新的OpenSSH 格式生成密钥,其开头为:

-----BEGIN OPENSSH PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

自2.7.1 (2019-12-09) 版本以来,Paramiko完全支持该格式。


如果您坚持使用旧版本的 Paramiko,您可以使用ssh-keygen将密钥转换为经典的OpenSSH 格式:

ssh-keygen -p -f file -m pem -P passphrase -N passphrase
Run Code Online (Sandbox Code Playgroud)

(如果密钥未使用密码加密,请使用""代替passphrase)

对于 Windows 用户:请注意,ssh-keygen.exe现在 Windows 10 中内置了它。对于旧版本的 Windows ,可以从 Microsoft Win32-OpenSSH 项目下载。


在 Windows 上,您还可以使用 PuTTYgen(来自PuTTY 包):

  • 启动 PuTTYgen
  • 加载密钥
  • 转至转换 > 导出 OpenSSH 密钥。
    对于 RSA 密钥,它将使用经典格式。

如果您使用 来创建新密钥ssh-keygen,只需添加-m PEM即可以经典格式生成新密钥:

ssh-keygen -m PEM
Run Code Online (Sandbox Code Playgroud)


小智 6

我遇到了类似的情况,而ssh-keygen帮了我大忙。您应该复制id_rsa并使用ssh-keygen将其转换为RSA类型。

要将“ BEGIN OPENSSH私钥”转换为“ BEGIN RSA私钥”

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

  • Paramiko 现在支持新的 OpenSSH 格式。不再需要转换。请参阅[我的答案](/sf/ask/3822882661/#60000004)。 (2认同)