如何在远程服务器上通过 GnuPG 使用 YubiKey?

信息安全 SSH pgp gnupg 服务器 优比键
2021-09-07 05:11:38

我想知道是否可以使用 Yubikey 来解锁例如服务器上的 GnuPG 密钥,那么我可以通过 SSH 以某种简单的方式将生成的令牌从 YubiKey 传递到服务器吗?

2个回答

GnuPG 不使用 Yubikey 生成的任何令牌,但棒实现了 OpenPGP 智能卡协议。密钥存储在 YubiKey 上,它执行所有公钥/私钥加密操作。特殊保护是基于密钥永远无法离开 YubiKey 的事实,因此攻击者最多可以使用密钥(暂时,只要他可以访问解锁的棒),但不能完全掌握它.

GnuPG 有一个称为代理转发的功能它主要归结为配置gpg-agent以提供仅用于特定操作的特殊的额外套接字:

extra-socket /home/<user>/.gnupg/S.gpg-agent.extra

然后,配置 SSH 以将套接字上的所有通信转发到远程服务器:

RemoteForward /home/<user>/.gnupg/S.gpg-agent /home/<user>/.gnupg/S.gpg-agent.extra

上面链接的 wiki 页面中提供了更多解释,包括一些关于 nitpicks 的提示。

在新版本的 GnuPG 或 Linux 发行版中,套接字的路径可以改变。这些可以通过

$ gpgconf --list-dirs agent-extra-socket

$ gpgconf --list-dirs agent-socket

然后将这些路径添加到您的 SSH 配置中:

Host remote
  RemoteForward <remote socket> <local socket>

复制公钥的快速解决方案:

scp .gnupg/pubring.kbx remote:~/.gnupg/

在远程机器上,激活 GPG 代理:

echo use-agent >> ~/.gnupg/gpg.conf

在远程机器上,同样修改 SSH 服务器配置并添加这个参数(/etc/ssh/sshd_config):

StreamLocalBindUnlink yes

重新启动 SSH 服务器,重新连接到远程机器 - 然后它应该可以工作了。

可以在 Matthias Lohr 的博客文章中找到更详细的教程,包括一些故障排除。