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

Jenkins Pipeline远程服务器切换用户目录并执行脚本问题求助

问题原因

每个sshCommand和sshScript都是独立的SSH会话,执行完毕后就会断开连接,前一个命令的用户切换、目录变更操作不会延续到下一个命令的会话中,这就是为什么单独执行切换用户、切换目录后,执行脚本时环境不生效。

解决方案

把需要连续执行的操作合并到同一个SSH会话里,以下是几种可行的实现方式:

方案1:单条命令串联所有操作

利用su -的-c参数传递后续命令,再用&&串联切换目录和执行脚本的操作,确保在同一个会话内完成所有步骤:

def remote = [:]
remote.name = 'QA'
remote.host = '193.401.200.001'
remote.user =  'admin'
remote.password = 'admin'
remote.allowAnyHosts = true
                    
stage('Remote SSH') {
   sshCommand remote: remote, sh: "pbrun su - myuser -c 'cd /apps && ./demo.sh'"
}
  • su - myuser -c '命令':切换到myuser用户后,执行单引号内的命令集合
  • cd /apps && ./demo.sh:先切换到/apps目录,确认切换成功后再执行demo.sh,避免目录不存在时执行脚本出错

方案2:写入临时脚本批量执行

如果操作逻辑复杂,可先把所有步骤写入远程临时脚本,再切换用户执行:

def remote = [:]
remote.name = 'QA'
remote.host = '193.401.200.001'
remote.user =  'admin'
remote.password = 'admin'
remote.allowAnyHosts = true
                    
stage('Remote SSH') {
   // 创建可执行的临时脚本
   sshCommand remote: remote, sh: "echo -e 'cd /apps\n./demo.sh' > /tmp/run_demo.sh && chmod +x /tmp/run_demo.sh"
   // 切换用户执行脚本
   sshCommand remote: remote, sh: "pbrun su - myuser -c '/tmp/run_demo.sh'"
   // 清理临时脚本(可选)
   sshCommand remote: remote, sh: "rm -f /tmp/run_demo.sh"
}

方案3:结合sshScript调整执行逻辑

如果需要保留sshScript调用,需先确保脚本已上传到远程服务器,再切换用户指定目录执行:

def remote = [:]
remote.name = 'QA'
remote.host = '193.401.200.001'
remote.user =  'admin'
remote.password = 'admin'
remote.allowAnyHosts = true
                    
stage('Remote SSH') {
   // 先将本地脚本上传到远程服务器(如果未提前部署)
   sshPut remote: remote, from: 'demo.sh', into: '/tmp/'
   // 切换用户并指定目录执行脚本
   sshCommand remote: remote, sh: "pbrun su - myuser -c 'cd /apps && /tmp/demo.sh'"
}
关键注意事项
  • 绝对不要拆分独立的sshCommand执行用户切换、目录变更,每个会话的环境是独立的,不会继承上一个会话的状态
  • 使用su - user而非su user,前者会加载目标用户的完整环境变量,避免脚本执行时因环境缺失出错
  • 如果pbrun有额外的认证或权限参数,需根据实际环境调整命令格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:11:08