在远程服务器上生成 SSH 和 GnuPG 密钥。密钥管理最佳实践

在远程服务器上生成 SSH 和 GnuPG 密钥。密钥管理最佳实践

我询问的是与密钥生成、使用和管理相关的最佳实践。

有几次,由于各种原因,我在工作时通过 SSH 登录到远程多用户服务器(以及从家里登录到我办公室的台式机)时创建了 SSH 和 GnuPG 密钥。

当我输入新生成的密钥的密码时,我突然意识到我无法控制我登录的机器,也无法控制中间的链接。我有点信任工作中的系统管理员,SSH 也很安全,但尽管如此……通过这样的链接发送我的新密码感觉很奇怪。

您觉得如何?在本地生成密钥(SSH、GnuPG 或其他)然后通过 SSH 传输私钥是否更明智,还是我只是对整个事情过于偏执?

另外,如果我的疑虑至少是有点正确的,你觉得应该把私钥存放在哪里呢?它们都应该放在一个物理位置吗?我应该大量使用gpg-agentand ssh-agentalways 吗?

我在两台独立的机器上工作,使用 SSH 登录到几个独立的多用户服务器来工作。我从大约四个位置(本地和远程)使用 GnuPG 签署 Git 提交。

我正在混合使用 Mac OS X(带有 MacPorts)和 Linux 机器(带有 Pkgsrc)进行工作,但始终在命令行上。

答案1

您觉得如何?在本地生成密钥(SSH、GnuPG 或其他)然后通过 SSH 传输私钥是否更明智,还是我只是对整个事情过于偏执?

这实际上没有什么区别,至少如果系统管理员没有篡改软件堆栈(但他们为什么要这么做,反正他们已经拿到了私钥?)。

只要私钥在远程机器上,就有没有不同它是如何到达那里的。系统管理员可以访问它。密码短语也只会增加获取密钥的额外努力,因为他们也可以访问您的输入。

另外,如果我的疑虑至少是有点正确的,你觉得应该把私钥存放在哪里呢?它们都应该放在一个物理位置吗?我是否应该一直大量使用 gpg-agent 和 ssh-agent?

这取决于您的要求、偏执程度、对系统管理员的信任以及最终密钥的使用。

如果你需要私人SSH用于访问某些服务(比如 GitHub)的机器上的密钥,只需生成一个仅在这台机器上使用的新密钥,并且仅用于在所需的服务/机器上进行身份验证。

关于开放PGP/GnuPG,事情取决于您的要求。您似乎想要对软件进行签名,我感觉您的公司也遇到过这种情况。如果密钥直接与公司相关联并且仅为此目的而创建,我认为他们不会反对不将密钥放在他们的机器上。

如果您出于任何原因需要使用自己的密钥,请创建一个子密钥,您至少可以限制子密钥的签名,并随时轻松撤销。无论如何,使用子密钥是一种很好的做法!许多 OpenPGP 高级用户实际上将他们的私有主密钥存储在离线状态,并且实际上仅将其用于密钥管理。

转发gpg-agent套接字似乎是完全可行的,当然也会减少系统管理员对密钥的访问权限(他们不再拥有完整密钥的访问权限,但只能使用它,至少从 GnuPG 2.1 开始,它删除了全部私钥操作交给代理)。

相关内容