只是为了摆在眼前,所以我没有被告知不要这样做:
我做了很多重新安装在更改主机密钥的机器上。 这需要在我的机器上进入~/.ssh/known_hosts
,并吹到旧的密钥并添加新的密钥。 这是一个很大的痛苦,所以我开始考虑如何自动化这个。
我不想只是盲目的接受任何主机密钥,所以修补OpenSSH忽略主机密钥就没有了。 我曾经考虑过在ssh
命令周围创build一个包装器,它会检测从ssh
返回的错误,并提示我删除旧密钥或退出。 我还考虑过创build一个守护进程,可以从白名单上的一台机器上获取最新的主机密钥(有大约二十台机器不断重新安装),并replaceknown_hosts
的旧主机密钥。
你将如何自动化这个过程?
取决于重新安装的IP地址/ IP保持不变,我将在〜/ .ssh / config中为特定主机/ IP /模式设置“StrictHostKeyChecking”。
如果这是不可能的,那么看看在主机上自动加载密钥,或许在重新安装过程中。
如果您正在使用像Puppet这样的configurationpipe理系统,那么可以使用它来让客户端计算机与中央服务器签/etc/ssh/ssh_known_hosts
,使主机更新/etc/ssh/ssh_known_hosts
文件。 然后你可以在configuration文件中启用StrictHostKeyChecking
选项。
这正是我们用我们的Puppet主服务器检查的Amazon EC2实例所做的。 我们有puppet服务器作为堡垒跳转到我们的EC2实例,是唯一的机器允许SSH进入他们。 然后,我们使用主机密钥和/etc/hosts
文件更新/etc/ssh/ssh_known_hosts
文件,以更新EC2的公共DNS IP地址。
你需要ssh-keyscan
,它是用openssh发布的。 从手册页 :
ssh-keyscan is a utility for gathering the public ssh host keys of a num‐ ber of hosts. It was designed to aid in building and verifying ssh_known_hosts files.
作为你重新安装的一部分,有一台最新的密钥列表的机器运行这个,然后分发更新的known_hosts文件到其余的机器。
或者,像其他人提到的那样,您可以closuresStrictHostKeyChecking。 这会打开你的中间人攻击,虽然这可能不会在你的环境中担心。
也许你想在重新安装之前保存主机密钥,然后恢复它们。
或者,您可以使用CFengine或Puppet等configurationpipe理工具将授权的/etc/ssh/ssh_known_hosts
发给您网站上的所有客户端。 (如果在~/.ssh/known_hosts
没有匹配的条目,OpenSSH咨询/etc/ssh/ssh_known_hosts
。)