一台Mac上使用两个Github账户的ssh-key

背景 & 问题

昨天突然想到一个tricks,需要有两个Github账户,所以我又去开了一个小号,在我把ssh-key添加进github-02账户的时候提示我这个ssh-key已经被使用了,不能再使用。后面搜索了一下发现,同一个ssh-key只能添加到一个Github账户中,所以需要找到一个解决方法来解决:一个电脑使用两个Github账户(或者说类似的Git账户)。

方法

0x01

生成新的ssh-key:

$ ssh-keygen -t rsa -C "your-email-address”

当提示输入名字的时候,输入新的文件名:id_rsa_2。这时 ~/.ssh/ 目录中应该有两个这几个文件:id_rsa, id_rsa.pub, id_rsa_2, id_rsa_2.pub

0x02

添加新的ssh-key到新的Github账户。

0x03

在本地添加ssh-key的配置文件,在 ~/.ssh/ 中的新建config文件,添加如下代码:

# 这个是为了已有的Github账户使用
Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa
# 这个是为了新的Github账户使用
Host <font color="red">alias_name</font>
HostName github.com
IdentityFile ~/.ssh/id_rsa_2

其中标红的部分是一个别名,可以随便起一个名字,在后面还会多次用到,所以用了红色标记。

0x04

将刚刚生成的ssh-key添加到ssh-agent:

$ ssh-add ~/.ssh/id_rsa_2

这个添加操作是 临时 的,也就是每次开机都需要使用这个命令,所以可以把这命令写入到.bashrc 或者 .zshrc 中,避免每次都做相同的工作。

0x05

测试是否能连通:

$ ssh -T git@github.com

Hi your_name! You’ve successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git@alias_name

Hi your_second_name! You’ve successfully authenticated, but GitHub does not provide shell access.

有这样的输出表示和两个账户连接正常。

0x06

clone项目改动点,我们一般使用的以下命令来clone一个远程仓库:

$ git clone git@github.com:github_user_name/project_name.git

这个时候,对于Github账户2的项目,需要把红色部分替换为上文中的 alias_name,即这clone命令为:

$ git clone git@alias_name:github_user_name/project_name.git

对于已存在的git project,可能也需要通过下面的命令来从新设置远程的地址:

$ git remote set-url origin git@alias_name:github_user_name/project_name.git

现在已经就可以无感知的使用ssh方式push代码了。

总结

网上有不少写这个方法的文章,但是感觉都长得一样,而且流程不连贯,实际操作起来可能会脱节,导致不知道问题出在哪里,所以自己写了这篇,算是一个备忘吧。

2017.09.03 11:42