ssh-keygen生成的SSH密钥无法被Paramiko识别:“不是有效的RSA私钥文件”

7

I have the following code:

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)

但是我遇到了以下错误:

不是有效的RSA私钥文件

我的系统是MacOS,使用Python 2.7和Paramiko 2.4.2。

我做错了什么?


请使用最新版本的Paramiko,参见Paramiko:“不是有效的RSA私钥文件” - Martin Prikryl
1个回答

5
对于OpenSSH 7.8及以上版本,你需要使用以下方式来操作:运行 ssh-keygen -p [-f file] -m pem 命令看起来像是要更改密码,但实际上需要重用旧密码。 如果想要避免提示框(例如在脚本中使用),可以使用 -P oldpw -N newpw 参数,但要小心不要让其他用户看到你的密码。 这个操作会将密钥文件(除了ed25519类型)以“旧”(OpenSSL兼容参数)格式重新编写。(如果想保留新格式文件,请先复制一份。)
对于旧版本的OpenSSH,只需执行 ssh-keygen -p [-f file] 命令而无需加上 -o 参数。
此外,如果你有(或者下载)PuTTY套件中的puttygen工具,0.69及以上版本支持pem格式。在Unix版本中,只需执行以下命令:puttygen newfmtfile -O private-openssh -o oldfmtfile (同样不适用于ed25519类型)。对于Windows版本,需要使用GUI界面;加载newfmtfile文件后执行Conversions / Export OpenSSH key 操作即可。

ssh-keygen 的 man 页面甚至建议使用 -p 进行转换。 - Martin Prikryl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接