同一 Git 托管上的不同帐户使用不同的 SSH 密钥

问题描述 投票:0回答:4

如果我把它作为一个用例来问,这个问题会很简单。我的计算机上有两个 SSH 密钥

  1. 个人id_rsa
  2. company_id_rsa

我在 bitbucket.org 上有两个不同的用户帐户。其中一个是我的个人帐户,另一个是我的公司帐户。我的 PC 上也有 N 个存储库。其中一些必须与我的个人帐户链接,而其他一些存储库必须与公司帐户链接。没有必须链接到这两个帐户的存储库。我已将 ~/.ssh/config 内的

Identityfile
设置为如下所示。

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

每当我想将某些内容推送到我的个人存储库时,我都会将配置文件更改为如下所示。

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

而现在,每当我想要制作

git push
时,编辑文件就变得相当不便。我只是在想,如果我可以即时拿起其中一个钥匙,当我push时,事情会容易得多。有什么办法可以做到吗?

我遇到了this问题,它解释了类似的用例,但这不是这里的确切用例。

git ssh bitbucket
4个回答
11
投票

您可以在 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

2
投票

两种方式。

  • Git 查阅环境变量

    GIT_SSH
    来了解要使用哪个 SSH 客户端。如果未设置,它将恢复为内置默认值(只是
    ssh
    ssh.exe
    ,具体取决于平台,IIRC),因此您可以执行以下操作:

    $ 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 密钥代理。然后,您可以向其中添加两个密钥,它会在身份验证时尝试使用这两个密钥 - 一个会失败,另一个会成功。对于不幸的主机来说,这会使登录过程变得更长(又一轮身份验证往返),但在这种情况下,我认为,为了方便而付出的代价是合理的。


2
投票

解决方案

我将其他答案保留为已接受的,因为这向我指出了正确的解决方案,在这里。我从机器中删除了所有现有密钥并创建了两个全新的密钥,即

personalid
companyid

$ 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 上的适当密钥。


0
投票

你的 git 配置文件应该是这样的,更改你的邮件和主机:

# 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
© www.soinside.com 2019 - 2024. All rights reserved.