Paramiko 无法识别由 ssh-keygen 生成的 SSH 密钥:"not a valid RSA private key file"
SSH key generated by ssh-keygen is not recognized by Paramiko: "not a valid RSA private key file"
我有以下代码:
ssh_key = paramiko.RSAKey.from_private_key_file(key_filename)
密钥如下所示:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEAqdgmJ2AQlmvpCsDWjbpIvIrx4AwtKn2t10wmGZIN9pqcJgQpo3HD
并且有效:
$ ssh-keygen -l -f <mykeyfile>
$ 2048 SHA256:x8jlUAObU3q2KXRtuGpxwhnGvB/ZoeD2IUqSA1OkCmI thomas@Thomas-MBP-2017 (RSA)
但我收到以下错误:
not a valid RSA private key file
这是在 MacOS 上,Python 2.7,Paramiko 2.4.2
我做错了什么?
对于OpenSSH 7.8以上,你必须要欺骗它。 运行 ssh-keygen -p [-f file] -m pem
据称更改密码,但重复使用旧密码。如果您想避免提示,请使用 -P oldpw -N newpw
,就像在脚本中一样,但要小心让其他用户看到您的密码。作为副作用,这会以 'old'(与 OpenSSL 兼容,因此与 paramiko 兼容)格式重写密钥文件(如果不是 ed25519)。 (如果要保留新格式文件,请先复制。)
对于旧版本的 OpenSSH,只需要 ssh-keygen -p [-f file]
WITHOUT -o
。
此外,如果您拥有(或获得)它,则从 0.69 开始的 PuTTY 套件中的 puttygen 实用程序支持此格式。在 Unix 版本中,只需执行 puttygen newfmtfile -O private-openssh -o oldfmtfile
(ed25519 除外)。在 Windows 版本 AFAICT 中,您必须使用 GUI;加载新的 fmt 文件并执行转换/导出 OpenSSH 密钥。
我有以下代码:
ssh_key = paramiko.RSAKey.from_private_key_file(key_filename)
密钥如下所示:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEAqdgmJ2AQlmvpCsDWjbpIvIrx4AwtKn2t10wmGZIN9pqcJgQpo3HD
并且有效:
$ ssh-keygen -l -f <mykeyfile>
$ 2048 SHA256:x8jlUAObU3q2KXRtuGpxwhnGvB/ZoeD2IUqSA1OkCmI thomas@Thomas-MBP-2017 (RSA)
但我收到以下错误:
not a valid RSA private key file
这是在 MacOS 上,Python 2.7,Paramiko 2.4.2
我做错了什么?
对于OpenSSH 7.8以上,你必须要欺骗它。 运行 ssh-keygen -p [-f file] -m pem
据称更改密码,但重复使用旧密码。如果您想避免提示,请使用 -P oldpw -N newpw
,就像在脚本中一样,但要小心让其他用户看到您的密码。作为副作用,这会以 'old'(与 OpenSSL 兼容,因此与 paramiko 兼容)格式重写密钥文件(如果不是 ed25519)。 (如果要保留新格式文件,请先复制。)
对于旧版本的 OpenSSH,只需要 ssh-keygen -p [-f file]
WITHOUT -o
。
此外,如果您拥有(或获得)它,则从 0.69 开始的 PuTTY 套件中的 puttygen 实用程序支持此格式。在 Unix 版本中,只需执行 puttygen newfmtfile -O private-openssh -o oldfmtfile
(ed25519 除外)。在 Windows 版本 AFAICT 中,您必须使用 GUI;加载新的 fmt 文件并执行转换/导出 OpenSSH 密钥。