GitLab Runner CI 管道内的 SSH 连接无法验证主机密钥
Posted
技术标签:
【中文标题】GitLab Runner CI 管道内的 SSH 连接无法验证主机密钥【英文标题】:SSH Connection Inside GitLab Runner CI Pipeline Not Able to Verify Host Key 【发布时间】:2021-04-13 13:16:13 【问题描述】:我正在尝试在我的 GitLab CI 管道中设置一个阶段,签出一个私有 GitLab 存储库,但我似乎无法让 SSH 身份验证工作。
在我的本地机器上,我创建了一个 SSH 私钥/公钥对。我使用本地计算机仅用于创建该密钥对,而不是将其用作服务器/GitLab 运行器。
我已将公钥作为部署密钥添加到我的 GitLab 存储库中。我将私钥作为一个名为$GIT_SSH_PRIV_KEY
的受保护变量。
下面的代码处于一个阶段,我现在只是在测试ssh -T git@gitlab.com
是否可以正确验证。
stage: git_merge
before_script:
- apt-get update -qq
- apt-get install openssh-client -qq
- eval $(ssh-agent -s)
- echo "$GIT_SSH_PRIV_KEY" | tr -d '\r' | ssh-add - > /dev/null
# - ssh-add <(echo "$GIT_SSH_PRIV_KEY")
- mkdir -p ~/.ssh && touch ~/.ssh/known_hosts
- echo $"SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- ssh -T git@gitlab.com
我在管道中收到的错误是Host Key verification failed
,所以我不确定我的问题目前在哪里。
【问题讨论】:
- echo $"SSH_KNOWN_HOSTS"
$ 和 "
的顺序错误。
【参考方案1】:
我已将公钥作为部署密钥添加到我的 GitLab 存储库中。我将私钥作为一个名为
$GIT_SSH_PRIV_KEY
的受保护变量。
但是,作为documented by GitLab,您必须将SSH_KNOWN_HOSTS
创建为“Key
”的新variable,并作为“值”添加ssh-keyscan
的输出(因为error message is related to ~/.ssh/known_hosts
) .
## Use the domain name
ssh-keyscan example.com
## Or use an IP
ssh-keyscan 1.2.3.4
通过在
.gitlab-ci.yml
中直接使用变量而不是 ssh-keyscan,它的好处是,如果主机域名因某种原因发生更改,您不必更改.gitlab-ci.yml
。 此外,这些值是您预定义的,这意味着如果主机密钥突然更改,CI/CD 作业不会失败,因此服务器或网络有问题。
如评论所述,该变量必须用作"$SSH_KNOWN_HOSTS"
,而不是$"SSH_KNOWN_HOSTS"
。
【讨论】:
以上是关于GitLab Runner CI 管道内的 SSH 连接无法验证主机密钥的主要内容,如果未能解决你的问题,请参考以下文章