使用需求

通常情况下,我们会有两个 github 账号:一个是公司的,另一个是私人的。由于 github 是使用 SSH key 的 fingerprint (对应的公钥id_rsa_pub)来判定你是哪个账户,而不是通过用户名,如果是在多台电脑上使用一个账号,可以为该账号添加多个 SSH key,如果是一台电脑使用多个账号,则分别生成多个 SSH key 添加到对应的账户即可。所以本文要实现的是公号和私号在 git 上同时使用,两者互不干扰。

步骤一:生成多个 SSH key

为了举例方便,这里使用 onetwo 两个账户。 使用cd ~/.ssh切换工作目录,然后使用如下命令生成两个钥匙,中间一路回车。

ssh-keygen -t rsa -f ~/.ssh/id_rsa_one -C "one@xxx.com"
ssh-keygen -t rsa -f ~/.ssh/id_rsa_two -C "two@xxx.com"

这样会在~/.ssh目录下生成四个文件:

id_rsa.one      //账号 one 的私钥
id_rsa.one.pub  //账号 one 的公钥
id_rsa.two
id_rsa.two.pub

步骤二:创建配置文件 config

在 ~/.ssh目录下新建 config 文件,令不同 Host 实际映射到同一 HostName,但密钥文件不同。根据自己情况修改account-oneaccount-nameaccount-twoaccountTwo-name的值。

# --- 第一个账号 ---
Host account-one    # 如:gorpeln
	HostName github.com
	User account-name  # 如:gorpeln
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/id_rsa_one
	UseKeychain yes
	AddKeysToAgent yes
# ----------------------------

# --- 第二个账号 ---
Host account-two    # 如:gorpelnTwo
	HostName github.com
	User accountTwo-name  # 如:gorpelnTwo
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/id_rsa_two
	UseKeychain yes
	AddKeysToAgent yes
# ----------------------------

步骤三:添加 SSH key 及 测试

分别登陆两个 github 账号,在 Settings —> SSH and GPG keys 中,点击 “new SSH key”,把 “id_rsa.one.pub” 和 “id_rsa.two.pub”这两个公钥的内容分别添加到相应的账号中。 为了确认我们可以通过 SSH 连接 github,可通过输入下面命令来验证

# 验证账号一
ssh -T git@gorpeln 
# 验证账号二
ssh -T git@gorpelnTwo

如果看到下面信息,就说明连接正常。

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

步骤四:用户名和邮箱配置

在第二步创建配置文件 config时,可以直接将account-oneaccount-name设置为你的主账号(账号一)名字,如我的GitHub账户名为gorpeln,你可以了通过https://github.com/gorpeln访问到我,则直接将account-oneaccount-name设置为gorpeln,则对于使用主账号(账号一)操作的git仓库,正常git pullgit push即可,不需要其他额外的操作。全局的用户名和邮箱可以直接配置为主账号(账号一)。

对于次账号(账号二)管理的项目则需要单独配置相应的账号和邮箱。

# 设置局部 用户名/邮箱 配置
git config user.name "xxxx"
git config user.email "xxxx@xx.com"

步骤五:使用 git

git 的使用一般是从其他仓库直接 clone 或本地新建,注意配置用户名和邮箱。

如果你步骤四:用户名和邮箱配置为主账号(账号一),那么该账号操作和配置第二个账号前的操作完全相同,没有任何变化,正常操作即可。

# 远程仓库地址为:git@github.com:gorpeln/repo.git
git clone git@github.com:gorpeln/repo.git

次账号(账号二 )操作项目

# 远程仓库地址为:git@github.com:gorpeln-two/repo.git
git clone git@gorpelnTwo:gorpeln-two/repo.git

如果你使用第三方图形工具操作,如Sourcetree,进行操作时,记得不要忘了远程仓库地址的修改。