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

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(推荐生产环境)

  1. 在本地执行ssh-keyscan 10.0.0.125,获取目标主机的SSH公钥,输出类似:
10.0.0.125 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ...
  1. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:05:08