0%

GitHub 一个邮箱管理多个SSH Key

SSH 密钥对总是成双出现的,一把公钥,一把私钥。公钥可以自由的放在您所需要连接的 SSH 服务器上,而私钥必须稳妥的保管好。所谓”公钥登录”,原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。这样子,我们即可保证了整个登录过程的安全,也不会受到中间人攻击。

Github下使用多个SSH Key

如果有多个github帐号,当尝试将pc的ssh-key依次加入到不同的github帐号进行commit的时候,会添加失败,提示:

Key is already in use。

SSH公钥使用时相当于用户名密码,不可能两个不同的帐号使用同一个用户名密码。要想在多个GitHub帐号上添加公钥,就要在本地生成多个SSH Keys,每个GitHub帐号对应一个不同的SSH Keys。

一个github帐号下,存在多个 Organization,需要生成多个 SSH Key 进行管理

生成SSH Key

生成SSH Key方法:

ssh-keygen -t rsa -C "mailname1@xxx.com"  

上面这个email地址就是你在github上注册该账号时使用的email,系统会提示你,
是否将key保存在 /.ssh/id_rsa 这个文件中,
如果这是你第一次生成SSH KEY,并且也你也只有一个账号,那么就可以存储到这个默认的位置,
如果有多个账号的话,建议保存为
/.ssh/id_rsa_xxx,方便以后识别。

同一个 email 生成两个 SSH Key 如下:

.
├── config
├── id_rsa
├── id_rsa_breezetempleio
├── id_rsa_breezetempleio.pub
├── id_rsa.pub
└── known_hosts

SSH Key config文件

当生成了N个账号的SSH KEY并保存到相应的文件中时,在~/.ssh文件夹下建立一个 config 文件,
该文件用来指明,当使用某个账号时对应使用哪个SSH KEY

Host github.com                                                               
    Hostname ssh.github.com                                                   
    Port 443                                                                  
    User git                                                                  
    IdentityFile ~/.ssh/id_rsa                                                

Host BreezeTempleIO.com         # ssh别名,随意取
    Hostname ssh.github.com     # 主机名                             
    Port 443                    # SSH端口号                                      
    User git                    # 用户                                   
    IdentityFile ~/.ssh/id_rsa_breezetempleio       

验证

当完成 SSH Key 配置之后通过如下命令验证是否可以用公钥访问:

ssh -T git@**github.com**
ssh -T git@**BreezeTempleIO.com**

@ 之后的值取自上述 config 文件中的 Host

验证成功提示如下:

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

修改具体项目的config文件

在push前,我们还需要修改下该项目.git文件夹下的配置文件config:

url = git@github.com:breezetemple/breezetemple.github.com.git
url = BreezeTempleIO.com:breezetemple/breezetemple.github.com.git

BreezeTempleIO.comconfig host设置是对应的。
很显然,我们需要引导它去读取正确的私钥去和服务端保存的公钥匹配。

Ref

  1. Multiple SSH Keys settings for different github account
  2. 管理多个SSH Key以支持多个Git账号
  3. Github下使用多个SSH Key