GITLAB CI错误加载密钥“/dev/fd/63”:格式无效错误:作业失败:退出代码1
Posted
技术标签:
【中文标题】GITLAB CI错误加载密钥“/dev/fd/63”:格式无效错误:作业失败:退出代码1【英文标题】:GITLAB CI Error loading key "/dev/fd/63": invalid format ERROR: Job failed: exit code 1 【发布时间】:2019-08-08 22:54:40 【问题描述】:这是我的代码 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'
##
## 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 使用带有镜像 ntfactory/ci-tool:0.0.2 的 Docker 执行器 ... 正在拉取 docker 镜像 ntfactory/ci-tool:0.0.2 ... 使用泊坞窗图像 sha256:7fe7b170806f6846271eec23b41c4f79202777f62c0d7a32165dc41722900979 对于 ntfactory/ci-tool:0.0.2 ... 通过 a732493b4b94 在 runner-sH47eTgb-project-11060727-concurrent-0 上运行... 克隆存储库... 克隆到“/builds/allence-tunisie/e-formation”... 将 0a6b48ef 签出为 feat/gitlab-ci... 跳过 Git 子模块设置 正在检查默认缓存... 未提供 URL,不会从共享缓存服务器下载缓存。相反,将提取本地版本的缓存。 成功提取缓存 $ 哪个 ssh 代理 || ( apt-get update -y && apt-get install 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
即使我尝试过 - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-添加 - > /dev/null 我得到这个错误
加载键“(stdin)”时出错:格式无效
【问题讨论】:
你能解决这个错误吗? 是的,实际上问题出在 ssh 密钥上 【参考方案1】:当$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
https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_15038961
【讨论】:
你从gitlab.com/gitlab-examples/ssh-private-key/issues/…这里复制了答案吗???如果是这样,您应该添加源... gitlab.com/gitlab-examples/ssh-private-key/-/issues/… 这对我有用。【参考方案2】:如果你已经保护了变量,那么你需要一个受保护的分支。正如变量设置中提到的那样 - “它们可以通过仅将它们暴露于受保护的分支或标签来保护。”
【讨论】:
你拯救了我的一天 :) 在我的情况下,我不小心从 main.js 创建了不受保护的标签。这失败了,因为我的变量受到保护。为了解决这个问题,我进入了设置 -> 存储库 -> 受保护的标签。 滚动过去但它为我解决了它!要检查是否发生这种情况,您还可以做一个简单的wc -c
检查,如果变量不可访问,它将显示长度 0。
这有很大帮助,甚至超过了公认的答案,tnx :)【参考方案3】:
您必须生成 RSA 密钥而不是 OPENSSH 密钥。使用参数 "-m PEM" (ssh-keygen -m PEM) 生成 RSA 密钥将以 -----BEGIN RSA PRIVATE KEY----- 开头并以 -----END RSA PRIVATE KEY-- 结尾---
【讨论】:
不,那不是真的。【参考方案4】:正如 GitLab 的错误跟踪器上的 this thread 中所述,将回车符 (\r
) 添加到变量(也称为“秘密”)时可能会出现问题。这可以通过管道到tr -d "\r"
来解决,以删除这些字符,保持 SSH 密钥的格式正确。
您的 CI 中的一个示例是:
ssh-add <(echo "$SSH_priv_key_b64" | base64 --decode | tr -d "\r")
请注意,要使用具有“屏蔽”和“保护”属性的 SSH 密钥,必须使用 base 64 编码。
【讨论】:
【参考方案5】:对我来说,我保护了分支和标签,然后我终于做到了,没有任何错误。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于GITLAB CI错误加载密钥“/dev/fd/63”:格式无效错误:作业失败:退出代码1的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Gitlab CI for android 中管理签名密钥库
GitLab Runner CI 管道内的 SSH 连接无法验证主机密钥