当前位置: 首页 > 面试题库 >

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

应涵容
2023-03-14
问题内容

我有以下代码:

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上

我究竟做错了什么?


问题答案:

对于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密钥。



 类似资料:
  • 我使用命令“ssh-keygen-t rsa”创建了一个没有密码的公钥,我打算将其用于github,但我错误地发送了公钥和私钥...... 这到底意味着什么?

  • 我用PHP OpenSSL生成了一个SSH密钥: 这导致$pem如下所示: 但是我无法使用此密钥进行身份验证。在使用它之前,我必须使用以下命令转换它: 转换的结果如下: 两者都是PEM格式,但第二个是RSA私钥。使用第二个,PHP可以登录。所以我需要一个以开头的密钥,而不仅仅是。如何使用PHP和OpenSSL PHP实现创建它?

  • 我正在尝试使用openssl生成一个安全的私钥和公钥,以便与我的云托管提供商一起使用,但当我这样做时,openssl的公钥输出未被识别。 生成RSA私钥后,2048位长模,然后 它编写了RSA公钥。输出如下所示: 这是标准格式,它非常适合其他用途,但所有云和托管服务提供商都需要这样的公钥: 这是他们识别的唯一有效格式。 我知道ssh-keygen可以轻松完成所有这些,但我正在使用当前最新的open

  • 我在将包含RSA公钥的字符串转换为java.security公钥类型时遇到了麻烦,该RSA公钥是我在cygwin中使用SSh-keygen生成的。 那么,我假设我的问题是两个密钥之间有什么区别,以及我如何才能成功地将第一个转换为可用的PublicKey对象?

  • 问题内容: 我正在尝试使用Paramiko嵌套SSH,在那儿我将从本地计算机连接到Server X,然后从那里连接到ServerY。在这里使用用户名,密码身份验证连接到Server XI,并使用用户名和密码连接到Server Y RSA密钥。事实是,RSA密钥托管在用于连接服务器Y的系统X中。如果我将密钥文件托管在本地PC中,并将本地PC目录路径提供给Paramiko SSH客户端,则能够成功运行

  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id