无需在远程服务器添加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
相关产品推荐
相关产品推荐

