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

GitLab CI/CD 如何在script字段中执行多行SSH远程命令

解决方法

你可以直接使用YAML的多行字面量语法|保留命令的换行格式,完整写入script字段即可,最终配置示例如下:

deploy-to-stage:
  stage: deploy
  before_script:
    - "which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )"
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
  script:
    - |
      ssh $DEPLOY_USER@$DEPLOY_HOST <<'ENDSSH'                                                                    
      set -x -o verbose;
      execute some command here
      set +x
      ENDSSH

注意事项

  • 提前在GitLab项目的「设置→CI/CD→变量」页面添加DEPLOY_USER、DEPLOY_HOST两个变量,和你已配置的SSH_PRIVATE_KEY、SSH_KNOWN_HOSTS权限配置保持一致即可
  • 示例中<<'ENDSSH'加了单引号,代表代码块内的变量会在远程服务器环境解析,不会提前在CI任务本地替换;如果需要把CI侧的变量传入远程命令执行,把单引号删除改为<<ENDSSH即可,此时需要保留在远程解析的变量要加转义符,例如\$remote_server_var

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:06:03