在新的EC2实例上设置主机指纹

TL; DR

我可以告诉AWS EC2从AMI启动一个实例,但是保留主机密钥 – 保存在AMI中的/etc/ssh中的密钥 – 而不是生成新密钥并覆盖保存在AMI中的密钥。

完整的问题:

在AWS上,我设置了一个EC2实例作为SFTP主机。 自动化系统(由客户pipe理)将定期将文件传送到那里。 这些系统将通过客户提供的公钥进行authentication。

在EC2实例前面将会有一个弹性IP。 这个IP需要永远保持不变,因为连接到我们的自动化系统依赖于这个恒定性。

在幕后,我想保留在任何时候使用不同的交换EC2实例的能力,并将现有的IP地址与新的服务器重新关联。 (这样做的一些原因是为了启动一个更强大的实例,或者将其他各种服务器整合到一个实例中)。

这种重新关联需要对提供文件的自动化系统是透明的。 但是,我希望自动化系统在我进行这样的切换时会吓坏了,因为它会检测到主机的指纹已经改变。 也许通常这是一件好事,但我相信在这种情况下,因为一个主机应该取代另一个主机,保持身份是适当的。

所以,每当我按照描述交换实例时,我需要将原始主机的公钥复制到新主机中。 实际上,我预计这会自动发生 – 如果我使用相同的AMI来启动这两个主机,但看起来EC2故意将新的公共密钥分配给新的实例,覆盖与AMI保存的任何密钥。

我的问题是什么是达到预期行为的最简单的方法。 我知道如何手动完成,将旧服务器上的密钥复制到新服务器上,并覆盖分配给新服务器的密钥。 但是,我不知道EC2是否有自动或惯用的方式来做到这一点。

我build议把系统实例留给pipe理职责,而不是创build一个运行你的共享密钥的SSHd的第二个实例。

将共享的一组SSH密钥复制到您的AMI映像,并将它们保存到不同名称的文件(例如/ etc / ssh / shared_host_rsa_key)。

接下来,制作SSH服务器configuration(/ etc / ssh / sshd_config – > / etc / ssh / sshd_shared_config)的副本,修改上述configuration以侦听新端口(例如2222)并使用共享主机密钥。

configuration你的第二个sshd实例在启动时启动,告诉你的客户,从现在开始,他们需要连接到端口2222。

你甚至可以进一步强化第二个sshdconfiguration,而不是使用通用系统pipe理。