我正在尝试创建一个私钥,但遇到了问题。
当我使用时,我得到了以下格式的私钥。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 后,该文件现在是明文,这不好。