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

Posted

技术标签:

【中文标题】Gitlab - 无法通过 SSH 克隆,但 SSH 可以自己工作【英文标题】:Gitlab - unable to clone via SSH, but SSH works itself 【发布时间】:2021-11-21 10:43:42 【问题描述】:

我想要实现的是使用 SSH 从我的本地 gitlab 实例克隆到一个 repo,我所做的是:

    我在 gitlab 中创建了一个带有 SSH 密钥的用户 在项目中我添加了用户作为维护者,他也有管理员权限 我正在使用 myusername@address:git/name.git 进行克隆,它以 msg 结尾:
    fatal: 'git/name.git' does not appear to be a git repository
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.
    当我简单地使用 SSH 连接时,它似乎工作得非常好
ssh username@address
username@address's password:
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-118-generic x86_64)

我试图检查 gitlab 的 auth.log 但它是空的,顺便说一句,我正试图从 Windows 机器克隆。我在这里没有使用标准的 git 帐户,我希望用户必须使用自己的帐户进行克隆。通过http克隆工作正常。 你们能告诉我我在这里做错了什么或者我应该如何解决这个问题?

【问题讨论】:

尝试克隆 github 或 gitlab 存储库,以验证其他问题。 我刚刚做了,使用我的密钥和一些在 git@github.com 的 repo 进行了克隆...并且在那里运行良好。 你的gitlab是怎么安装的?在我看来,它的 SSH 代理没有在端口 22 上侦听 我可以通过 SSH 完美地连接到这台机器,使用我尝试使用 Git 的帐户。 我不怀疑——但这并不意味着 gitlab 正在侦听您期望的端口。另外 - 如果没有记错的话,它通常在登录时需要“git”用户 - 而不是你自己的用户。 【参考方案1】:

这里的第 3 项几乎可以肯定是你出错的地方:

我正在使用 myusername@address:git/name.git 进行克隆 ...

设置像 GitLab 这样的花哨系统的主要原因是您不要以自己的身份登录。相反,您以git@hostname 身份登录:事实上,每个 使用花哨设置的人都以这种方式登录,该设置允许多个用户在共享存储库上进行协作。然后底层操作系统处理存储库,其权限仅授予git 用户(或您选择的其他用户:在这种情况下,将git@ 替换为user@ 无处不在)。花哨的系统使用 ssh 的身份验证来确定谁以 git@host 的身份进入,查看 它自己的 权限表以查看谁对哪些存储库具有哪些权限,然后自行授予或拒绝权限,而无需操作系统完全参与其中。

因此,服务器上的所有存储库都不在任何人的用户工作区中。它们位于伪用户的主目录 (~git) 中,或者位于高级软件指定的其他位置。以您自己的身份登录服务器,您将无法访问存储库,因为它们归伪用户所有,因此操作系统本身将拒绝您的权限(至少对于写作:您可能能够阅读它们,当然在类似 Linux 的系统上,如果你有超级用户或 sudo 权限,你可以使用它来访问存储库以进行特殊的维护操作)。

如果您组织中的每个人都可以直接访问 ssh,那么您可以对存储库使用更简单且不那么花哨的基本组共享 Linux 模式。当然,这也缺少进行代码审查、提供受保护分支等的所有上层结构。你根本不需要 GitLab 或类似的东西。这使它使用起来更加愉快,但不太适合(或根本不适合)典型的公司环境——这就是为什么像 GitLab 这样的东西首先存在的原因。

请注意,当您通过 Web 服务器进入时,Web 服务器 位于您和操作系统之间。因此,您可能已经按照 GitLab 文档中的指示设置了 Web 服务器,并且 Web 服务器正在使用 GitLab 作为适当的伪用户。这将解释为什么您不能以自己的身份访问存储库。您必须设置伪用户(如 GitLab 文档中所述),然后使用已将公钥加载到伪中的 SSH 密钥对以 git(或您指定的任何伪用户)身份登录-user 的设置,以便它知道是你来敲伪用户的登录。

【讨论】:

以上是关于Gitlab - 无法通过 SSH 克隆,但 SSH 可以自己工作的主要内容,如果未能解决你的问题,请参考以下文章

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

通过SSH克隆远程仓库(GitLab)到本地

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

在 GitLab 中使用 SSH 进行 Git 克隆不起作用

GitLab 所有存储库 ssh 克隆 url 显示错误的路径

无法通过新 GitLab 容器上的 ssh 密钥进行身份验证