如何在同一台电脑通过多个SSL密钥的方式绑定多个github账号
- 1. 1. 解决思路:
- 2. 2. 解决方案:
- 3. 3. 操作步骤:
- 3.1. Step 0:说明
- 3.2. Step 1:查看已有密钥
- 3.3. Step 2:删除本地 ~/.ssh/ 文件夹
- 3.4. Step 3:重新建立本地 ~/.ssh/ 文件夹
- 3.5. Step 4:在本地 ~/.ssh/ 文件夹内创建新密钥
- 3.6. Step 5: 将SSH密钥复制到剪贴板
- 3.7. Step 6: 在你的第一个Github账户中添加你的公钥
- 3.8. Step 7: 在 ~/.ssh/ 文件夹下新建 config 文件并编辑
- 3.9. Setp 8: 测试SSH密钥是否可用
- 3.10. Step 9: 再次生成一对新的密钥
- 3.11. Step 10: 执行ssh-agent让ssh识别新的私钥
- 3.12. Step 11:向您的第二个GitHub帐户添加新的SSH密钥
- 3.13. Step 12: 编辑config文件
- 3.14. Step13: 测试这两个SSH链接
- 3.15. Step 14: 取消全局 用户名/邮箱设置,后续进入项目文件夹单独设置
- 3.16. Step 15: 将第一个GitHub中的项目 clone 到本地
- 3.17. Step 16: 以后在每个项目库,单独设置每个项目的用户名/邮箱
- 3.18. Step 17:git push 测试一下
- 3.19. Step 18: git clone 第二个Github库的项目,并单独设置该项目的用户名/邮箱
- 4. 4. 参考文章
- 5. 5. 迭代记录
有的时候我们可能想在自己的电脑上通过多个SSL密钥的方式操作多个github账号,比如私人的github与公司的github分开使用、给自己和老婆各自建立一个GitHub搭载的博客等。这时很多像我一样的小白可能就不知道该如何处理了。我在网上搜了不少相关教程,但是这些教程写的都不(我)够(太)详(笨)细(了),导致我走了很多弯路,花了2个晚上才彻底搞明白,现将我的设置过程复盘如下,我会尽量写的详(啰)细(嗦)点,供参考。
1. 解决思路:
ssh 方式链接到 Github,需要唯一的公钥,如果想同一台电脑绑定两个Github 帐号,需要两个条件:
- 能够生成两对 私钥/公钥
- push 时,可以区分两个账户,推送到相应的仓库
2. 解决方案:
- 生成 私钥/公钥 时,密钥文件命名 避免重复
- 设置不同 Host 对应同一 HostName 但密钥不同
- 取消 git全局 用户名/邮箱 设置,为每个仓库独立设置 用户名/邮箱
3. 操作步骤:
Step 0:说明
由于我已经有了一个gitHub账号,本地也已经有一对 ssh的 私钥/公钥了。然后我在没完全看懂网上教程的情况下,就直接开始设置了另一个ssh的 私钥/公钥,最后把本地文件搞的很混乱。无奈之下我就把~/.ssh/这个文件夹删除了。因此本操作相当于从0开始设置2个ssh的 私钥/公钥并与github库链接。如果想设置更多的ssh,也可以参考操作,方法都是一样的。
Step 1:查看已有密钥
Mac 下输入命令ls ~/.ssh/,看到类似 id_rsa(私钥)与 id_rsa_pub(公钥)的文档则说明已经有一对密钥。
Step 2:删除本地 ~/.ssh/ 文件夹
- 本地的 ~/.ssh/ 是隐藏的,如果你是macOS 10.12以上的系统,可以在文件夹下通过快捷键
Command + Shift + .,查看隐藏文件、文件夹,再按一次,恢复隐藏; 如果你是macOS 10.12以下的系统,可以通过如下两条命令来显示隐藏文件、文件夹,
true改为false则为隐藏文件。defaults write com.apple.finder AppleShowAllFiles -bool true;KillAll Finder顺便说一句:finder下使用
Command + Shift + G可以前往任何文件夹,包括隐藏文件夹。然后删除本地 ~/.ssh/ 文件夹。
在命令行输入
cat ~/.ssh/id_rsa.pub,如果出现/.ssh/id_rsa.pub: No such file or directory,则说明删除成功。
Step 3:重新建立本地 ~/.ssh/ 文件夹
终端输入如下命令
注意以下所有命令,如没有特殊说明则都是在终端进入~/.ssh/文件夹后执行的。
Step 4:在本地 ~/.ssh/ 文件夹内创建新密钥
通过命令cd .ssh进入本地~/.ssh/ 文件夹后,输入命令:
将your_email@example.com换成你的第一个github注册邮箱,如下所示:
这将按照你提供的邮箱地址,创建一对密钥
直接回车,则将密钥将按默认文件(id_rsa)进行存储。此时也可以输入特定的文件名,比如我上图中的kerzzi_rsa。接着,根据提示,你需要输入密码和确认密码。
输入完成之后,屏幕会显示如下信息:
|
|
因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent(ssh代理)中:
在终端执行ssh-add ~/.ssh/second_rsa
请将上述命令中的second_rsa替换为你的私钥文件的名称。然后提示会让你输入相应的passphrase(就是刚刚设置的密码)。
PS:这一步如果出现错误提示,请参考Step 10自行解决。
Step 5: 将SSH密钥复制到剪贴板
|
|
这样就将kerzzi_rsa.pub文件的内容复制到剪贴板上了。注意这里将kerzzi_rsa.pub换成你刚刚生成SSH秘钥时的文件名。(windows系统下命令貌似不一样,我没有去验证。)
提示:如果pbcopy不起作用,您可以找到隐藏的.ssh文件夹,在您喜欢的文本编辑器中打开该文件,并将其复制到剪贴板。
Step 6: 在你的第一个Github账户中添加你的公钥
然后按照下列操作:
- 登陆GitHub,进入Settings;
- 在左边菜单,点击”SSH and GPG Keys”;
- 点击”Add SSH key”按钮;
- 粘贴你的密钥到key输入框中,取个容易辨识的名字;
- 点击”Add Key”按钮;
- 到此,大功告成了。
详细操作请参考https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/
Step 7: 在 ~/.ssh/ 文件夹下新建 config 文件并编辑
在终端执行如下命令:
注意上述指令依然是在~/.ssh/ 文件夹下执行的。
将~/.ssh/config文件改为如下内容:
|
|
你可以将Host kerzzi.github.com这行换成你喜欢的别名,比如github01。注意将最后一行改为你自己在Step 4中取的文件名。
Setp 8: 测试SSH密钥是否可用
在终端执行如下命令:
如果你遇到如下警示(没有警示信息请直接跳至Step 9):
则在命令行输入如下指令(没有警示信息请直接跳至Step 9):
就可以解决了。注意将kerzzi_rsa换成你的文件名称。

然后再次执行ssh -T git@kerzzi.github.com,就可以看到成功信息了。
|
|
可以看到如下内容,说明已经建立密钥对了。
|
|
Step 9: 再次生成一对新的密钥
继续用ssh-keygen命令生成一组新的id_rsa_new和id_rsa_new.pub。
依然是在~/.ssh/文件夹下,在终端执行:
注意将second@163.com换成你地第二个gitHub注册邮箱。
参考 Step 4进行操作,比如我将存放私钥的文件名命名为second_rsa。然后按照要求输入密码。
Step 10: 执行ssh-agent让ssh识别新的私钥
因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent(ssh代理)中:
在终端执行ssh-add ~/.ssh/second_rsa
请将命令中的second_rsa替换为你的第二个私钥文件的名称。然后提示会让你输入相应的passphrase(就是刚刚设置的密码)。
PS:如果出现Could not open a connection to your authentication agent的错误,就试着用以下命令(如果没有出现该警告,请跳至Step 11):
|
|
再次出现如下警告(如果没有出现该警告,请跳至Step 11):
|
|
这里的“XXXX”是你的电脑用户名。
继续执行如下命令(如果没有出现该警告,请跳至Step 11), 输入相应的passphrase,如果有设置的话
|
|
Step 11:向您的第二个GitHub帐户添加新的SSH密钥
在终端执行pbcopy < ~/.ssh/second_rsa.pub,复制公钥信息。
然后请参考Step 6,向您的第二个GitHub帐户添加新的SSH密钥。
Step 12: 编辑config文件
在终端执行
将~/.ssh/config改为如下内容:
|
|
其规则就是:从上至下读取config的内容,在每个Host下寻找对应的私钥(kerzzi_rsa和second_rsa就是私钥)。
Step13: 测试这两个SSH链接
在终端分别执行如下命令,可以看到SSH链接是否成功!
那么如何分开使用这两个SSH呢?请继续阅读。
Step 14: 取消全局 用户名/邮箱设置,后续进入项目文件夹单独设置
执行如下命令,取消全局 用户名/邮箱 配置(如果已经设置了的话):
Step 15: 将第一个GitHub中的项目 clone 到本地
为了区分,建议你在本地建立2个文件夹,用于存放不同GitHub账户下的项目。
因此执行如下命令:
上述命令中,最后一条命令请改为你自己的真实项目。
Step 16: 以后在每个项目库,单独设置每个项目的用户名/邮箱
git clone以后,cd Kerzzi.github.io进入项目目录,执行如下命令单独设置该项目的用户名/邮箱。
请将上述2条命令的邮箱和用户名换成你的第一个Github对应的邮箱和用户名。
Step 17:git push 测试一下
然后随意修改下该项目的任意内容,然后执行如下命令:
应该可以看到git push成功。以后每次在该repo下提交更改,都会自动匹配相应的ssh-key了。
PS:如果最后一条git push命令不成功,就命令行进入项目目录,重建 origin
|
|
上述最后一条命令请换成你的真实项目链接。
Step 18: git clone 第二个Github库的项目,并单独设置该项目的用户名/邮箱
方法和Step 15、Step 16和Step 17一样,请参照执行。将邮箱和用户名换成你的第二个Github对应的邮箱和用户名即可。
然后修改该项目,并git push测试一下。
OK,大功告成。以后在每个项目库,单独设置每个项目的用户名/邮箱,即可自动识别对应的SSH,绑定到对应的Github库。你还可以参考上文继续绑定更多的github账号。
4. 参考文章
- 删除本地SSH并新建一个ssh
- Permission 0644 for /root/.ssh/id_rsa Are Too Open 解决办法
- 向您的GitHub帐户添加新的SSH密钥
- 生成一个新的SSH密钥并将其添加到ssh代理
- Git的多账号如何处理?
- 一台电脑绑定两个github帐号教程
- 同一客户端下使用多个git账号
5. 迭代记录
- 2017-09-09 首次发布。
- 随着认知的升级,主题文章可能在我的博客中进行更新。

我是柯子(Kerzzi),终生学习者,我的博客:https://kerzzi.github.io。欢迎关注我的微信公众号「叫我柯子就好」,与你分享关于实践的高频小套路。

