7

我有以下代码:

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 上

我究竟做错了什么?

4

1 回答 1

5

对于 OpenSSH 7.8 以上,你必须欺骗它。运行ssh-keygen -p [-f file] -m pem据称更改密码,但重用旧密码。-P oldpw -N newpw如果您想避免提示(如在脚本中),请使用此选项,但请注意不要让您的密码对其他用户可见。作为副作用,这会以“旧”(与 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;加载 newfmtfile 并执行 Conversions/Export OpenSSH key 。

于 2019-04-09T04:26:08.617 回答