当我使用
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都创建了正确的格式,但我遇到问题的格式除外。
#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后,该文件现在为明文,这很不好。
评论
而其他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可以使用。