我正在尝试创建私钥并遇到问题。

当我使用ssh-keygen -t rsa -b 4096 -C "your_email@example.com"时,我得到了以下格式的私钥。

-----BEGIN OPENSSH PRIVATE KEY-----
uTo43HGophPo5awKC8hoOz4KseENpgHDLxe5UX+amx8YrWvZCvsYRh4/wnwxijYx
...
-----END OPENSSH PRIVATE KEY-----


我要使用的应用程序不接受此操作。

我期望使用以下RSA格式的密钥。

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,25737CC2C70BFABADB1B4598BD8AB9E9

uTo43HGophPo5awKC8hoOz4KseENpgHDLxe5UX+amx8YrWvZCvsYRh4/wnwxijYx
...
-----END RSA PRIVATE KEY-----


如何创建正确的格式?这很奇怪,因为我遇到的所有其他Mac都创建了正确的格式,但我遇到问题的格式除外。

评论

而其他Mac不在Mojave上吗?我也在Mojave上,并获得“新的” openssh密钥格式。因此,我认为其他Mac的版本较低。检查使用的OpenSSL版本。

@Zina其他Mac也在Mojave上,并且具有相同的OpenSSL版本。

RSA应该是默认类型。如果您完全省略-t rsa选项怎么办?

@guzzijason一样。那就是让我发疯的原因。即使我在Mac上省略了-t rsa(工作正常),它也会正确生成RSA。

我遇到了同样的问题。解决方法是,我使用旧版本的openssh生成密钥。您可以使用openssl rsa -text -in key_file -pass'pass:passphrase'测试生成的密钥是否正确。版本7.4p1-16可以使用。

#1 楼

我最近也遇到了同样的问题(升级到mojave 10.14.1之后),这里有2个可能的解决方案。


降级ssh-keygen二进制文件(可以轻松获取旧版本)来自任何linux / docker映像)

OR


在您的ssh-keygen命令中添加选项-m PEM。例如,您可以运行ssh-keygen -m PEM -t rsa -b 4096 -C "your_email@example.com"强制ssh-keygen以PEM格式导出。

在当前的ssh-keygen版本中,mojave中的默认导出格式为RFC4716,如此处所述

评论


默认的导出公钥格式确实是rfc4716,但是Q中的格式是内部私钥格式,并且是OpenSSH的“新”格式,该格式在1999(!)中不存在,并且在当前不再描述尝试6.0到6.3。

–dave_thompson_085
18年11月28日在9:25

我无法编辑答案,但请注意,1.和2.是独立的解决方案,不是顺序步骤。您无需为一次性密钥生成而降级。只需添加-m PEM

–sdoxsee
19年1月23日在15:55

添加-m PEM解决了JWT签名遇到的一个非常令人沮丧的问题。谢谢!!

– Keshav Saharia
20/12/31在16:48



#2 楼

可以使用ssh-keygen实用程序将具有OpenSSH私钥格式的新密钥转换为旧的PEM格式。此结果。

评论


是。就像我已经在接受答案的评论中提到的那样。 serverfault.com/questions/939909/…

–sdoxsee
19年1月25日在15:01

接受的答案中尚不清楚的是您不需要创建新的密钥对。您可以使用现有密钥并使用该命令将其转换。它会覆盖该文件,因此,以防万一,我认为备份之前是个好主意。

–martintama
19-2-22在11:15



感谢您添加有关如何将现有私钥转换为RSA格式的说明。刚刚保存了我的培根!

– Craig Blaszczyk
19年8月7日,9:50

它不会改变我的内容,

–异想天开
20年5月12日在17:09



#3 楼

对以上答案的详细说明可以为公钥和私钥提供清晰的路径。
您可以将ssh密钥直接导出(-e)为pem格式:
对于公钥:
cd ~/.ssh
ssh-keygen -e -m PEM id_rsa > id_rsa.pub.pem

对于私钥:
事情有点麻烦,因为ssh-keygen仅允许“就地”更改私钥文件。 (即用新文件替换您的密钥文件)。
因此您可以保留旧文件:
鉴于我们只是导出文件,因此<new pass phrase>可以与<old pass phrase>相同(除非您要更改)
cd ~/.ssh
cp id_rsa id_rsa.bak
ssh-keygen -p -P "<old pass phrase>" -N "<new pass phrase>" -m PEM -f id_rsa 
cp id_rsa id_rsa.priv.pem
cp id_rsa.bak id_rsa

注意:在cli上传递您的口令是一个坏主意。
安全的方法是:
cd ~/.ssh
cp id_rsa id_rsa.bak
ssh-keygen -p  -m PEM -f id_rsa 
cp id_rsa id_rsa.priv.pem
cp id_rsa.bak id_rsa

使用此方法,系统会提示您输入新旧密码。
注意:将私钥文件转换为.pem后,该文件现在为明文,这很不好。