Ansible可正常Ping及SSH连接目标主机,但Jenkins调用Playbook部署时出现Host key verification failed错误的解决方案求助
解决Jenkins运行Ansible时的Host Key Verification Failed问题
你的问题根源其实很明确:Jenkins服务运行的系统用户和你手动操作时使用的用户不是同一个,导致两者的~/.ssh/known_hosts文件完全独立——你手动SSH时记录的新VM主机密钥存在于你个人用户的known_hosts中,但Jenkins使用的jenkins系统用户的known_hosts里并没有这条记录,所以触发了密钥校验失败。
下面是无需关闭host_key_checking的永久解决方案:
方法1:切换到jenkins用户手动验证一次
- 在Jenkins服务器上,切换到jenkins系统用户:
sudo su - jenkins - 手动SSH连接你的新VM:
ssh my_machine - 当出现主机密钥确认提示时,输入
yes并回车,完成后退出SSH连接和jenkins用户。
这会将新VM的主机密钥添加到jenkins用户的~/.ssh/known_hosts文件中,后续Jenkins运行Ansible时就能正常通过校验。
方法2:用ssh-keyscan自动化导入密钥(无交互)
如果你需要自动化完成这个操作,避免手动交互,可以直接用ssh-keyscan命令将新VM的密钥写入jenkins用户的known_hosts:
sudo su - jenkins -c "ssh-keyscan my_machine >> ~/.ssh/known_hosts"
这条命令会以jenkins用户身份执行,自动获取并添加目标主机的SSH密钥。
验证解决方案
完成上述操作后,切换到jenkins用户,运行Ansible ping命令验证:
sudo su - jenkins -c "ansible -m ping my_machine"
如果返回正常的pong响应,说明问题已经解决,此时再运行你的Jenkins项目就不会再出现密钥校验失败的错误了。
内容的提问来源于stack exchange,提问作者SocksSocksSocks




