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

无需在远程服务器添加SSH密钥,如何通过GitLab Runner克隆GitLab仓库?

解决方法

方法1:使用HTTPS地址+CI_JOB_TOKEN克隆

GitLab允许用CI作业的临时令牌CI_JOB_TOKEN通过HTTPS克隆仓库,无需在远程服务器存储任何密钥。修改script中的git clone命令即可:

ssh -o StrictHostKeyChecking=no root@192.xxx.xxx.xxx "pwd && whoami && git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/........git"

注意:默认项目允许CI_JOB_TOKEN克隆权限,若曾修改过,可去项目Settings → CI/CD → Token Access确认开启状态。

方法2:转发Runner的SSH代理到远程服务器

利用SSH代理转发功能,让远程服务器复用Runner的SSH密钥完成克隆,不用在服务器本地存储密钥。

修改gitlab-ci.yml的script部分,添加-A参数开启代理转发:

script:
  - echo "Test ssh"
  - whoami
  - ssh -A -o StrictHostKeyChecking=no root@192.xxx.xxx.xxx "pwd && whoami && git clone git@gitlab.com:........git"

同时需确保Runner环境配置支持代理转发:

  • 编辑Runner用户的~/.ssh/config文件,添加:
    Host gitlab.com
      ForwardAgent yes
    
  • 在before_script中添加ssh-add $SSH_PRIVATE_KEY,将Runner的私钥加入ssh-agent(若为shell runner,可能需要配置无密码添加权限)。

方法3:Runner克隆后再传输到远程服务器

如果不需要远程服务器直接和GitLab交互,可先在Runner环境克隆仓库,再通过SCP/rsync将代码传到远程服务器:

修改gitlab-ci.yml如下:

test-ssh:
  stage: test
  tags:
    - shell
  rules:
    - if: $CURRENT_JOB == 'deploy'
      when: on_success
  before_script:
    - chmod 400 $SSH_PRIVATE_KEY
    - git clone git@gitlab.com:........git ./temp-repo
  script:
    - echo "Test ssh"
    - whoami
    - # 用SCP传输
      scp -r ./temp-repo root@192.xxx.xxx.xxx:/目标路径/
    - # 或者用rsync更高效
      # rsync -avz ./temp-repo/ root@192.xxx.xxx.xxx:/目标路径/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:22:41