如何通过SSH自动完成未知服务器的首次连接验证(免手动确认并写入known_hosts)
如何通过SSH自动完成未知服务器的首次连接验证(免手动确认并写入known_hosts)
我太懂这种在自动化脚本里被SSH首次连接确认打断的痛苦了!特别是云基础设施创建这类完全自动化的场景,突然冒出来个手动确认提示,直接就把整个流程卡断了。别担心,有几个靠谱的方法能解决这个问题:
方法一:直接通过SSH参数跳过验证并自动写入密钥
这是最直接的方式,给ssh命令加上StrictHostKeyChecking=no参数,就能自动接受新服务器的密钥并写入known_hosts文件,全程不会弹出确认提示:
ssh -o StrictHostKeyChecking=no root@<IP>
如果只是临时连接,不想把这个服务器的密钥留在known_hosts里(避免后续干扰),可以再加一个参数把主机密钥文件指向空设备:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@<IP>
方法二:提前用ssh-keyscan写入主机密钥
如果你的脚本允许提前准备,可以先用ssh-keyscan获取目标服务器的密钥,提前写入known_hosts,这样后续SSH连接就不会有任何提示了:
ssh-keyscan <IP> >> ~/.ssh/known_hosts
这个方法相对更可控,适合你这种完全可控的环境——主动获取密钥并确认写入,比自动接受更稳妥。
另外提一句,你之前试的echo yes | ssh -q root@<IP>之所以没用,是因为SSH的确认提示是输出到标准错误(stderr)的,而管道只传递标准输入(stdin),所以这个方式没法把"yes"传给确认提示,自然就无效啦。
备注:内容来源于stack exchange,提问作者mszmurlo
相关产品推荐
相关产品推荐

