SSH 命令行 (Jenkins 原生)
持续集成中的 SSH 命令行插件通常用于授权构建机登录云服务器执行相应的命令与任务。通过 SSH 命令行插件,构建机可以针对云服务器执行以下操作:
- 将构建机上的文件推送到云主机;
- 将云主机上的文件拉取至构建机上;
- 远程登录云主机上执行命令;
- 将构建机上的脚本传输至云主机并执行;
- 远程登录云主机后删除文件;
参考构建计划模板
账号密码凭据 SSH Jenkinsfile 示例
pipeline {
agent any
stages {
stage('阶段-1') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[
url: env.GIT_REPO_URL,
credentialsId: env.CREDENTIALS_ID
]]])
}
}
stage("阶段名称") {
steps {
withCredentials([usernamePassword(
credentialsId: "${REMOTE_CRED}",
passwordVariable: 'password',
usernameVariable: 'userName'
)]) {
script {
remoteConfig = [:]
remoteConfig.name = "my-remote-server"
remoteConfig.host = "${REMOTE_HOST}"
remoteConfig.allowAnyHosts = true
remoteConfig.user = userName
// SSH 登录密码
remoteConfig.password = password
writeFile(file: 'test.sh', text: 'ls')
sshCommand(remote: remoteConfig, command: 'for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done')
sshScript(remote: remoteConfig, script: 'test.sh')
sshPut(remote: remoteConfig, from: 'test.sh', into: '.')
sshGet(remote: remoteConfig, from: 'test.sh', into: 'test_new.sh', override: true)
sshRemove(remote: remoteConfig, path: 'test.sh')
}
}
}
}
}
}
私钥凭据 SSH Jenkinsfile 示例
pipeline {
agent any
stages {
stage('阶段-1') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[
url: env.GIT_REPO_URL,
credentialsId: env.CREDENTIALS_ID
]]])
}
}
stage("阶段名称") {
steps {
// 使用当前项目下的凭据管理中的 SSH 私钥 凭据
withCredentials([sshUserPrivateKey(
credentialsId: "${REMOTE_CRED}",
keyFileVariable: "privateKeyFilePath"
)]) {
script {
remoteConfig = [:]
remoteConfig.name = "my-remote-server"
remoteConfig.host = "${REMOTE_HOST}"
remoteConfig.allowAnyHosts = true
remoteConfig.user = userName
// SSH 私钥文件地址
remoteConfig.identityFile = privateKeyFilePath
writeFile(file: 'test.sh', text: 'ls')
sshCommand(remote: remoteConfig, command: 'for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done')
sshScript(remote: remoteConfig, script: 'test.sh')
sshPut(remote: remoteConfig, from: 'test.sh', into: '.')
sshGet(remote: remoteConfig, from: 'test.sh', into: 'test_new.sh', override: true)
sshRemove(remote: remoteConfig, path: 'test.sh')
}
}
}
}
}
}
拓展阅读
如需了解更多 Jenkinsfile 中关于 SSH 命令的内容,你可以查看 Jenkins 官方帮助文档。
如需了解更多 Jenkins 的 SSH 插件相关内容,你可以查看该插件的官方主页。
常见问题
SSH 时提示 Auth fail
如密钥无问题,且系统是 Ubuntu 22.04,可以执行以下配置:
vim /etc/ssh/sshd_config
加入下面这条
PubkeyAcceptedKeyTypes= +ssh-rsa
然后重启一下sshd,ssh
systemctl restar sshd
systemctl restar ssh
SSH 时提示 invalid privatekey
原因:invalid privatekey 是录入的私钥格式不支持,可以前往凭据管理修改使用 RSA 密钥。要求如下图所示。
SSH 本地是好的但是很慢,CI 中无法成功
原因:目标机器可能高负载。
执行 SSH 命令访问阿里云主机时提示 Connection reset 错误
此问题是阿里云侧白名单未放行 CODING IP 所致。前往阿里云「安全管控平台」→「安全管控」→「新增访问白名单」,将 CODING 构建机所使用的 出口 IP 地址 加入至白名单中可以防止其在访问云主机时被拦截。
问题反馈 >

感谢反馈有用
感谢反馈没用
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。