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

Jenkins Pipeline中如何使用用户传入参数建立SSH连接

Jenkins流水线使用构建入参作为SSH连接凭证实现方案

你配置的构建入参界面如下:
流水线参数配置截图

两种可直接落地的实现方式:

方案1:动态创建临时凭证,兼容SSH Agent插件

该方案不需要提前在Jenkins凭证库预存固定凭证,临时凭证仅对当前构建生效,构建结束后自动删除,完全适配SSH Agent插件的使用逻辑。

  • 提前确认构建参数配置:保留已经设置的用户名(字符串类型)、密码(密码类型)参数,新增目标服务器IP参数即可,参数名可自定义,示例中使用SSH_USER、SSH_PWD、SSH_HOST作为参数名。
  • 流水线代码参考:
pipeline {
    agent any
    parameters {
        string(name: 'SSH_USER', description: 'SSH连接用户名')
        password(name: 'SSH_PWD', description: 'SSH连接密码')
        string(name: 'SSH_HOST', description: '目标Linux服务器IP')
    }
    stages {
        stage('远程执行服务器操作') {
            steps {
                script {
                    // 生成当前构建专属的临时SSH凭证
                    def tempSshCred = credentials(
                        type: 'usernamePassword',
                        username: params.SSH_USER,
                        password: params.SSH_PWD,
                        id: "temp-ssh-${BUILD_NUMBER}",
                        description: '构建临时凭证,执行后自动销毁'
                    )
                    // 加载临时凭证到SSH Agent
                    sshagent(credentials: [tempSshCred.id]) {
                        sh """
                            ssh -o StrictHostKeyChecking=no ${params.SSH_USER}@${params.SSH_HOST} "uptime"
                            // 后续可追加任意需要执行的远程命令,scp传文件也可直接使用
                        """
                    }
                }
            }
            post {
                always {
                    script {
                        // 无论构建成功失败,都删除临时凭证避免残留
                        if (tempSshCred?.exists()) {
                            tempSshCred.delete()
                        }
                    }
                }
            }
        }
    }
}

方案2:直接通过参数传递凭证,无需依赖SSH Agent插件

该方案不需要操作Jenkins凭证体系,直接通过sshpass实现非交互SSH认证,配置更简单。

  • 前置依赖:在Jenkins任务运行的agent节点上提前安装sshpass工具:
    • Debian/Ubuntu系:apt update && apt install -y sshpass
    • CentOS/RHEL系:yum install -y sshpass
  • 流水线代码参考:
pipeline {
    agent any
    parameters {
        string(name: 'SSH_USER', description: 'SSH连接用户名')
        password(name: 'SSH_PWD', description: 'SSH连接密码')
        string(name: 'SSH_HOST', description: '目标Linux服务器IP')
    }
    stages {
        stage('远程执行服务器操作') {
            steps {
                sh """
                    sshpass -p '${params.SSH_PWD}' ssh -o StrictHostKeyChecking=no ${params.SSH_USER}@${params.SSH_HOST} "uptime"
                    // scp传文件可直接替换ssh为scp,例如 sshpass -p '${params.SSH_PWD}' scp -o StrictHostKeyChecking=no 本地文件路径 ${params.SSH_USER}@${params.SSH_HOST}:远程路径
                """
            }
        }
    }
}

注意事项

  • 密码参数必须选择Jenkins参数类型中的密码类型,不要使用普通字符串参数存储密码,避免控制台输出、参数展示时出现明文泄露。
  • SSH命令中必须携带-o StrictHostKeyChecking=no参数,跳过首次连接的主机密钥确认交互,避免流水线无响应卡住。
  • 若使用密钥而非密码连接,逻辑完全一致,只需要把凭证类型替换为密钥类型,对应传入私钥参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:15:45