一年多前,我使用 GnuPG 生成了一个 PGP 密钥。因为从那以后我就没有真正接触过它,所以我对 GPG 的来龙去脉非常模糊(尽管我原则上理解非对称密钥加密)。我一直使用这个密钥来验证 SSH 登录,直到昨天不小心删除了它。所以,今天,我开始再次生成它。
我运行gpg --export-secret-key -a "Ryan Lue" > ~/.ssh/id_rsa
,它提示我输入密码。我输入密码,然后id_rsa
文件就出来了。现在,当我尝试通过 SSH 连接到我的服务器时,它会抛出以下警告:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
于是,我就乖乖的chmod 600 ~/.ssh/id_rsa
。然后,我再试一次,它会提示输入密码(实际上,因为我使用的是 Mac,钥匙串会提示我输入密码)。我输入与导出它相同的密码,每次都会失败,并在命令行上输出以下错误:
Saving password to keychain failed
我还尝试使用 添加密钥ssh-agent
,这实际上会提示我在命令行上输入密码:
Enter passphrase for /Users/rlue/.ssh/id_rsa:
无论哪种方式,它都会拒绝密码。我 100% 确定我在这些提示下输入的密码与导出它时输入的密码相同:我已成功导出密钥大约十几次,但在使用过程中未能对其进行身份验证大约有四十几次。
我缺少什么?
答案1
OpenPGP(由 GnuPG 实现)和 SSH 不共享通用密钥格式,尽管它们依赖于相同的加密原理。
不过, GnuPG 实现了该ssh-agent
协议,因此您仍然可以通过 GnuPG 使用 OpenPGP 密钥通过 SSH 连接到其他计算机。
ssh-agent
通过添加enable-ssh-support
来启用协议~/.gnupg/gpg-agent.conf
export SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.ssh
;你可能想在你的~/.profile
ssh-agent
如果已启动则终止并重新加载gpg-agent
(gpg-connect-agent reloadagent /bye
)- 导出并将您的公钥添加到目标服务器(
ssh-add -L
现在应该包含您熟悉的 OpenPGP 密钥的 SSH 公钥行) ssh
像使用普通 SSH 密钥一样到目标服务器
这也适用于 OpenPGP 智能卡或 USB 加密狗,我用它来通过 YubiKey 保护我的 SSH 密钥。
答案2
1)我没有看到任何选项gpg
叫--export-secret-key
.
2) 密钥的格式可能与ssh
.您很可能需要将其转换为 OpenSSH 可以理解的格式。使用密钥格式的信息更新问题。