GITLAB CI错误加载密钥“ / dev / fd / 63”:格式无效错误:作业失败:退出代码1

时间:2019-03-18 14:25:57

标签: gitlab-ci

这是我的代码giltlab-ci.yml:

 before_script:
  ##
  ## Install ssh-agent if not already installed, it is required by Docker.
  ## (change apt-get to yum if you use an RPM-based image)
  ##
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'

  ##
  ## Run ssh-agent (inside the build environment)
  ##
  - eval $(ssh-agent -s)
  ##
  ## Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
  ## We're using tr to fix line endings which makes ed25519 keys work
  ## without extra base64 encoding.
  ## https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556
  ##
  - mkdir -p ~/.ssh
  #- echo -n "$PROJECT_SSH_KEY" | ssh-add - >/dev/null
  - echo "$PROJECT_SSH_KEY"
  - ssh-add <(echo "$PROJECT_SSH_KEY")
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  - git config --global user.email "walid.mansia@gmail.com"
  - git config --global user.name "Walid Mansia"

  ##
  ## Create the SSH directory and give it the right permissions
  ##
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh

  ##
  ## Optionally, if you will be using any Git commands, set the user name and
  ## and email.
  ##
  #- git config --global user.email "user@example.com"
  #- git config --global user.name "User name"

我把这个放了出去

  

使用gitlab-runner 11.8.0(4745a6f3)运行         在Allence-Tunisie-docker-runner sH47eTgb上       将Docker executor与image ntfactory / ci-tool:0.0.2一起使用...       拉码头工人图像ntfactory / ci-tool:0.0.2 ...       使用docker image sha256:7fe7b170806f6846271eec23b41c4f79202777f62c0d7a32165dc41722900979   对于ntfactory / ci-tool:0.0.2 ...       通过a732493b4b94在Runner-sH47eTgb-project-11060727-concurrent-0上运行...       克隆存储库...       克隆到'/ builds / alence-tunisie / e-formation'...       检出0a6b48ef为feat / gitlab-ci ...       跳过Git子模块设置       正在检查默认缓存...       没有提供URL,将不会从共享缓存服务器下载缓存。而是将提取本地版本的缓存。       成功提取缓存       $其中的ssh-agent || (apt-get更新-y && apt-get安装openssh-client -y)       / usr / bin / ssh-agent       $ eval $(ssh-agent -s)       代理pid 12       $ mkdir -p〜/ .ssh       $ echo“ $ SSH_PRIVATE_KEY” | tr -d'\ r'| ssh-add-> / dev / null       加载密钥“(stdin)”时出错:格式无效       错误:作业失败:退出代码1

即使我尝试过-回显“ $ SSH_PRIVATE_KEY” | tr -d'\ r'| SSH添加 -> / dev / null我收到此错误

  

加载键“(stdin)”时出错:格式无效

3 个答案:

答案 0 :(得分:9)

如果您已经保护了变量,那么您需要拥有一个受保护的分支。如变量设置中所述-“可以通过仅将它们暴露于受保护的分支或标签来对其进行保护。”

答案 1 :(得分:2)

$ SSH_PRIVATE_KEY中的私钥格式错误时,会发生此错误,如果在其中添加一些随机字符,则可以轻松地在本地对其进行测试。特别是,当您仅将私钥复制并粘贴到在线形式的SSH_PRIVATE_KEY变量中时,它就会在Travis-CI上发生。它与----- BEGIN RSA PRIVATE KEY -----,----- END RSA PRIVATE KEY -----块前后的换行符有关。因此,我使用base64编码来确保密钥的格式正确。

尝试一下:

  • 对您的RSA私钥进行编码

    cat my_private_key | base64 -w0

  • 将base64字符串添加到您的项目变量中。

  • 在您的.gitlab-ci.yml中使用它
  

ssh-add <(回显“ $ SSH_PRIVATE_KEY” | base64 -d)

答案 2 :(得分:0)

您必须生成 RSA 密钥而不是 OPENSSH 密钥。使用参数 "-m PEM" (ssh-keygen -m PEM) 生成 RSA Key 将以 -----BEGIN RSA PRIVATE KEY----- 开始并以 -----END RSA PRIVATE KEY-- 结束---