具有多个密钥的SSH配置,用于多个gitlab用户帐户

时间:2015-04-21 14:48:17

标签: git ssh gitlab

我在我的服务器上运行Gitlab CE并使用几个不同的用户帐户按兴趣分组我的回购。问题出在SSH上。

我为github找到了以下解决方案:

https://gist.github.com/jexchan/2351996

在本指南中,只需在配置中使用具有相同主机名的不同主机。这是实现我想要实现的目标的微不足道的努力。但是这个解决方案不适用于Gitlab,或者至少不适用于我。

此解决方案遍布整个网络。一个较少使用但正在为我工​​作的是这个:

https://gist.github.com/gubatron/d96594d982c5043be6d4

在第二个中,在ssh配置中将子域名称指定为具有相同主机名的主机,并在git config中使用相同的子域。 小例子:

SSH配置:

Host user1.git.mydomain.at
  HostName git.mydomain.at
  IdentityFile ~/.ssh/id_rsa_user1

Host user2.git.mydomain.at
  HostName git.mydomain.at
  IdentityFile ~/.ssh/id_rsa_user2

GIT中:

git remote set-url origin admin@user1.git.mydomain.at:user1/foo.git
git remote set-url origin admin@user2.git.mydomain.at:user2/foo.git

可以看出,我必须手动更改每个repo url。我想避免这种情况,并希望第一个解决方案。

我错过了重要的事情吗?

1 个答案:

答案 0 :(得分:0)

你需要两者。

假设:

  1. 用户名(不是电子邮件)分别为 user1 user2
  2. 您上传了足够的公开(即.pub)个键,其中相应的私钥为 user1_rsa user2_rsa < / LI>
  3. 服务器网址的格式为server.com(即 bitbucket.org 替代 server.com github.com 等等,然后~/.ssh/config应包含:

    Host server.com-user1
      HostName server.com
      User git
      IdentityFile ~/.ssh/user1_rsa
    
    Host server.com-user2
      HostName server.com
      User git
      IdentityFile ~/.ssh/user2_rsa
    
  4. II。在您的git目录中,假设您添加了一个名为origin的来源,并且位于名为domain的域中,并且项目名为project ,然后git remote -v应配置为返回如下内容:

    origin  git@server.com-user1:domain/project.git (fetch)
    origin  git@server.com-user1:domain/project.git (push)
    
    • 您可以通过使用git remote add origin git@bitbucket.org-user1:domain/project.git添加远程目录来获得此输出。关键是额外的 -user1 ,带有短划线,在两个文件中都匹配,并匹配您的用户名
    • 您也可以在事后编辑.git/config并手动添加 -user1