如何解决GitLab Runner CI 管道内的 SSH 连接无法验证主机密钥
我正在尝试在我的 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
,所以我不确定我目前的问题在哪里。
解决方法
我已将公钥作为部署密钥添加到我的 GitLab 存储库中。我将私钥作为名为 $GIT_SSH_PRIV_KEY
的受保护变量。
但是,作为 documented by GitLab,您必须使用 SSH_KNOWN_HOSTS
作为“Key
”创建新的 variable,并作为“值”添加 {{ 1}}(因为 error message is related to ~/.ssh/known_hosts
)。
ssh-keyscan
通过在 ## Use the domain name
ssh-keyscan example.com
## Or use an IP
ssh-keyscan 1.2.3.4
中直接使用变量而不是 ssh-keyscan,它的好处是,如果主机域名因某种原因发生变化,您不必更改 .gitlab-ci.yml
。
此外,这些值是由您预定义的,这意味着如果主机密钥突然更改,CI/CD 作业不会失败,因此服务器或网络有问题。
如评论所述,该变量必须用作 .gitlab-ci.yml
,而不是 "$SSH_KNOWN_HOSTS"
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。