ssh-keygen不创建RSA私钥


70

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

使用时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 OS Mojave上


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

@Zina其他Mac也使用Mojave,并且具有相同的OpenSSL版本。
月亮

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

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

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

Answers:


73

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

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

要么

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

这似乎是在莫哈韦当前SSH-凯基版本,默认的输出格式是RFC4716提到这里


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

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

47

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

ssh-keygen -p -m PEM -f ~/.ssh/id_rsa

无需为了获得此结果而降级到较旧的OpenSSH。


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

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

感谢您添加有关如何将现有私钥转换为RSA格式的说明。刚刚保存了我的培根!
Craig Blaszczyk
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.