如何在Jenkins任务的execute shell命令中使用SSH凭证
Jenkins Execute Shell 调用SSH凭证的实现方案
错误原因
你遇到的报错核心是Jenkins的SSH凭证ID无法直接作为ssh命令的主机参数使用,凭证需要通过Jenkins的凭证绑定机制注入到构建环境后才能调用。
实现方案
自由式任务配置
- 先安装
Credentials Binding插件,该插件支持将凭证内容注入为构建过程的环境变量 - 进入任务配置页,找到「构建环境」区块,勾选「Use secret text(s) or file(s)」
- 新增
SSH Username with private key类型的绑定,Credential选择你提前配置的my-server-ssh,自定义变量名例如SSH_CRED后保存配置 - 在Execute Shell中使用注入的变量拼接ssh命令即可:
ssh -i "$SSH_CRED" 你的SSH用户名@目标服务器IP/域名 ls
Pipeline任务配置
直接在Jenkinsfile中通过credentials()相关方法拉取凭证即可,示例如下:
pipeline { agent any stages { stage('执行远程SSH命令') { steps { withCredentials([sshUserPrivateKey(credentialsId: 'my-server-ssh', keyFileVariable: 'SSH_KEY_PATH')]) { sh 'ssh -i $SSH_KEY_PATH 你的SSH用户名@目标服务器IP/域名 ls' } } } } }
注意事项
- 需确保Jenkins运行构建的agent节点网络可以连通目标SSH服务器的22端口
- 目标服务器的
~/.ssh/authorized_keys文件中已添加了你配置凭证时使用的公钥 - 首次连接目标服务器时ssh会弹出主机密钥确认提示导致构建卡住,可在ssh命令中添加
-o StrictHostKeyChecking=no参数跳过校验,示例:
ssh -o StrictHostKeyChecking=no -i "$SSH_CRED" 你的SSH用户名@目标服务器IP/域名 ls
内容的提问来源于stack exchange,提问作者Erich
相关产品推荐
相关产品推荐

