如何同时配置两个github账户

警告
本文最后更新于 2023-02-03,文中内容可能已过时,请谨慎使用。
注意
本文使用两个账户举例,事实上可以同时配置更多账户,操作步骤相同

我们首先使用下面的命令分别生成两对SSH密钥

ssh-keygen -t rsa -C "email1" -f "id_rsa_1"
ssh-keygen -t rsa -C "email2" -f "id_rsa_2"
  • -f用于指定用来保存密钥的文件名
  • -C用于添加注释(一般填自己绑定的邮箱)

账户1的公钥为id_rsa_1.pub,私钥为id_rsa_1 账户2的公钥为id_rsa_2.pub,私钥为id_rsa_2

复制对应的公钥,比如~/.ssh/id_rsa_1.pub,然后登录你的个人GitHub账户:

  • 转到Settings
  • 在左边的菜单中选择SSH and GPG keys
  • 点击New SSH key,输入一个合适的title,并把公钥粘贴在下面的方框中
  • 点击Add key,就完成了!

账户2的步骤同理!

SSH的配置文件在~/.ssh/config, 写入以下内容

# github
Host user_1_github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_1
 
Host user_2_github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_2

使用下面的命令测试第2步是否配置成功

ssh -T git@user_1_github.com
ssh -T git@user_2_github.com

输出的内容如下,说明第2步配置没问题!

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

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

上面的配置会要求ssh-agent:

  • 使用id_rsa_1作为任何使用git@user_1_github.comGit URL的密钥
  • 使用id_rsa_2作为任何使用git@user_2_github.comGit URL的密钥

这样,在克隆和关联远程仓库的时候要特别注意要修改原来的Git URL

比如账户1仓库的ssh地址之前是git@github.com:user_1/test.git,现在在关联仓库时需要修改为git@user_1_github.com:user_1/test.git,账户2的步骤同理

技巧
建议把常用的那个账户的Host设置为github.com,这样就能减少很多url的修改操作!

如果你不想第3步这么麻烦的修改url的话,还有一种办法。使用ssh-agent来保证使用特定的SSH密钥

这种方法不需要SSH配置规则。相反,我们手动确保在进行任何Git操作时,ssh-agent中只有相关的密钥。

ssh-agent bash # 建议先执行一下本命令
ssh-add -l # 显示当前的ssh-agent连接
ssh-add -D # 清空之前的ssh-agent连接
# 绑定你需要的密钥连接,比如你要使用账户1
ssh-add ~/.ssh/id_rsa_1

这样ssh-agent就将密钥映射到了工作的GitHub账户,不用繁琐的修改url


相关文章