You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在本地Jenkins中配置带SSH跳转堡垒机的连接?

刚好踩过这个坑,给你整理几个可行的方案,适配不同的Jenkins使用场景,都能实现通过堡垒机连接目标服务器:

先确认前置条件

首先得明确Jenkins的运行用户:打开Jenkins后台,进入「Manage Jenkins」→「System Information」,找到user.name字段,确认是不是你当前的本地用户(myname)。如果是的话,你现有的SSH配置文件和密钥已经可以复用,只需要调整权限确保Jenkins能读取;如果是其他用户(比如默认的jenkins用户),需要把配置和密钥复制到该用户的~/.ssh目录下再做后续操作。

然后调整文件权限(SSH对权限要求极严,权限过宽会直接拒绝使用密钥):

chmod 700 ~/.ssh
chmod 600 ~/.ssh/jumpkey.pem ~/.ssh/serverkey.pem
chmod 644 ~/.ssh/config

方案1:用「Publish Over SSH」插件可视化配置

如果你习惯用Jenkins的可视化插件做部署/命令执行,这个方案最直观:

  1. 进入「Manage Jenkins」→「Configure System」,找到「Publish over SSH」板块
  2. 先添加**堡垒机(jump)**的服务器配置:
    • 填写Name(比如jump-host)、Hostnamejumpdns)、Usernameuser1
    • 点击「Advanced」,勾选「Use key authentication」,可以直接粘贴jumpkey.pem的内容,或者选择「From a file on Jenkins master」指向/Users/myname/.ssh/jumpkey.pem
    • 点击「Test Configuration」确认能连上堡垒机
  3. 再添加**目标服务器(server)**的配置:
    • 填写Name(比如target-server)、Hostnameserverdns)、Usernameuser2
    • 同样在「Advanced」里配置serverkey.pem的密钥
    • 关键操作:在「Advanced」里找到「Proxy」选项,选择「Jump host」,然后选中刚才配置的堡垒机
    • 测试连接,成功后就可以在任务里用这个配置执行命令或传输文件了

方案2:用Jenkins Pipeline脚本实现(灵活度最高)

如果用Pipeline做自动化流程,推荐结合sshagent插件来管理密钥:

  1. 先把密钥存入Jenkins凭据:

    • 进入「Manage Jenkins」→「Manage Credentials」→「Global credentials (unrestricted)」→「Add Credentials」
    • 选择「SSH Username with private key」,分别添加:
      • 堡垒机密钥:Usernameuser1,粘贴jumpkey.pem内容,设置IDjump-key
      • 目标服务器密钥:Usernameuser2,粘贴serverkey.pem内容,设置IDserver-key
  2. 然后写Pipeline脚本,两种方式可选:

    方式A:复用本地SSH配置

    直接用你现有的~/.ssh/config,和命令行逻辑完全一致:

    pipeline {
        agent any
        stages {
            stage('Connect to target server') {
                steps {
                    sshagent(['jump-key', 'server-key']) {
                        // 加StrictHostKeyChecking=no是避免首次连接需要手动确认主机密钥,生产环境建议提前把主机密钥加入known_hosts
                        sh 'ssh -o StrictHostKeyChecking=no server "echo Connected successfully"'
                    }
                }
            }
        }
    }
    

    方式B:直接在脚本里指定ProxyJump

    不依赖本地配置,更适合跨环境复用:

    pipeline {
        agent any
        stages {
            stage('Connect to target server') {
                steps {
                    sshagent(['jump-key', 'server-key']) {
                        sh '''
                        ssh -o StrictHostKeyChecking=no \
                            -o ProxyJump="user1@jumpdns:22" \
                            user2@serverdns "echo Connected successfully"
                        '''
                    }
                }
            }
        }
    }
    

方案3:直接复用本地SSH配置(最简单)

如果Jenkins确实用你的当前用户运行,那只要确保权限正确,直接在Jenkins的任何SSH操作里用server作为主机名就行,和你命令行执行ssh server的逻辑完全一致。比如在自由风格任务里添加「Execute shell」步骤,直接写ssh server "your-command"即可。


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

火山引擎 最新活动