我的情况如下:我正在设置一个测试工具,它将从中央客户端启动多个虚拟机实例,然后通过 对其执行命令ssh
。虚拟机将具有以前未使用的主机名和 IP 地址,因此它们不会出现在~/.ssh/known_hosts
中央客户端的文件中。
我遇到的问题是ssh
针对新虚拟实例运行的第一个命令总是会出现交互式提示:
The authenticity of host '[hostname] ([IP address])' can't be established.
RSA key fingerprint is [key fingerprint].
Are you sure you want to continue connecting (yes/no)?
有没有办法可以绕过这个问题,让新主机已经被客户端计算机所知,也许是通过使用已经嵌入到虚拟机映像中的公钥?如果可以的话,我真的很想避免使用 Expect 或其他任何东西来回答交互式提示。
答案1
在配置文件中或通过以下方式将选项设置StrictHostKeyChecking
为:no
-o
ssh -o StrictHostKeyChecking=no [email protected]
答案2
我认为,实现此目的的最佳方法如下:
ssh-keygen -R [hostname]
ssh-keygen -R [ip_address]
ssh-keygen -R [hostname],[ip_address]
ssh-keyscan -H [hostname],[ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [ip_address] >> ~/.ssh/known_hosts
ssh-keyscan -H [hostname] >> ~/.ssh/known_hosts
这将确保没有重复的条目,确保主机名和 IP 地址都得到覆盖,并且还将对输出进行散列,这是一种额外的安全措施。
答案3
对于懒人来说:
ssh-keyscan -H <host> >> ~/.ssh/known_hosts
-H 对主机名/IP 地址进行哈希处理
答案4
您可以使用ssh-keyscan
命令获取公钥并将其附加到您的known_hosts
文件中。