有的时候我们可能想在自己的电脑上通过多个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/ 文件夹
终端输入如下命令
mkdir .ssh
cd .ssh
注意以下所有命令,如没有特殊说明则都是在终端进入~/.ssh/
文件夹后执行的。
Step 4:在本地 ~/.ssh/ 文件夹内创建新密钥
通过命令cd .ssh
进入本地~/.ssh/
文件夹后,输入命令:
ssh-keygen -t rsa -C "your_email@example.com"
将your_email@example.com换成你的第一个github注册邮箱,如下所示:

这将按照你提供的邮箱地址,创建一对密钥
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
直接回车,则将密钥将按默认文件(id_rsa)进行存储。此时也可以输入特定的文件名,比如我上图中的kerzzi_rsa。接着,根据提示,你需要输入密码和确认密码。
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
输入完成之后,屏幕会显示如下信息:
Your identification has been saved in /c/Users/you/.ssh/github_rsa.
Your public key has been saved in /c/Users/you/.ssh/github_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent(ssh代理)中:
在终端执行ssh-add ~/.ssh/second_rsa
请将上述命令中的second_rsa
替换为你的私钥文件的名称。然后提示会让你输入相应的passphrase(就是刚刚设置的密码)。
PS:这一步如果出现错误提示,请参考Step 10自行解决。
Step 5: 将SSH密钥复制到剪贴板
pbcopy < ~/.ssh/kerzzi_rsa.pub
这样就将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 文件并编辑
在终端执行如下命令:
touch config
open config
注意上述指令依然是在~/.ssh/
文件夹下执行的。
将~/.ssh/config
文件改为如下内容:
# - - - kerzzi github (你的第一个github帐号)— — -
Host kerzzi.github.com
HostName github.com
User git
IdentityFile ~/.ssh/kerzzi_rsa
你可以将Host kerzzi.github.com
这行换成你喜欢的别名,比如github01
。注意将最后一行改为你自己在Step 4中取的文件名。
Setp 8: 测试SSH密钥是否可用
在终端执行如下命令:
ssh -T -i kerzzi_rsa git@github.com # 或者执行ssh -T git@kerzzi.github.com
如果你遇到如下警示(没有警示信息请直接跳至Step 9):
XXX ⮀ ~/.ssh ⮀ ssh -T git@kerzzi
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/XXX/.ssh/kerzzi_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/XXX/.ssh/kerzzi_rsa": bad permissions
Permission denied (publickey).
则在命令行输入如下指令(没有警示信息请直接跳至Step 9):
chmod 0600 kerzzi_rsa
就可以解决了。注意将kerzzi_rsa
换成你的文件名称。

然后再次执行ssh -T git@kerzzi.github.com
,就可以看到成功信息了。
ls ~/.ssh/
,可以看到如下内容,说明已经建立密钥对了。
config kerzzi_rsa kerzzi_rsa.pub known_hosts
Step 9: 再次生成一对新的密钥
继续用ssh-keygen命令生成一组新的id_rsa_new和id_rsa_new.pub。
依然是在~/.ssh/
文件夹下,在终端执行:
ssh-keygen -t rsa -C "second@163.com"
注意将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):
ssh-agent bash
ssh-add ~/.ssh/second_rsa
再次出现如下警告(如果没有出现该警告,请跳至Step 11):
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/XXXX/.ssh/second_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
这里的“XXXX”是你的电脑用户名。
继续执行如下命令(如果没有出现该警告,请跳至Step 11), 输入相应的passphrase,如果有设置的话
XXXX ⮀ ~/.ssh ⮀ chmod 0600 second_rsa
XXXX⮀ ~/.ssh ⮀ ssh-add ~/.ssh/second_rsa
Enter passphrase for /Users/XXXX/.ssh/second_rsa:
Identity added: /Users/XXXX/.ssh/second_rsa (/Users/XXXX/.ssh/second_rsa)
Step 11:向您的第二个GitHub帐户添加新的SSH密钥
在终端执行pbcopy < ~/.ssh/second_rsa.pub
,复制公钥信息。
然后请参考Step 6,向您的第二个GitHub帐户添加新的SSH密钥。
Step 12: 编辑config文件
在终端执行
open config
将~/.ssh/config
改为如下内容:
# - - - kerzzi github (你的第一个github帐号)— — -
Host kerzzi.github.com
HostName github.com
User git
IdentityFile ~/.ssh/kerzzi_rsa
# - - - second github(你的第二个github帐号)— — -
Host second.github.com #这个别名其实随便起,不一定要有.github.com
HostName github.com
User git
IdentityFile ~/.ssh/second_rsa
其规则就是:从上至下读取config的内容,在每个Host下寻找对应的私钥(kerzzi_rsa和second_rsa就是私钥)。
Step13: 测试这两个SSH链接
在终端分别执行如下命令,可以看到SSH链接是否成功!
ssh -T git@kerzzi.github.com #或者ssh -T -i kerzzi_rsa git@github.com
ssh -T git@second.github.com #或者ssh -T -i second_rsa git@github.com
# 即ssh -T git@+你的config中host名称
# Hi Kerzzi! You've successfully authenticated, but GitHub does not provide shell access.
# Hi second! You've successfully authenticated, but GitHub does not provide shell access.
# 出现上边这句,表示链接成功
那么如何分开使用这两个SSH呢?请继续阅读。
Step 14: 取消全局 用户名/邮箱设置,后续进入项目文件夹单独设置
执行如下命令,取消全局 用户名/邮箱 配置(如果已经设置了的话):
git config --global --unset user.name
git config --global --unset user.email
Step 15: 将第一个GitHub中的项目 clone 到本地
为了区分,建议你在本地建立2个文件夹,用于存放不同GitHub账户下的项目。
因此执行如下命令:
cd ~
mkdir first_github
mkdir second_github
cd first_github
git clone https://github.com/Kerzzi/Kerzzi.github.io.git
上述命令中,最后一条命令请改为你自己的真实项目。
Step 16: 以后在每个项目库,单独设置每个项目的用户名/邮箱
git clone
以后,cd Kerzzi.github.io
进入项目目录,执行如下命令单独设置该项目的用户名/邮箱。
git config user.email "kerzzi@outlook.com"
git config user.name "Kerzzi"
请将上述2条命令的邮箱和用户名换成你的第一个Github对应的邮箱和用户名。
Step 17:git push 测试一下
然后随意修改下该项目的任意内容,然后执行如下命令:
git add .
git commit -m "test git push"
git push origin master
应该可以看到git push成功。以后每次在该repo下提交更改,都会自动匹配相应的ssh-key了。
PS:如果最后一条git push命令不成功,就命令行进入项目目录,重建 origin
git remote rm origin
git remote add origin https://github.com/Kerzzi/Kerzzi.github.io.git
上述最后一条命令请换成你的真实项目链接。
Step 18: git clone 第二个Github库的项目,并单独设置该项目的用户名/邮箱
方法和Step 15、Step 16和Step 17一样,请参照执行。将邮箱和用户名换成你的第二个Github对应的邮箱和用户名即可。
cd ~
cd second_github
git clone https://github.com/second/second.github.io.git
cd second.github.io
git config user.email "kerzzi@outlook.com"
git config user.name "Kerzzi"
然后修改该项目,并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。欢迎关注我的微信公众号「叫我柯子就好」,与你分享关于实践的高频小套路。

网友评论