如何管理多个SSH密钥

如何管理多个SSH密钥

将安全备份需求降低到单个密钥文件。

一旦使用两个或三个以上的SSH密钥,管理它们就会变得更加复杂。在本文中,我将解释如何使用控制文件管理多个SSH密钥,以及如何进行更改以将其作为GPG身份验证子项进行管理。我还将展示如何识别GPG身份验证密钥,以防它们随着时间的推移而累积并且你没有记录笔记。

为什么有多个SSH密钥?

考虑像物理钥匙一样的SSH密钥,将看到拥有多个密钥的原因。你不希望你的车和你的房子用同一把钥匙。如果你的钥匙被盗,小偷可以使用所有东西。就像你的汽车和房子一样,你可能想要为每个项目用例分别设置密钥,就像生活中一样。

当你为客户工作时,拥有多个密钥也很有用。有些客户可能会给你一个特定的密钥,而其他客户可能会要求你在项目结束时交出所有帐户,密码和密钥。

SSH如何管理多个密钥?

一旦你有多个SSH密钥,就会发现你需要在你的〜/.ssh/config中添加IdentifyFile行来获得SSH,以便为正确的服务器提供正确的密钥。这是因为大多数服务器仅在几次SSH密钥尝试后才会断开连接。我有七个密钥,所以我绝对需要这个。

例如,此条目指定当我在Fedora项目中使用计算机时,我的用户名是“bex”,我希望使用我的Fedora SSH密钥。引用的文件是私钥文件。

Host *.fedoraproject.org User bex IdentityFile ~/.ssh/fedora_id_rsa

如果没有IdentifyFile关键字,SSH将只是连续尝试每个密钥。

教SSH以管理多个GPG身份验证密钥

使用GPG验证SSH时,你不再拥有私钥文件。因此,上面的配置将不再起作用。为了使其工作,你必须做一些不同的事情来识别应该使用的密钥。值得庆幸的是,SSH提供了一种解决方法:你可以在IdentifyFile行上引用公钥。

只需修改〜/.ssh/config即可引用正确的公钥。通常,这就像在每个IdentifyFile行的末尾添加pub一样简单。不要忘记确保将公钥文件设置为仅用户可读。

这意味着你需要拥有可用于身份验证密钥的公钥文件。如果你没有保存它们(或之前有它们),你可以从ssh-add -L命令获取指纹。

标识特定的身份验证子项

一旦创建了多个身份验证子密钥,就希望能够识别它们,以便你可以将正确的公钥提供给正确的服务器并生成正确的IdentifyFile条目。不幸的是,GPG不支持子键的注释或名称。因此,你只能从gpg2命令获取关键哈希和夹点的列表,以及来自ssh -add的一组无与伦比的私有和公共指纹。

有两种方法可以识别你的密钥。你可以从SSH公钥指纹开始查找GPG keygrip,也可以从GPG子项哈希开始查找SSH公钥指纹。

SSH公钥指纹到GPG keygrip

首先找到要识别的公钥指纹。可以通过运行ssh -add -L来完成此操作。此示例适用于第一个指纹。将公钥指纹保存到文件,下一步需要这样做。

$ ssh-add -L | head -1 > key

现在需要SSH指纹的MD5格式,可以从ssh-keygen获取该格式。

$ ssh-keygen -l -E md5 -f key2048 MD5:9e:98:82:87:5d:a4:fe:e3:8a:9c:db:aa:59:5b:30:ac (none) (RSA)

将MD5 SSH指纹与密钥匹配,如gpg -agent的keyinfo命令所示。

$ gpg-connect-agent ‘KEYINFO –list –ssh-fpr’ /bye | fgrep9e:98:82:87:5d:a4:fe:e3:8a:9c:db:aa:59:5b:30:acS KEYINFO 9EEA76057C168686EAE8B807845326D7F60FB1C4 D – – – PMD5:9e:98:82:87:5d:a4:fe:e3:8a:9c:db:aa:59:5b:30:ac – –

这将返回多个数据字段。重要的是第三个元素,即GPG keygrip。从这里,使用gpg2 -K –with-keygrip很容易识别你的特定身份验证子项。

GPG子键哈希到SSH公钥指纹

首先找到要识别的键的子键哈希。可以通过运行gpg2 -K –with-subkey-fingerprint来完成此操作。

$ gpg2 -K –with-subkey-fingerprintssb rsa2048 2019-03-16 [A] 941BE28372F6759AB7073766E0A70B46BA68E808

将其转换为公钥指纹非常简单; 再次使用gpg2。

$ gpg2 –export-ssh-key 941BE28372F6759AB7073766E0A70B46BA68E808ssh-rsa AAAAB3NzaC1yc…MQJ3FK3 openpgp:0xBA68E808

你会注意到此输出中有一个注释openpgp:0xBA68E808。在所有情况下都不能保证这一点,因为它取决于使用GPG的确切方式。如果你的输出包含它,则可以轻松识别GPG密钥和SSH指纹关系;但是你不应该依赖它总是可用的。

我鼓励你考虑记录.gnupg /sshcontrol文件中的关系或公钥文件中的注释。

结束

现在,你已准备好使用经过GPG身份验证的SSH会话访问世界上的每个服务器。你可以管理多个密钥,并在需要时识别它们。你已将安全备份需求减少到单个密钥文件,可以使用该文件来解锁或解密其他所有文件。

原文链接:

https://opensource.com/article/19/4/gpg-subkeys-ssh-manage