在同一Git主机上为不同帐户使用不同的SSH密钥

t5zmwmid  于 12个月前  发布在  Git
关注(0)|答案(4)|浏览(190)

如果我把这个问题作为一个用例来问,这个问题会很简单。
1.个人ID_RSA
1.公司_ID_RSA
我在bitbucket.org上有两个不同的用户帐户,一个是我的个人帐户,一个是我的公司帐户。我的PC上也有N个仓库。其中一些仓库必须与我的个人帐户关联,* 一些其他 * 仓库必须与公司帐户关联。没有仓库必须与两个帐户关联。我设置了Identityfile~/.ssh/config里面到类似下面的东西。

Host *.bitbucket.org
   IdentityFile ~/.ssh/company_id_rsa

字符串
每当我想把一些东西推到我的个人仓库,我改变配置文件如下。

Host *.bitbucket.org
   IdentityFile ~/.ssh/personal_id_rsa


现在,每当我想制作一个git push时,编辑文件就变得非常不方便。我只是在想,如果我能在飞行中拿起一个键,当我按下时,它会容易得多。有什么方法可以做到吗?
我遇到了this问题,它解释了一个类似的用例,但这不是这里的确切用例。

kulphzqa

kulphzqa1#

您可以在ssh配置文件中添加两个Bitbucket“帐户”。Bitbucket有替代的ssh主机监听端口443(对于那些几乎封锁了所有端口的人(原文如此!))。

Host bitbucketCompany
    User git
    HostName altssh.bitbucket.org
    Port 443
    IdentityFile ~/.ssh/company_id_rsa

Host bitbucketWork
    User git
    HostName bitbucket.org
    Port 22
    IdentityFile ~/.ssh/personal_id_rsa

字符串
然后在.git/config中更新你的远程设备
公司项目

[remote "origin"]
    url = ssh://bitbucketCompany/username/repo.git


个人项目

[remote "origin"]
    url = ssh://bitbucketPersonal/username/repo.git

ccgok5k5

ccgok5k52#

有两种方法。

  • Git会查询环境变量GIT_SSH来知道要使用哪个SSH客户端。如果没有设置,它会恢复到它的内置默认值(根据平台,IIRC,它只是sshssh.exe),所以你可以这样做:
$ cat >~/bin/bb-priv-ssh
#!/bin/sh
/usr/bin/ssh -i /path/to/my/private/ssh/key
^D
$ chmod +x $_
$ cat >~/bin/bb-corp-ssh
#!/bin/sh
/usr/bin/ssh -i /path/to/my/corporate/ssh/key
^D
$ chmod +x $_

字符串
现在你就能做到了

$ GIT_SSH=~/bin/bb-priv-ssh git push
$ GIT_SSH=~/bin/bb-corp-ssh git push


或只是

$ export GIT_SSH=~/bin/bb-priv-ssh


在开始一个你做私人工作的会议之前;"公司设置"将像这样设置,并进行明显的调整。
注意你不能只使用GIT_SSH='/usr/bin/ssh -i /path/to/a/key/file',因为Git希望这个变量只包含一个路径名。我现在懒得去谷歌搜索相关的comp.lang.version-control.git文章--如果需要的话,请自己去做。

  • 开始使用SSH key agent。然后你可以在其中添加两个密钥,它会在认证时尝试使用这两个密钥--一个失败,另一个成功。这会让一个不幸的主机的登录过程更长(多一轮认证往返),但在这种情况下,我认为,为了方便起见,这是一个合理的代价。
jjjwad0x

jjjwad0x3#

解决方案

我保留另一个答案为接受,因为这将我指向了correct solution, here。我从我的机器中删除了所有现有的密钥,并创建了两个全新的密钥,即personalidcompanyid

$ ssh-keygen -f ~/.ssh/personalid -C "My Personal SSH Key"
$ ssh-keygen -f ~/.ssh/companyid -C "My Company SSH Key"

字符串
之后,将两者都添加到bitbucket上的相应帐户。然后我创建了以下SSH config文件,一切都很顺利。由于 * 我没有任何必须同时推送到公司和个人帐户的存储库 *,这个解决方案不需要额外的黑客来使其工作。

Host github.com
  HostName github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/personalid

Host company
  HostName bitbucket.org
  IdentityFile ~/.ssh/companyid

Host personal
  HostName bitbucket.org
  IdentityFile ~/.ssh/personalid


当推送时,像你做的那样正常地做,git push <your stuff>,它会选择上传到bitbucket上的合适的密钥。

dbf7pr2w

dbf7pr2w4#

如果主机的名称相同,则git config文件应该如下所示:

# Set up SSH keys for personal and work projects
Host gitlab.com
    HostName gitlab.com
    User git
    AddKeysToAgent yes
    IdentitiesOnly yes

    # Personal projects
    Match User [email protected]
    IdentityFile ~/.ssh/id_ed25519
    # Work projects
    Match User [email protected]
    IdentityFile ~/.ssh/id_rsa

字符串
只需更改您的电子邮件和主机。此外,我有2个ssh密钥对创建2种不同的算法,但你不必。

相关问题