Paramiko无法识别ssh-keygen生成的SSH密钥

Tho*_*mas 7 python ssh paramiko ssh-keys ssh-keygen

我有以下代码:

ssh_key = paramiko.RSAKey.from_private_key_file(key_filename)
Run Code Online (Sandbox Code Playgroud)

键看起来像这样:

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

并且有效:

 $ ssh-keygen -l -f <mykeyfile>
 $ 2048 SHA256:x8jlUAObU3q2KXRtuGpxwhnGvB/ZoeD2IUqSA1OkCmI thomas@Thomas-MBP-2017 (RSA)
Run Code Online (Sandbox Code Playgroud)

但我得到"不是一个有效的RSA私钥文件"错误.
这是在MacOS,Python 2.7,Paramiko 2.4.2上

我究竟做错了什么?

dav*_*085 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

另外,如果您拥有(或获得)它,则PuTTY套件中的puttygen实用程序从0.69开始支持该格式。在Unix版本中,只需这样做puttygen newfmtfile -O private-openssh -o oldfmtfile(同样,ed25519除外)。在Windows版本AFAICT中,您必须使用GUI。加载newfmtfile并执行Conversions / Export OpenSSH密钥。