2

我有一个私有 gitlab 实例,在尝试通过 https 访问它时需要客户端身份验证。因此,myserver.com只有在 Web 浏览器中安装客户端证书时才会起作用。这对于常规使用来说不是问题,因为我只通过 SSH 使用 git。

但是,git LFS 似乎只支持 HTTPS。因此,当我尝试git push在使用 LFS 的项目中向服务器上传时,它只会尝试使用 HTTPS 上传,而且显然会失败。

git push gitlab mybranch
fatal: unable to access 'https://git.myserver.com/coolguy/my-software.git/': gnutls_handshake() failed: Handshake failed

这是我的遥控器的样子:

git remote -v
gitlab  git@git.myserver.com:coolguy/my-software (fetch)
gitlab  git@git.myserver.com:coolguy/my-software (push)

除了在没有 LFS 的情况下删除 git 历史记录和创建新的仓库(或重新配置我的服务器、使用 VPN 等)之外,在这种情况下我还能做些什么吗?git/lfs 是否支持 HTTPS 身份验证的客户端证书?我目前在本地机器上遇到了一个我无法git push在任何地方使用的私人分叉!

编辑:忽略以下内容,结果是一个错误的 apache 配置文件,与 git 和 gitlab 无关

我收到一个似乎与客户端身份验证无关的奇怪错误,可能是 LFS 错误:
git push gitlab mybranch
Remote "gitlab" does not support the LFS locking API. Consider disabling it with:
  $ git config lfs.https://git.myserver.com/coolguy/my-software.git/info/lfs.locksverify false
batch response: Post https://git.myserver.comcoolguy/my-software.git/info/lfs/objects/batch: dial tcp: lookup git.myserver.comcoolguy: no such host             
batch response: Post https://git.myserver.comcoolguy/my-software.git/info/lfs/objects/batch: dial tcp: lookup git.myserver.comcoolguy: no such host
batch response: Post https://git.myserver.comcoolguy/my-software.git/info/lfs/objects/batch: dial tcp: lookup git.myserver.comcoolguy: no such host
batch response: Post https://git.myserver.comcoolguy/my-software.git/info/lfs/objects/batch: dial tcp: lookup git.myserver.comcoolguy: no such host
batch response: Post https://git.myserver.comcoolguy/my-software.git/info/lfs/objects/batch: dial tcp: lookup git.myserver.comcoolguy: no such host
batch response: Post https://git.myserver.comcoolguy/my-software.git/info/lfs/objects/batch: dial tcp: lookup git.myserver.comcoolguy: no such host

请注意它是如何将 URL 用作git.myserver.comcoolguy而不是git.myserver.com/coolguygit.myserver.com:coolguy

谢谢

4

1 回答 1

2

Git LFS 最近在 3.0 中添加了对纯 SSH 协议的支持。但是,目前没有一个主要的伪造品支持它,因此您实际上仅限于通过 SSH 进行身份验证,然后通过 HTTPS 进行操作。

当您使用这种方法时,远程 URL 来自通过 SSH 的服务器。您可以从这个稍作修改的示例中看到这一点:

$ ssh git@github.com git-lfs-authenticate octocat/knife-sppon.git download
{
  "href": "https://lfs.github.com/octocat/knife-spoon",
  "header": {
    "Authorization": "RemoteAuth SECRET"
  },
  "expires_at": "2021-10-15T01:34:57Z",
  "expires_in": 599
}

如果那里的 URL 不正确,那么这可能是您的 URL 问题的原因。请注意,您可以通过GIT_TRACE=1在运行推送之前进行设置来查看通过 SSH 的确切调用,这将向您显示 Git LFS 正在调用什么。

Git LFS 确实支持 HTTPS 证书,就像 Git 一样。选项http.sslCerthttp.sslKey控制证书和密钥,您可以使用http.sslCAInfo. 这些也可以基于每个 URL 或每个 URL 模式进行设置;更多详细信息,请参阅git config --help

请注意,使用 Git LFS,密钥和证书需要采用 PKCS#1 格式;您不能使用 PKCS#8 或 PKCS#12 格式,因为 Git LFS 使用的 Go TLS 库无法以 Git LFS 需要的所有方式处理这些格式。

于 2021-10-15T01:36:07.960 回答