在 gitlab 中使用 ssh 进行克隆/拉取/推送问题(创建 http 客户端时出错:找不到 cafile '':找不到 cafile)

Posted

技术标签:

【中文标题】在 gitlab 中使用 ssh 进行克隆/拉取/推送问题(创建 http 客户端时出错:找不到 cafile \'\':找不到 cafile)【英文标题】:Clone/pull/push with ssh problem in gitlab (Error creating http client: cannot find cafile '': cafile not found)在 gitlab 中使用 ssh 进行克隆/拉取/推送问题(创建 http 客户端时出错:找不到 cafile '':找不到 cafile) 【发布时间】:2021-11-19 11:56:15 【问题描述】:

我在使用 Gitlab 时遇到了一个新问题。当我尝试拉取、推送克隆 gitlab 存储库甚至直接测试 ssh 连接(ssh mygitlabserver)时,我收到了错误消息:

remote: Error creating http client: cannot find cafile '': cafile not found

我真的不明白后台可能会发生什么。没有其他用户有同样的问题,我在全球范围内都在经历这意味着无论我尝试什么机器。

还有 http 克隆,push 工作正常。 我也试过git config --global http.sslverify false,然后是'export GIT_SSL_NO_VERIFY=true,但没有效果。我还对 CI/CD 集成进行了一些试验。

有人知道如何调试或了解问题可能是什么吗?

【问题讨论】:

【参考方案1】:

这很可能是由于缺少证书文件而导致的服务器端错误。追溯错误表明,使用 Gitlab 中为该用户设置的 SSH 密钥正确建立了 SSH 连接。您看到的输出是由强制命令(属于密钥)生成的,该命令试图为此经过身份验证的用户打开 gitlab-shell:

/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-XXX

此过程失败,因为它无法创建 HTTP 客户端,因为缺少证书文件。

在我的情况下,解决这个错误的方法是将证书文件的路径直接添加到 gitlab.rb 配置文件中:

gitlab_shell['http_settings'] =  ca_file: '/path/to/cert.pem' 

不要忘记运行 gitlab-ctl reconfigure 以应用更改。

【讨论】:

【参考方案2】:

对于不知道使用哪个证书的人,Gitlab 附带了一个嵌入式 cacert 文件,地址为 /opt/gitlab/embedded/ssl/certs/cacert.pem

gitlab_shell['http_settings'] =  ca_path: '/opt/gitlab/embedded/ssl/certs', ca_file: '/opt/gitlab/embedded/ssl/certs/cacert.pem' 

(使用嵌入式 Gitlab cacert 文件)。

在运行gitlab-ctl reconfigure 之后一切都恢复正常了。

【讨论】:

以上是关于在 gitlab 中使用 ssh 进行克隆/拉取/推送问题(创建 http 客户端时出错:找不到 cafile '':找不到 cafile)的主要内容,如果未能解决你的问题,请参考以下文章

GitLab--不支持ssh时通过http实现免密

Gitlab - 无法通过 SSH 克隆,但 SSH 可以自己工作

如何为 Gitlab 运行器启用通过 SSH 克隆?

GitLab ssh over cloudflare 和代理

如何从 gitlab 中提取项目? [复制]

jenkins配置凭证使用ssh密钥方式拉取gitlab代码