gitlab跑步者:在本地执行时添加ssh密钥

k7fdbhmy  于 2022-11-20  发布在  Git
关注(0)|答案(3)|浏览(200)

我尝试通过docker执行器在本地运行ci管道以进行调试,方法是运行:

gitlab-runner exec docker <job_name>

在某个时间点,它需要克隆一个私有的git存储库。
我使用的是gitlab建议的典型食谱。

variables:
    MY_PRIVATE_KEY: <my_private_key>

before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$MY_PRIVATE_KEY")
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

但是,在尝试将密钥添加到代理时:

$ ssh-add <(echo "$MY_PRIVATE_KEY")
Enter passphrase for /dev/fd/63: Running after script...
ERROR: Job failed: exit code 1
FATAL: exit code 1

我肯定我的钥匙上没有passphrase

7tofc5zh

7tofc5zh1#

我不知道如何在本地调试git ci,我个人不需要它,如果它是关于ssh和它的键,它没有太大帮助,因为键的处理是不同的。
记住两件事:
1.不要把你的私钥保存在gitlab仓库中(作为一个文件),也不要把它放到ci脚本中,使用gitlab的功能:掩码变量:https://docs.gitlab.com/ee/ci/variables
1.你可能会在存储私钥时遇到一些问题,因为gitlab对变量的格式有一些限制。一个可行的解决方案是将密码设为base64。加载密钥“/dev/fd/63”时发生GITLAB CI错误:无效格式错误:作业失败:退出代码1
你的.gitlab.yml可能看起来像这样,根据你使用的映像,你必须安装ssh-agent(before_script部分的第一行)。

deploy:
  image: ubuntu:latest
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$SSH_PRIVATE_KEY")
    - mkdir -p ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
  script:
    - ssh -t user@host "remote command && other command on remote"

$SSH_PRIVATE_KEY在此脚本中定义,而是作为掩码变量。请参见GitLab CI/CD environment variables

avwztpqn

avwztpqn2#

您确定私钥内容设置正确吗?
尝试在ssh-add之前添加echo $MY_PRIVATE_KEY
此外,我建议通过Gitlab CI/CD secrets注入,而不是在您的.gitlab-ci.yml

mpgws1up

mpgws1up3#

我能够管理这个问题,在我的情况下,这是因为一个错误的私钥格式。
下面是我的gitlab-ci.yml的外观:

variables:
  MY_PRIVATE_KEY: |
    -----BEGIN RSA PRIVATE KEY-----
    UYADFAIBAAKCAgEAtn4G7FlPz5IAqbxA0MTO8ip.........................
    yo9Gob/UXA3RFpbTMPItenz6r9D9dn..................................
    .................................
    -----END RSA PRIVATE KEY-----

before_script:
  - apt-get update -y
  - 'which ssh-agent || ( apt-get install openssh-client -y )'
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$MY_PRIVATE_KEY")

如果ssh-add <(echo "$MY_PRIVATE_KEY")不起作用,请将其替换为:

- echo -n "$MY_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null

对我来说,这种变通办法是有效的。

相关问题