在 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 克隆,但 SSH 可以自己工作