Gitlab - 无法通过 SSH 克隆,但 SSH 可以自行运行

Gitlab - unable to clone via SSH, but SSH works itself

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

  1. 我在 gitlab
  2. 中使用 SSH 密钥创建了一个用户
  3. 我在项目中添加了维护者用户,他也有管理员权限
  4. 我正在使用 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.
  1. 当我简单地使用 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 克隆工作正常。 你们能告诉我我在这里做错了什么或者我应该如何解决这个问题吗?

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

I'm cloning using myusername@address:git/name.git ...

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

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

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

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