# 在 macOS/Linux 上优雅使用个 GitHub 账户

# 问题背景

在日常开发中,我们可能会需要同时使用多个 GitHub 账户:

  • 个人账户用于开源项目和个人学习
  • 公司账户用于工作项目
  • 客户账户用于特定客户项目

传统的单账户配置无法满足这种需求,直接配置多个账户又会遇到密钥冲突的问题。 本文将介绍如何在 macOS/linux 上解决多GitHub账户的使用问题。

为了便于说明, 我们假设有两个账户github_a 和 github_b。当前使用的账户是github_a, 本地电脑上的ssh-key名称是id_ed25519。

现在需要支持github_b账户的使用,我们来动手配置一下吧。

# 步骤一 创建一个新的ssh key

打开终端,执行如下命令

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_b  -C "test@test.tech"

一路回车,最终在~/.ssh目录下会有两个新文件:

id_ed25519_b 和 id_ed25519_b.pub

命令里的id_ed25519_b和邮箱可以换成我们实际用的。

登录github-b的账户后台,在把id_ed25519_b.pub 添加到ssh key

此时就可以添加成功了,因为这是一个新的ssh key,在github那边不冲突了。

# 步骤二 设置ssh config

vi ~/.ssh/config ,添加如下内容

# github-a 账户(当前使用的)
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

# github-b 账户
Host github.com-b
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_b
  IdentitiesOnly yes

添加完成后,在终端执行如下命令验证下:

ssh -T git@github.com-b

正常的话会看到类似如下的内容:

Hi github-b! You've successfully authenticated, but GitHub does not provide shell access.

# 步骤三 使用github-b的仓库

假设在github-b下面有个仓库test-b,默认的ssh地址是:

git@github.com:github-b/test-b.git

把github.com换成github.com-b(这里特别注意下),得到实际要clone的地址:

git@github.com-b:github-b/test-b.git

此时就能正常clone到本机了:

git clone git@github.com-b:github-b/test-b.git

之后在这个仓库下正常使用git命令,纵享丝滑。比如:

git pull
git push

github_a的仓库使用不受影响,继续用github.com地址。