我遇到了一些麻烦,让两个不同的SSH密钥/GitHub帐户一起玩得很好。我有以下设置:

使用git@github.com:accountname从一个帐户访问回购

从另一个帐户使用git@github.com:另一个帐户访问回购

每个帐号都有自己的SSH密钥。两个SSH密钥都已经添加,我已经创建了一个配置文件。我不相信配置文件是正确的。我不太确定如何指定使用git@github.com:accountname访问的回购应该使用id_rsa和git@github.com:anotheraccount应该使用id_rsa_anotheraccount。


当前回答

我最近不得不这么做,不得不筛选所有这些答案和他们的评论,最终把信息拼凑在一起,所以我把它们都放在这里,在一个帖子里,为了你的方便:

步骤1:ssh密钥 创建任何你需要的键盘。在这个例子中,我将我的default/original命名为'id_rsa'(这是默认的),而我的新命名为'id_rsa-work':

ssh-keygen -t rsa -C "stefano@work.com"

步骤2:ssh config 通过创建/修改~/.ssh/config设置多个ssh配置文件。注意'Host'值略有不同:

# Default GitHub
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa

# Work GitHub
Host work.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_work

步骤3:ssh-add 你不一定要这么做。要检查,运行以下命令列出身份指纹:

$ ssh-add -l
2048 1f:1a:b8:69:cd:e3:ee:68:e1:c4:da:d8:96:7c:d0:6f stefano (RSA)
2048 6d:65:b9:3b:ff:9c:5a:54:1c:2f:6a:f7:44:03:84:3f stefano@work.com (RSA)

如果你的条目不在那里,那么运行:

ssh-add ~/.ssh/id_rsa_work

第四步:测试 为了测试你是否正确地做了这些,我建议你快速检查一下:

$ ssh -T git@github.com
Hi stefano! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git@work.github.com
Hi stefano! You've successfully authenticated, but GitHub does not provide shell access.

注意,你必须根据你想要使用的密钥/身份来改变主机名(github / work.github)。但是现在你应该可以出发了!:)

其他回答

一个可能比编辑ssh配置文件更简单的替代方案(正如所有其他答案所建议的那样)是配置一个单独的存储库来使用不同的(例如非默认的)ssh密钥。

在你想要使用不同键的存储库中,运行:

git config core.sshCommand 'ssh -i ~/.ssh/id_rsa_anotheraccount'

如果您的密钥是受密码保护的,并且您不想每次都输入密码,那么您必须将其添加到ssh-agent。下面是ubuntu和macOS的操作方法。

使用全局git配置和条件包含(参见示例),也可以将这种方法扩展到多个存储库。

我在github上有2个帐户,这是我所做的(在linux上)使它工作。

Keys

创建2对rsa密钥,通过ssh-keygen,正确命名它们,使生活更容易。 通过ssh-add path_to_private_key向本地代理添加私钥 对于每个github帐户,上传一个(不同的)公钥。


配置

~ / . ssh /配置

Host github-kc
    Hostname        github.com
    User git
    IdentityFile    ~/.ssh/github_rsa_kc.pub
    # LogLevel DEBUG3

Host github-abc
    Hostname        github.com
    User git
    IdentityFile    ~/.ssh/github_rsa_abc.pub
    # LogLevel DEBUG3

为repo设置远程url:

对于主机github-kc中的回购: Git远程设置-url来源git@github-kc:kuchaguangjie/pygtrans.git 对于主机github-abc中的回购: Git远程集-url来源git@github-abc:abcdefg/yyy.git


解释

~/.ssh/config中的选项:

Host github-<identify_specific_user> Host could be any value that could identify a host plus an account, it don't need to be a real host, e.g github-kc identify one of my account on github for my local laptop, When set remote url for a git repo, this is the value to put after git@, that's how a repo maps to a Host, e.g git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git [Following are sub options of Host] Hostname specify the actual hostname, just use github.com for github, User git the user is always git for github, IdentityFile specify key to use, just put the path the a public key, LogLevel specify log level to debug, if any issue, DEBUG3 gives the most detailed info.


我使用,

Host github.com
   HostName github.com
   IdentityFile ~/.ssh/github_rsa
   User abc@gmail.com

它运行得很好。

对于不同的用户名使用不同的rsa密钥,在.ssh/config文件中使用上述设置。

我在这里发布了处理这些问题的技巧

使用多个Git帐户和克隆而不做任何更改的最简单方法是将您的用户名添加到ssh配置中。

开放的~ / . ssh / config。如果一个人不存在,就去创造 添加主机条目,如下所示

Host github.com:<YOUR_GITHUB_USERNAME>
  AddKeysToAgent yes
  IdentityFile ~/.ssh/<YOUR_SSH_KEY_FILENAME>

将<YOUR_SSH_KEY_FILENAME>替换为您在。ssh文件夹中的密钥文件名(例如:id_ed25519)。 为每个要维护的github帐户添加一条主机记录。

现在git克隆将简单的git克隆github.com:<YOUR_GITHUB_USERNAME>/your-repo.git。克隆时不需要记住自定义gihub域;-)

做了一个主旨与进一步的信息https://gist.github.com/udantha/fed5439630eaf4651272f4fba6e1c6a3