GitLab 运行程序为子模块获取“主机密钥验证失败”

时间:2021-01-12 09:05:30

标签: git ssh gitlab gitlab-ci ssh-keys

我面临以下问题:
我正在尝试配置 GitLab CI pipline (shell)。
我的存储库包含两个子模块。
两个子模块与包含它们的超级存储库位于同一 GitLab 服务器上。
克隆是 SSH 克隆,我在本地配置了密钥,并将我的密钥添加到 GitLab。
在安装了 runner 的机器上,我可以克隆所有内容,包括子模块。
但是,当运行程序尝试克隆时,它返回“主机密钥验证失败”,但仅限于子模块。
我已经尝试使用自己的用户和我的用户配置运行器:

sudo gitlab-runner install --user=<user> 

没有效果。
最让我困惑的是,错误仅针对子模块,即使它们与包含它们的超级存储库在同一台服务器上,并且可以毫无问题地克隆超级存储库(当我关闭子模块递归变量时) yml 文件):

GIT_SUBMODULE_STRATEGY: recursive

但是当然我没有子模块。
如果您对检查或尝试的内容有任何建议,我将不胜感激!

1 个答案:

答案 0 :(得分:3)

“主机密钥验证失败”是关于 机器 密钥(~/.ssh/known_hosts 中列出的那些),而不是您的 gitlab 密钥。

例如:如果初始 git clone 与更新子模块的用户不同,则它们没有相同的 ~/.ssh/known_hosts 文件,并且 ssh 命令可以用于第一个用户没有错误,第二个失败。


干净的修复方法是:将您知道正确的主机密钥复制到预期的 known_host 文件中。

参见例如 ssh use known_hosts other than $HOME/.ssh/known_hosts :

# use a 'known_hosts' file with the host key of your git server
GIT_SSH_COMMAND=`ssh -o UserKnownHostsFile=<some provisioned known_hosts file>`

几乎每个人都使用的解决方法是:关闭主机密钥验证。

# for example : set the GIT_SSH_COMMAND environment variable
GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no'