ssh-keygen 没有创建 RSA 私钥

ssh-keygen 没有创建 RSA 私钥

我正在尝试创建一个私钥,但遇到了问题。

当我使用时,我得到了以下格式的私钥。ssh-keygen -t rsa -b 4096 -C "[email protected]"

-----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

答案1

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

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

或者

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

似乎在 mojave 中的当前 ssh-keygen 版本中,默认导出格式RFC4716如上所述这里

答案2

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

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

无需降级到旧版 OpenSSH 即可实现此结果。

答案3

对上述答案进行一些详细说明,为公钥和私钥提供清晰的路径。

您可以直接将您的 ssh 密钥导出(-e)为 pem 格式:

对于你的公钥:

cd ~/.ssh
ssh-keygen -e -m PEM -f 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 后,该文件现在是明文,这不好

相关内容