我正在使用 AWS CloudFormation 实现整个环境的自动化,在测试期间,我需要频繁地终止并重新创建服务器。
服务器配置为从专用池中设置其 IP 地址,这意味着在我第一次连接它们时,我必须接受主机密钥检查(是/否问题),然后当我删除服务器并重新创建它时,我必须每次都从 known_hosts 文件中删除服务器的密钥。
我的问题是:
当我关闭会话时,是否可以自动从 known_hosts 中删除密钥?是否存在我错过的设置?
答案1
您可以将 ssh 配置为对 known_hosts 使用多个文件,并且新条目仅添加到第一个文件,通过设置该文件/dev/null
实际上不会保存它们:
UserKnownHostsFile /dev/null ~/.ssh/known_hosts
将其与您个人喜欢的询问或自动接受未知密钥相结合:
StrictHostKeyChecking no
您可能希望将这些选项限制在您的 DEV 环境中(特定主机中),而不是全局默认值,因为它们将带走相当多的安全密钥检查功能,因此在您的~/.ssh/config
:
Host *.dev.example.com
IdentityFile ~/.ssh/id_rsa.dev.example.com
UseKeychain yes
User hbruijn-adm
StrictHostKeyChecking ask
UserKnownHostsFile /dev/null ~/.ssh/known_hosts
答案2
你可以这样做:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -l user host
StrictHostKeyChecking=no 当然不是一个好主意,因为它会自动接受所有主机密钥
UserKnownHostsFile=/dev/null 不会将任何内容保存到您的常规 known_hosts 文件中。
答案3
正确的方法是将其SSHFP
(自动)放入DNS
,通过对区域进行签名DNSSEC
,然后让其SSH
处理其余部分,特别是如果您需要经常执行此操作并且密钥不断变化。