加载密钥“(stdin)”时出错:格式无效的Gitlab CI

时间:2019-12-05 14:36:47

标签: ssh continuous-integration gitlab yaml

这是我有关gitlab ci的ssh的yaml文件的一部分:

eval $(ssh-agent -s)
echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
mkdir -p ~/.ssh
chmod 700 ~/.ssh
'[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

当我尝试将SSH_PRIVATE_KEY变量设置为受保护状态时,发生错误:

  

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

而且我不知道为什么将SSH_PRIVATE_KEY变量设置为不受保护的状态时会没事

4 个答案:

答案 0 :(得分:2)

对我来说,它也失败了,因为SSH_PRIVATE_KEY被标记为“受保护”,但我使用的标签却没有。

因此,使您正在使用的分支或标签也受保护,或从SSH_PRIVATE_KEY变量中删除“受保护”设置。

请参阅:https://gitlab.com/help/ci/variables/README#create-a-custom-variable-in-the-ui

保护变量(可选):如果选中,则该变量将仅在在受保护的分支或标签上运行的管道中可用。

答案 1 :(得分:0)

这是因为您将SSH_PRIVATE_KEY设置为格式错误的状态。我的建议是在变量中使用base64编码的值

cat ~/.ssh/id_ras | base64 -w0

将此值添加到gitlab ci变量中,然后在gitlab.ci.yml中

ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 -d)

答案 2 :(得分:0)

这个问题也可能是因为您创建了 4096 位密钥。由于某种原因,这在管道中失败了。

确保创建 2048 或使用 file 作为变量类型。

答案 3 :(得分:0)

设置 > CI/CD > 变量

  1. 确保您的 SSH_PRIVATE_KEY 是文件类型。
  2. 检查您是否正在使用 TAGS,如果没有...检查文件是否被标记为受保护,取消选中。
  3. 如果您从 CAT 复制粘贴,请确保在最后一行之后有一个空行。只需按回车:

-----结束...私钥-----