在云世界中管理主机密钥

在云世界中管理主机密钥

我非常喜欢 Ansible 和 Terraform,因为我可以上下移动虚拟机,也可以将它们放在左右两侧。然而,在工作过程中,我不断被要求确认我是否信任清单主机密钥中某个新建的主机。

我可以关闭主机密钥检查,但最好还是将其打开,这样我就能知道库存中的旧主机没有被篡改。(好像我甚至能识别它们或记得它们是已经配置好的虚拟机)。

在这个喧嚣的云世界中,主机密钥有用吗?还是我只是一个相信老式身份方案的浪漫主义者?云世界中还有更好的方案吗?

答案1

我们在工作中有一个解决方案,即使用由已知 CA 签名的 SSH 主机证书来解决这个问题。如果您不熟悉 ssh 证书,您可以在 ssh-keygen 手册中阅读相关内容,此外还有很多不错的指南:

云部分

为了使 ssh 主机密钥在主机上唯一且生成,我们将私有主机 CA 密钥存储在所使用的映像中。当映像首次启动时,sshd 会生成新密钥,然后我们有一个“firstboot”脚本,它基本上执行以下操作:

  1. 使用 SSH CA 私钥对主机密钥进行签名
  2. 删除 SSH CA 私钥
  3. 重新启动 sshd。

然后,您所要做的就是信任这个 CA 密钥,方法是将其添加到您的个人或全局 known_hosts 文件中。现在,您无需信任它,即可登录到计算机。

这可能会给您带来一些安全问题,因为 CA 在首次启动时在映像内部可用,但它对我们来说是有效的,因为我们对基础设施有很好的控制,并且我们认为在生成证书后将其删除就足够了。

使用 SSHFP 的可能替代解决方案

我想到的另一种解决方案是使用 SSHFP 记录。如果您有 DNSSEC 签名区域,您可以让虚拟机通过某种方法将其密钥报告给您的 DNS 服务器,然后使用 SSHFP 记录类型在 DNS 中发布其密钥。如果区域已签名,OpenSSH 客户端将信任这些记录。我对此写了一个简短的指南:

相关内容