无法通过 SSH 使用从 GnuPG 导出的 OpenPGP 密钥

无法通过 SSH 使用从 GnuPG 导出的 OpenPGP 密钥

一年多前,我使用 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 连接到其他计算机。

  1. ssh-agent通过添加enable-ssh-support来启用协议~/.gnupg/gpg-agent.conf
  2. export SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.ssh;你可能想在你的~/.profile
  3. ssh-agent如果已启动则终止并重新加载gpg-agent ( gpg-connect-agent reloadagent /bye)
  4. 导出并将您的公钥添加到目标服务器(ssh-add -L现在应该包含您熟悉的 OpenPGP 密钥的 SSH 公钥行)
  5. ssh像使用普通 SSH 密钥一样到目标服务器

这也适用于 OpenPGP 智能卡或 USB 加密狗,我用它来通过 YubiKey 保护我的 SSH 密钥。

答案2

1)我没有看到任何选项gpg--export-secret-key.

2) 密钥的格式可能与ssh.您很可能需要将其转换为 OpenSSH 可以理解的格式。使用密钥格式的信息更新问题。

相关内容