You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins执行远程Puppet Agent安装脚本时出现Host key verification failed错误

Jenkins执行Puppet Agent安装脚本报错Host key verification failed的解决办法

这个问题的核心原因很清晰:你本地用户的SSH环境和Jenkins运行时使用的用户环境完全不同。你在本地执行脚本时用的是自己的用户(me),这个用户已经通过了远程机器puppet-agent的主机密钥验证,甚至可能配置了SSH免密登录;但Jenkins默认是用jenkins系统用户来执行构建任务的,这个用户的~/.ssh目录里没有远程机器的主机密钥,也没有对应的SSH密钥对来免密登录远程机器,所以才会报Host key verification failed。

下面是一步步的解决步骤:

1. 解决主机密钥验证问题

首先让Jenkins用户(jenkins)信任远程机器的主机密钥:

  • 登录到Jenkins所在的服务器,切换到jenkins用户:
    sudo su - jenkins
    
  • 手动尝试连接一次远程机器,按提示输入yes接受主机密钥:
    ssh me@puppet-agent
    
    完成后,远程机器的主机密钥会被保存到/var/lib/jenkins/.ssh/known_hosts文件里,之后Jenkins再SSH连接就不会再报这个错误了。
  • 如果不想手动交互,也可以用ssh-keyscan直接添加主机密钥:
    ssh-keyscan puppet-agent >> /var/lib/jenkins/.ssh/known_hosts
    

2. 配置Jenkins用户的SSH免密登录

你的本地脚本能运行,大概率是你本地的me用户已经配置了SSH免密登录到远程puppet-agent的me用户,但Jenkins用户没有这个权限,所以需要给它配置:

  • 还是在Jenkins服务器上,以jenkins用户身份生成SSH密钥对(一路回车即可):
    ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
    
  • 将生成的公钥复制到远程puppet-agent的me用户的授权列表里:
    ssh-copy-id me@puppet-agent
    
    这时候需要输入一次远程me用户的密码,之后Jenkins用户就能免密SSH到远程机器了。

3. 优化脚本的安全性(可选但推荐)

你的脚本里用了echo "mepassword" | sudo -S这种明文密码的方式,非常不安全,建议改成让远程的me用户拥有免密sudo权限:

  • 登录到远程puppet-agent机器,编辑sudo配置:
    sudo visudo
    
  • 添加一行配置(替换成你的用户名):
    me ALL=(ALL) NOPASSWD: ALL
    
    保存退出后,远程的me用户执行sudo就不需要输入密码了,脚本里的echo "mepassword" | sudo -S可以直接改成sudo。

另外,脚本里的sudo chmod 777 /etc/puppetlabs/puppet/puppet.conf权限设置过于宽松,存在安全隐患,建议改成:

sudo chown root:root /etc/puppetlabs/puppet/puppet.conf
sudo chmod 644 /etc/puppetlabs/puppet/puppet.conf

按照这些步骤操作后,再去Jenkins里执行构建任务,应该就能正常运行脚本了。

内容的提问来源于stack exchange,提问作者Charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:05:41