如何解决Jenkins构建时known_hosts文件不存在的报错问题?
问题原因
你遇到的报错核心是:Jenkins采用的「Known hosts file」主机密钥验证策略要求存在对应的known_hosts文件,但Jenkins默认以jenkins用户运行,无法访问你在root用户下生成的~/.ssh/known_hosts文件,或者该用户自身的~/.ssh目录下根本没有这个文件。
解决方案
方法1:为Jenkins运行用户配置SSH环境
- 进入Jenkins容器:
docker exec -it <你的Jenkins容器名/ID> bash - 切换到
jenkins用户:su - jenkins(若切换失败,执行bash -c "su - jenkins") - 生成SSH密钥对(按需执行):
ssh-keygen -t rsa -C "your-email@example.com",全程回车默认配置即可 - 验证GitHub连接并生成
known_hosts:执行ssh -T git@github.com,输入yes确认主机密钥,此时jenkins用户的~/.ssh/目录下会自动生成known_hosts文件 - 将
jenkins用户的公钥内容(执行cat ~/.ssh/id_rsa.pub获取)添加到GitHub账户的SSH密钥列表中 - 在Jenkins凭证管理中,配置该
jenkins用户的私钥(路径为/var/jenkins_home/.ssh/id_rsa)
方法2:修改Jenkins的Git主机密钥验证策略
- 登录Jenkins后台,进入Manage Jenkins -> Configure Global Security
- 找到Git Host Key Verification Configuration模块
- 将验证策略从「Known hosts file」改为以下任意一种:
- Accept first connection:适合测试环境,首次连接自动信任主机密钥
- Manually provided keys:更安全,手动添加GitHub的主机密钥,可通过执行
ssh-keyscan github.com获取对应密钥内容
方法3:调整root用户SSH目录权限(不推荐,存在安全风险)
若坚持使用root用户的SSH配置,执行以下命令:
- 进入容器后修改目录归属:
chown -R jenkins:jenkins /root/.ssh - 调整权限确保Jenkins可访问:
chmod 700 /root/.ssh && chmod 600 /root/.ssh/* - 在Jenkins凭证中指定私钥路径为
/root/.ssh/id_rsa
内容的提问来源于stack exchange,提问作者campos
相关产品推荐
相关产品推荐

