我有以下代码:
ssh_key = paramiko.RSAKey.from_private_key_file(key_filename)
key 如下所示:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAQEAqdgmJ2AQlmvpCsDWjbpIvIrx4AwtKn2t10wmGZIN9pqcJgQpo3HD
并且有效:
$ ssh-keygen -l -f <mykeyfile>
$ 2048 SHA256:x8jlUAObU3q2KXRtuGpxwhnGvB/ZoeD2IUqSA1OkCmI thomas@Thomas-MBP-2017 (RSA)
但出现以下错误:
这是在MacOS,Python 2.7,Paramiko 2.4.2上
我究竟做错了什么?
最佳答案
对于OpenSSH 7.8或更高版本,您必须欺骗它。运行ssh-keygen -p [-f file] -m pem
据说可以更改密码,但是可以重用旧密码。如果要避免出现提示(如在脚本中一样),请使用-P oldpw -N newpw
,但请注意不要让其他用户看到您的密码。作为副作用,这将以“旧”(兼容OpenSSL并因此兼容paramiko)的格式重写 key 文件(如果不是ed25519)。 (如果要保留新格式的文件,请先复制。)
对于旧版本的OpenSSH,只需执行ssh-keygen -p [-f file]
而无需-o
即可。
另外,如果您拥有(或获得)它,则PuTTY套件中的puttygen实用程序从0.69开始支持该格式。在Unix版本中,只需执行puttygen newfmtfile -O private-openssh -o oldfmtfile
(同样,ed25519除外)。在Windows版本AFAICT中,您必须使用GUI。加载newfmtfile并执行Conversions/Export OpenSSH key 。
关于python - ssh-keygen生成的SSH key 无法被Paramiko : “not a valid RSA private key file” 识别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53600581/