Kubernetes中Jenkins SSH Agent无法连接Master节点:主机密钥验证失败
解决Jenkins Pipeline SSH连接K8s Master时Host key verification failed问题
问题分析
报错Host key verification failed的核心原因是:Jenkins使用的Kubernetes动态Agent Pod是临时创建的,容器内没有预先存储目标Master节点(10.0.0.125)的SSH主机公钥。在非交互式的Pipeline环境中,SSH不会弹出确认提示,直接触发验证失败。
你之前从其他机器能正常SSH,是因为那些机器已经通过交互式操作将目标主机的公钥存入了~/.ssh/known_hosts文件,而Jenkins的临时Pod没有这个记录。
解决方案
方案1:临时禁用主机密钥验证(仅测试环境使用)
在SSH命令中添加-o StrictHostKeyChecking=no参数,跳过主机密钥验证:
stage('Deploy to Kubernetes Cluster'){ steps { sshagent(['RPi-SSH']) { script { sh 'id' sh 'ssh -o StrictHostKeyChecking=no pi@10.0.0.125 id' sh 'ssh -o StrictHostKeyChecking=no pi@10.0.0.125 ls' } } } }
⚠️ 注意:该方案会跳过主机真实性验证,存在安全风险,禁止在生产环境使用。
方案2:预先写入目标主机公钥到known_hosts(推荐生产环境)
- 在本地执行
ssh-keyscan 10.0.0.125,获取目标主机的SSH公钥,输出类似:
10.0.0.125 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
- 在Pipeline中把该公钥写入Agent Pod的
~/.ssh/known_hosts文件,再执行SSH命令:
stage('Deploy to Kubernetes Cluster'){ steps { sshagent(['RPi-SSH']) { script { sh 'id' // 替换为实际从ssh-keyscan获取的公钥内容 sh 'echo "10.0.0.125 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..." >> ~/.ssh/known_hosts' sh 'ssh pi@10.0.0.125 id' sh 'ssh pi@10.0.0.125 ls' } } } }
方案3:定制Jenkins Agent镜像(长期稳定场景)
如果需要频繁连接该Master节点,可以在Jenkins Kubernetes Agent的基础镜像中预先添加目标主机的公钥到/home/jenkins/.ssh/known_hosts,这样每个新创建的Pod都会自带该记录,无需每次Pipeline中重复配置。
内容的提问来源于stack exchange,提问作者Jorge Pabán
相关产品推荐
相关产品推荐

