Paramiko不是有效的RSA私钥文件

时间:2019-02-10 01:44:15

标签: macos 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)

但是我有一个错误,不是有效的RSA私钥文件

我面临以下错误

不是有效的RSA私钥文件

4 个答案:

答案 0 :(得分:8)

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

-----BEGIN OPENSSH PRIVATE KEY-----

仅从version 2.7.1 (2019-12-09)开始,Paramiko完全支持该格式。


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

ssh-keygen -p -f file -m pem -P passphrase -N passphrase

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

对于Windows用户:请注意,ssh-keygen.exe现在内置在Windows 10中。对于旧版本的Windows,可以是downloaded from Microsoft Win32-OpenSSH project


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

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

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

ssh-keygen -m PEM

答案 1 :(得分:2)

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

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

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa

答案 2 :(得分:0)

paramiko.RSAKey.from_private_key_file方法要求私钥文件为“ PEM”格式。检查您要读取的文件,并查看文件是否以以下一行开头:

-----BEGIN RSA PRIVATE KEY-----

如果没有该行,则不是PEM。

如果不是PEM,则必须找到某种方法来创建私钥的PEM版本。 (编辑:原始发布者使用PuTTY的puttygen实用程序将私钥导出为PEM格式的文​​件。)

请确保新文件具有与原始id_rsa文件相同的所有权和有限的访问权限,以便没有人可以通过读取文件来窃取密钥。然后,显然,修改您的paramiko调用以从新的PEM格式文件中读取密钥。

答案 3 :(得分:0)

我在使用 ssh 连接到 Ubuntu VM 时遇到了同样的错误。 在我的终端 SSH_AUTH_SOCK 环境变量未定义,paramiko 抛出 not a valid RSA private key file 错误。 但是,如果我在图形会话中连接到同一台机器,则图形终端已定义 SSH_AUTH_SOCK,Paramiko 很高兴。 作为一种解决方法,我在 SSH 终端中复制了 SSH_AUTH_SOCK 的内容,效果更好。