自己由于工作和个人原因要经常使用GitHub和GitLab,GitHub下还有多个账号,多平台多账号来回切换很麻烦,平常使用SSH协议访问代码仓库比较多,有没有什么好办法来解决来回切换问题,提升工作效率呢?下面来具体分析,找到解决办法
使用SSH协议来访问代码仓库
需要经过两步
- 信任远程主机(对应于
known_hosts
文件,类似于Https证书) - 在远程主机上配置由客户端生成的公钥(对应于
id_rsa.pub
文件)
信任远程主机
- 上图的意思是说,无法确认
github.com(13.229.188.59)
主机的真实性,它的的公钥指纹是nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8
,问问你还要不要继续连接 - 首先要弄明白
公钥指纹
是什么鬼,非对称加密会生成一个私钥和一个公钥,然而公钥一般比较长(具体取决于公钥长度位数
),不易用来比对,为了方便和简化别人来比对,对公钥进行MD5计算,生成一个相对较短的指纹
,再进行比对,就容易很多 - 那我们怎么来知道远程主机的公钥指纹,然后进行比对呢。拿GitHub来举栗,可以访问github-s-ssh-key-fingerprints这个地址得知,发现
公钥指纹
一致,证明github.com(13.229.188.59)
这个远程主机真实可信,可以继续和它进行连接
经过这一步后可以去查看known_hosts
文件(MAC环境在~/.ssh
目录下),可以发现github.com(13.229.188.59)
的公钥已经写入到文件中,主机的真实性现在已经得到了确认,下次就不会再有警告
- 如果仔细看了上面的几个步骤,并自己实践了的话,发现我们还是没有权限通过
SSH协议
去访问相应的仓库。我们已经信任了远程主机,但是远程主机还没有信任我们,换句话说远程主机还没有确认我们的身份,是不是平台的用户呀?(还不赶紧去注册一个!)假如现在注册好了GitHub账号,加入了组织,但是也没提示我们输入用户名和密码,原来像GitHub和GitLab这样的代码托管平台使用SSH时默认采用的是公钥登录
方式
SSH协议公钥登录
SSH协议其实是支持用户名和密码登录的,也支持公钥登录
,GitHub和GitLab默认采用的是公钥登录
这种方式,何为公钥登录
?详细的可以看这篇博文
- 每次输入用户名和密码非常不方便,严重影响我们的工作效率,尤其每天有个100次提交(夸张手法),输一百次用户名和密码要吐
公钥登录
安全,不会泄露自己的用户名和密码,只需要把自己本地生成的公钥给到平台,就是哥哥你别把私钥给别人(把你的比特币加密私钥给我还是可以的)公钥登录
方便,一经配置,用到天荒地老 优点讲了这么多,下面来看看怎么操作吧。大家看这篇文章就可以了(generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent),不多说
多平台和平台多账号配置SSH协议公钥登录
我们现在已经实现了一个平台下单个账号的公钥登录
,还剩两个,多平台
和平台多账号
的公钥登录
配置
多平台公钥登录
其实原理很简单,不同的平台host地址肯定是不同的,比如github.com,13.229.188.59
和git.coding.net,123.59.82.236
,那么我们只要为不同的host地址生成各自的公私钥对,然后在公钥登录
的时候使用相应的公私钥对。SSH协议本身也支持这种方式,只需要在~/.ssh
目录下创建config
文件,然后配置host对应的公私钥对文件
- 为不同host生成公私钥对
- 为不同的host配置不同的公私钥对
单平台多账号公钥登录
可以为不同的host配置不同的公私钥对以实现公钥登录
,通过上面的配置我们可以发现,SSH协议其实是根据主机地址来路由到不同的公私钥对文件的,那如果是相同主机地址多个账号(单平台多账号)该怎么办?主要思想还是通过配置不同的主机地址来实现,既然SSH协议是在本地通过config
文件中配置的信息来读取不同的公私钥对文件,那么我们只要为不同的账号配置不同的主机地址就可以了
访问远程仓库的时候要修改为本地config
文件中配置的Host
名字