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/id_rsa_xxx,方便以后识别。
如果这是你第一次生成SSH KEY,并且也你也只有一个账号,那么就可以存储到这个默认的位置,
如果有多个账号的话,建议保存为
同一个 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.com
和 config host
设置是对应的。
很显然,我们需要引导它去读取正确的私钥去和服务端保存的公钥匹配。