在云中pipe理主机密钥

我是Ansible和Terraform的忠实粉丝,因为我可以将虚拟机上下左右放置。 然而,正如我在工作,我不断要求确认,我信任我的清单的主机密钥中的一些新创build的主机。

我可以closures主机密钥检查,但是如果我把它留下来,可能会更好,这样我就可以知道库存中的旧主机没有被篡改。 (就好像我甚至可以识别它们,或者记住它们已经configuration了虚拟机)。

主持人的钥匙可以在这个令人毛骨悚然的云端世界中有用吗? 或者我只是一个相信好老式身份计划的浪漫主义者? 云世界有更好的scheme吗?

我们有一个解决scheme,在这个工作中,我们使用已知CA签名的SSH主机证书来摆脱这个问题。 如果您对ssh证书不熟悉,您可以在ssh-keygen手册中阅读它,同时还有许多不错的指南:

云部分

为了使ssh主机密钥唯一并在主机上生成,我们使用存储在我们使用的映像中的私有主机CA密钥。 当映像第一次启动时,sshd生成新的密钥,然后我们有一个“firstboot”脚本,基本上这样做:

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

然后你所要做的就是相信这个单一的CA密钥,把它添加到个人或全局的known_hosts文件中。 您现在可以login到没有自动信任的机器。

这可能会带来一些安全问题,因为CA在第一次启动时在映像中可用,但对我们来说很有用,因为我们对基础架构拥有非常好的控制权,并且我们认为一旦证书生成就可以将其删除。

可能的替代解决scheme使用SSHFP

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