我有一个Yubikey扮演一个GPG智能卡。SSH配置为使用智能卡套接字进行身份验证,使用带有身份验证功能的GPG密钥进行身份验证工作良好。
ssh-add -l
2048 SHA256:ey5VPl70RKvXSdaon6ugxiO1ZrzqxJwz7VWZM7zvN/c cardno:000607329647 (RSA)我有一些额外的SSH密钥,用于对各种服务器的SSH身份验证。我可以使用ssh-add somekey将它们添加到ssh代理中,但随后需要提供每个密钥的密码。有没有办法用智能卡来保护这些钥匙呢?
所需的结束状态是将多个SSH密钥存储在磁盘上,并使用智能卡和gpg-agent来解锁和缓存它们。
发布于 2019-01-20 18:28:11
我今天早上想出的最简单的解决方案是使用密钥加密密钥原则来执行。在云中的服务器上使用多个SSH密钥时,这种情况相当常见。您可以使用基于云的HSM加密/解密您需要使用的密钥,而不必将其存储在本地。这是当您的加密密钥留在磁盘上时,攻击者无法访问主密钥。
要在您的环境中实现这一点,您需要以下内容:
为了本文的目的,我将假设读者已经配置了他们的Yubikey。如果您没有这样做(我知道OP有),您可以使用以下说明向gpg注册您的密钥:
https://support.yubico.com/support/solutions/articles/15000006420-using-your-yubikey-with-openpgp
您要做的第一件事是确定要执行本地加密和解密的密钥。试着跑:
gpg --list-keys这将输出几行。我们需要与yubikey关联的键的PUB行的内容:
pub 2048R/E48EFBC7 2019-01-20具体来说,我们需要8个字符"E48EFBC7“。一旦我们有了这些字符,我们就可以将它们复制到我们的配置文件中,以确保默认使用yubikey。为此,更新gpg.conf文件中的以下行(~/..gnupg/gpg.conf):
default-key E48EFBC7默认情况下,这一行将被注释掉,您将需要取消注释它。作为一个附带说明,这不是必需的,但它是有帮助的。在默认情况下,您可以使应用程序利用您的Yubikey,而不是试图指定用于加密的密钥。
下一个配置将更改收件人。同样,这是可选的,但绝对有帮助。在gpg.conf文件中向下滚动并取消注释以下行:
default-recipient-self现在,您的gpg代理被设置为自动使用yubikey进行加密/解密,并使目标收件人成为您的加密密钥。
这样,您现在就可以开始加密和解密证书了。要加密,只需运行以下命令:
gpg -o <output.gpg> -e <ssh.key>解密;
gpg -o <ssh.key> -d <output.gpg>解密将要求您的Yubikey PIN。
一些更精细的注释:
https://security.stackexchange.com/questions/201832
复制相似问题