Gitlab中每个项目需要一个SSH密钥

8

我有一个问题,我不知道如何处理。

我在Gitlab中有两个仓库,RepoA和RepoB。我的Gitlab用户有3个SSH密钥,一个来自我的笔记本电脑,另外两个来自与这两个仓库一起工作的VM(VMA和VMB)。通过这种方式,我可以轻松地从VM和笔记本电脑中进行拉取和推送。

在RepoA中,我有一个共同协作者也在工作。他已经将RepoA分享给了他的Gitlab账户,并且他有访问VMA以推送和拉取代码。他永远不应该访问RepoB,所以我的问题就来了。如果他能够猜出RepoB的URL,他就可以在已经有访问权限的VMA上拉取并查看它,因为Gitlab没有一种粒度细致的方式添加每个项目的SSH密钥。我可能在这里错过了什么非常合理的东西,但我只是看不到。

我该如何使我的协作者在VMA上仅能够访问RepoA。

一个hack的方法是在Gitlab中生成第三个用户,仅处理VMA,并将VMA的SSH密钥引入Gitlab中的此用户帐户。但我相信肯定有更好、更干净的方法。


1
考虑在虚拟机上为协作者创建一个新的用户帐户,并让他拥有自己的密钥,只允许他访问GitLab上的repoA。 - sid-m
1
GitLab具有项目特定的SSH密钥功能:它们被称为“部署密钥”,您可以将其用于只读或读写访问。 - Robert
“部署密钥”是解决方案。我尝试过了,它有效。感谢@Robert。 - Simion Bogdan
2个回答

11
GitLab有项目特定的SSH密钥功能:
它们被称为“部署密钥”。您可以使用它们为一个或多个存储库提供只读或读写访问权限。请参考部署密钥文档了解更多信息。

好的,但是GitLab怎么知道要为哪个存储库使用哪个密钥呢?例如,如果我有3个存储库,每个都有一个单独的部署密钥,我只想克隆其中两个,或者只想向一个特定的存储库推送,是否可以在某个地方进行配置,比如在~/.ssh/config中,或者在特定的.git文件中配置,以指定与远程服务器通信时应使用哪个密钥? - Mikolaj Buchwald
@MikolajBuchwald 我在执行 git 命令之前会将要使用的密钥添加到 ssh 代理中:https://dev59.com/82455IYBdhLWcg3wD_sB#4565746 - Robert

0

还有这个功能:

为不同的代码库使用不同的密钥

您可以为每个代码库使用不同的密钥。

打开终端并运行此命令:

git config core.sshCommand "ssh -o IdentitiesOnly=yes -i ~/.ssh/private-key-filename-for-this-repository -F /dev/null"

这样做并不能实现让特定的SSH密钥访问GitLab上特定仓库的目标。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接