python - Paramiko 无法识别由 ssh-keygen 生成的 SSH key : "not a valid RSA private key file"

标签 python ssh paramiko ssh-keys ssh-keygen

我有以下代码:

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)

但我收到以下错误:

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,就像在脚本中一样,但要小心让其他用户看到你的密码。作为副作用,这会以“旧”(与 OpenSSL 兼容,因此与 paramiko 兼容)格式重写 key 文件(如果不是 ed25519)。 (如果要保留新格式文件,请先复制。)

对于旧版本的 OpenSSH 只需执行 ssh-keygen -p [-f file] 而不使用 -o

此外,如果您拥有(或获得)它,则从 0.69 开始的 PuTTY 套件中的 puttygen 实用程序支持此格式。在 Unix 版本中,只需执行 puttygen newfmtfile -O private-openssh -o oldfmtfile(ed25519 除外)。在 Windows 版本 AFAICT 中,您必须使用 GUI;加载新的 fmt 文件并执行转换/导出 OpenSSH key 。

关于python - Paramiko 无法识别由 ssh-keygen 生成的 SSH key : "not a valid RSA private key file",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53600581/

相关文章:

python - 为什么随机生成的标签会加速另一个移动标签的速度?

windows - 使用 Net::SSH2 Perl 模块从 HP Switch 检索输出

java - SSH命令无法启动远程java进程

python - 如何使用python在不登录服务器的情况下在服务器中执行迭代命令

python - BeautifulSoup:按风格查找表格

python - 使用 pyplot 中的箭袋函数绘制箭头的对数长度

python - 无法使用python通过cronjob重新启动鱿鱼

python - 使用 Paramiko 在远程机器上执行命令无效

python - python自动关闭SSH和Telnet吗

python - 通过 IP 地址列表执行 SSH 命令(使用 Paramiko)