美文网首页千字文实战我用 Linux互联网科技
如何在同一台电脑通过多个SSL密钥的方式绑定多个github账号

如何在同一台电脑通过多个SSL密钥的方式绑定多个github账号

作者: Kerzzi | 来源:发表于2017-09-09 23:17 被阅读147次

有的时候我们可能想在自己的电脑上通过多个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. 参考文章

  1. 删除本地SSH并新建一个ssh
  2. Permission 0644 for /root/.ssh/id_rsa Are Too Open 解决办法
  3. 向您的GitHub帐户添加新的SSH密钥
  4. 生成一个新的SSH密钥并将其添加到ssh代理
  5. Git的多账号如何处理?
  6. 一台电脑绑定两个github帐号教程
  7. 同一客户端下使用多个git账号

5. 迭代记录

  • 2017-09-09 首次发布。
  • 随着认知的升级,主题文章可能在我的博客中进行更新。

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

相关文章

网友评论

  • b201c4361c68:非常感谢博主,写的很清晰,步骤也很详细
    Kerzzi:@lvjiazhen 不客气

本文标题:如何在同一台电脑通过多个SSL密钥的方式绑定多个github账号

本文链接:https://www.haomeiwen.com/subject/dkaajxtx.html