总结
/etc/ssh
我可以告诉 AWS EC2 从 AMI 启动实例,但保留主机密钥(与 AMI 一起保存的密钥)吗?反而生成新密钥并覆盖使用 AMI 保存的密钥。
完整问题:
在 AWS 上,我正在设置一个 EC2 实例作为 SFTP 主机。一个自动化系统(由客户管理)将定期将文件传送到那里。这些系统将通过客户提供的公钥进行身份验证。
EC2 实例前面会有一个弹性 IP。此 IP 需要“永远”保持不变,因为连接到我们的自动化系统依赖于该恒定性。
在幕后,我希望保留随时将此 EC2 实例与其他实例交换的能力,并将现有 IP 地址与新服务器重新关联。(这样做的原因可能是为了启动更强大的实例,或将各种其他服务器整合为一个实例)。
这种重新关联需要对交付文件的自动化系统透明。但是,我预计当我进行这样的切换时,自动化系统会感到恐慌,因为它会检测到主机的指纹已更改。也许通常这是一件好事,但我认为在这种情况下,由于一台主机应该替换另一台主机,因此保留身份是合适的。
因此,每当我按照说明交换实例时,我都需要将原始主机的公钥复制到新主机中。实际上,我一半期望这会自动发生 — 如果我使用相同的 AMI 启动两个主机,但看起来 EC2 故意将新公钥分配给新实例,覆盖使用 AMI 保存的所有密钥。
我的问题是,实现所需行为的最简单方法是什么。我知道如何手动执行此操作,方法是将密钥从旧服务器复制到新服务器并覆盖分配给新服务器的密钥。但我想知道 EC2 是否有一种自动或惯用的方法来执行此操作。
答案1
我建议将系统实例保留原样以执行管理任务,并创建使用共享密钥运行的第二个 SSHd 实例。
将您的共享 SSH 密钥集复制到您的 AMI 映像并将其保存到不同命名的文件中(例如 /etc/ssh/shared_host_rsa_key)。
接下来,复制 SSH 服务器配置(/etc/ssh/sshd_config -> /etc/ssh/sshd_shared_config),修改该配置以监听新端口(例如 2222)并使用共享主机密钥。
将您的第二个 sshd 实例配置为在启动时启动,并告诉您的客户从现在开始,他们需要连接到端口 2222。
您甚至可以更进一步强化第二个 sshd 配置,使其比用于通用系统管理的配置更加强大。