SSH批量服务器连通性检查脚本自动绕过主机真实性确认方法
解决SSH首次连接主机真实性确认的自动化问题
我来给你几个靠谱的方案,帮你搞定这个手动输入的麻烦,让脚本完全自动化运行:
方法1:修改SSH配置文件(全局/用户级生效)
你可以通过调整SSH配置,让它自动接受新主机的密钥,一劳永逸解决提示问题:
- 编辑全局配置文件
/etc/ssh/ssh_config(对所有用户生效),或者当前用户的配置文件~/.ssh/config(仅对当前用户生效),添加一行:
这样SSH会自动将新主机的密钥加入StrictHostKeyChecking noknown_hosts文件,再也不会弹出真实性确认提示。 - 如果你不想自动添加密钥,只是临时跳过确认(后续连接仍会提示),可以改成:
不过自动化场景更推荐用StrictHostKeyChecking askno来彻底消除交互。
方法2:在SSH命令中添加参数(临时生效)
如果不想修改配置文件,直接给脚本里的SSH命令加个参数就行,只对当前脚本的连接生效:
把你的原脚本修改成这样:
for SERVER in $(cat servers.txt); do ssh -o StrictHostKeyChecking=no root@$SERVER && echo OK $SERVER || echo ERR $SERVER done
这里的-o StrictHostKeyChecking=no就是告诉SSH跳过主机密钥检查,直接执行连接操作,完美适配你的批量检查需求。
方法3:提前预加载主机密钥(更安全)
如果担心跳过密钥检查有安全风险(比如可能遭遇中间人攻击),你可以提前把所有目标服务器的主机密钥导入到known_hosts中:
- 用
ssh-keyscan命令批量获取并导入密钥:
这个命令会自动读取ssh-keyscan -f servers.txt >> ~/.ssh/known_hostsservers.txt里的所有服务器,获取它们的公钥并添加到你的known_hosts文件里,之后再运行原脚本就不会有任何提示了,安全性更高。
额外小提示
如果你的服务器还没配置SSH密钥登录,脚本运行时可能还要手动输入密码,可以用sshpass工具解决(需要先安装,比如Debian/Ubuntu上执行apt install sshpass),修改后的脚本示例:
for SERVER in $(cat servers.txt); do sshpass -p "你的服务器密码" ssh -o StrictHostKeyChecking=no root@$SERVER && echo OK $SERVER || echo ERR $SERVER done
不过密码明文写在脚本里有安全风险,更推荐给所有服务器配置SSH密钥登录,彻底告别密码交互。
内容的提问来源于stack exchange,提问作者VaTo
相关产品推荐
相关产品推荐

