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

Jenkins使用ssh-agent克隆Bitbucket仓库提示Host key verification失败

问题原因

首先你遇到的Host key verification failed报错和密钥是否正确无关,属于SSH的主机公钥校验环节失败,核心原因如下:

  • sshagent插件的作用仅为将指定私钥加载到SSH代理进程中,处理后续的身份认证环节,不会自动添加目标主机的公钥到信任列表。
  • SSH协议为了防止中间人攻击,每次连接新主机时都会要求确认目标主机的公钥,确认后会将公钥写入当前用户的~/.ssh/known_hosts文件,后续连接会自动校验。
  • 你运行在Kubernetes上的Jenkins,每次启动的docker容器都是全新的干净实例,默认~/.ssh目录为空,没有存储Bitbucket的主机公钥,非交互环境下SSH不会弹出确认提示,直接中断连接抛出该错误。

为什么同流水线其他克隆操作正常?

你前面克隆应用代码大概率使用的是Jenkins内置的checkout scm等Git插件封装的步骤,Git插件会自动调用Jenkins全局配置的受信任主机公钥列表完成校验,不需要依赖容器内的known_hosts文件;或者前面的步骤没有在docker容器内运行,使用的Jenkins Agent环境已经提前配置过Bitbucket的主机公钥。

为什么第二种方案可以成功?

你在第二种方案中主动执行了ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts,手动将Bitbucket的公钥加入了当前容器的信任列表,因此跳过了主机公钥确认环节,后续的Git克隆操作可以正常执行。

更优的解决方案

不需要手动拷贝私钥到磁盘(会增加密钥泄露风险),直接在sshagent块内加一行主机公钥扫描即可:

stage('Deploy') {
  steps {
    container('docker') {
      sshagent (credentials: ['sshsupersecret_key']){
        sh '''
          mkdir -p ~/.ssh
          chmod 700 ~/.ssh
          ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts
          git clone git@bitbucket.org:org_name/appconfigs.git
        '''
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:30:00