我想要实现的是使用SSH从我的本地gitlab实例克隆到一个repo,我所做的是:
- 我已经创建了一个用户与一个SSH密钥gitlab
- 在项目中,我添加了一个用户作为维护者,他也有一个管理员权限
- 我克隆使用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克隆工作得很好。你们能告诉我我在这里做错了什么,或者我应该如何解决这个问题吗?
第三项几乎肯定是你错的地方:
设置一个像GitLab这样花哨的系统的主要原因是你不用以自己的身份登录。相反,您以我克隆使用myusername@address:git/name。git…
git@hostname
的身份登录:事实上,每个使用这种奇特设置的用户都以这种方式登录,这种设置允许多个用户在共享存储库上进行协作。然后底层操作系统处理存储库,其权限仅授予git
用户(或您选择的其他用户:在本例中,将所有地方的git@
替换为user@
)。这个奇特的系统使用ssh的身份验证来确定谁作为git@host
进入,在自己的权限表中查看谁对哪个存储库具有哪些权限,然后自己授予或拒绝权限,而无需操作系统参与。
因此,服务器上的任何存储库都不在任何人的用户工作区中。它们位于伪用户的主目录(~git
)中,或者由花哨的软件指定的其他地方。以您自己的身份登录服务器,您将无法访问存储库,因为它们由伪用户拥有,因此操作系统本身将拒绝您的权限(至少对于写入:您可能能够读取它们,当然,在类linux系统上,如果您拥有超级用户或sudo特权,您可以使用它来访问存储库进行特殊维护操作,例如)。
如果组织中的每个人都可以直接ssh访问,那么可以使用更简单、更简单的基本组共享Linux存储库模式。当然,这也缺乏进行代码审查、提供受保护分支等的所有上层结构。你根本不需要GitLab或任何类似的东西。这使得它使用起来更愉快,但是对于典型的公司设置来说不太合适(或者根本不合适)——这就是为什么像GitLab这样的东西首先存在的原因。
请注意,当您通过web服务器进入时,web服务器位于您和操作系统之间。因此,您可能已经按照GitLab文档中的指示设置了web服务器,并且web服务器使用GitLab作为适当的伪用户。这就解释了为什么您不能以自己的身份访问存储库。您必须设置伪用户(如您的GitLab文档中所述),然后以git
(或您指定的任何伪用户)的身份登录,使用SSH密钥对,其中公钥已加载到伪用户的设置中,以便它知道是您来敲伪用户的登录。