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

如何为Jenkins inbound-agent容器传递SSH密钥以实现部署?

解决Jenkins Inbound Agent容器SSH权限与自动配置问题

方案一:通过Jenkins代理启动脚本自动配置SSH密钥

无需修改镜像,直接在Jenkins代理配置中注入初始化逻辑:

  • 进入「管理Jenkins」→「节点管理」→编辑目标代理节点
  • 在「启动方法」的「初始化脚本」中添加以下内容,从Jenkins凭证读取密钥并修正权限:
    # 创建并配置.ssh目录权限
    mkdir -p /home/jenkins/.ssh
    chmod 700 /home/jenkins/.ssh
    
    # 将Jenkins凭证中的私钥写入文件(替换<凭证ID>为实际ID)
    echo "${JENKINS_SSH_PRIVATE_KEY}" > /home/jenkins/.ssh/id_rsa
    chmod 600 /home/jenkins/.ssh/id_rsa
    
    # 可选:预加载目标服务器公钥避免首次连接确认
    ssh-keyscan 目标服务器IP/域名 >> /home/jenkins/.ssh/known_hosts
    chmod 644 /home/jenkins/.ssh/known_hosts
    
  • 在代理节点的「环境变量」中添加JENKINS_SSH_PRIVATE_KEY,值选择「从凭证引用」并指定对应SSH私钥凭证ID

方案二:自定义Docker入口点脚本修正挂载权限

基于官方镜像,通过入口点脚本在容器启动时自动修正挂载文件的属主和权限:

  • 创建自定义入口点脚本agent-entrypoint.sh:
    #!/bin/bash
    # 修正挂载的.ssh目录及文件权限
    if [ -d /home/jenkins/.ssh ]; then
      chown -R jenkins:jenkins /home/jenkins/.ssh
      chmod 700 /home/jenkins/.ssh
      find /home/jenkins/.ssh -type f -exec chmod 600 {} \;
    fi
    
    # 执行原代理启动命令
    exec "$@"
    
  • 启动容器时挂载脚本并替换入口点,同时挂载本地SSH密钥文件:
    docker run -d \
      --name jenkins-agent \
      -v /本地路径/agent-entrypoint.sh:/usr/local/bin/agent-entrypoint.sh \
      -v /本地SSH密钥路径/id_rsa:/home/jenkins/.ssh/id_rsa \
      -v /本地SSH配置路径/known_hosts:/home/jenkins/.ssh/known_hosts \
      --entrypoint /usr/local/bin/agent-entrypoint.sh \
      jenkins/inbound-agent -url <Jenkins控制器地址> <代理密钥> <代理名称>
    
    若用Kubernetes部署,可在Pod模板中通过initContainer完成权限修正,或在容器启动命令中先执行权限调整再启动代理。

方案三:用Jenkins共享库复用密钥配置逻辑

避免每个任务重复编写初始化步骤,将配置逻辑封装为共享库函数:

  • 安装「Credentials Binding Plugin」插件
  • 创建Jenkins共享库,在vars目录下添加setupSsh.groovy:
    def call(String credentialId, String targetHost) {
      withCredentials([sshUserPrivateKey(credentialsId: credentialId, keyFileVariable: 'SSH_KEY')]) {
        sh '''
          mkdir -p ~/.ssh
          cp $SSH_KEY ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
        '''
        sh "ssh-keyscan ${targetHost} >> ~/.ssh/known_hosts"
      }
    }
    
  • 所有需要SSH连接的任务,只需在构建步骤前调用setupSsh('凭证ID', '目标服务器地址')即可自动完成配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:10