ssh是访问GitHub仓库最常用的方式。
通过ssh-keygen
命令可以生成ssh的密钥对,每次会生成两个文件,一个是id_rsa
,一个是id_rsa.pub
,当你尝试把公钥信息,即id_ras.pub
中内容添加到多个GitHub账号后台时,会发现这样无法行得通,对于一个公钥,GitHub只允许存在于一个账号配置里,添加到第二个账号时,它便会提示已经存在。
但确实会存在这样的需求:我有多个GitHub账号,每个账号的用途可能不同,比如工作用的账号,个人用的账号,这样一来我就需要在同一个设备上访问两个账号下的仓库,而一个设备的ssh公钥只允许添加一次,这样就需要对ssh进行一些额外的配置。
当使用ssh协议通信时,如果没有额外指定配置信息,会使用默认的密钥对信息,即:
1 | ~/.ssh/id_rsa |
而一个设备上可以存在的密钥对是没有数量限制的,所以,我们可以创建多个密钥对,例如额外再创建一个,注意这里不能用id_rsa命名,因为已经存在了,需要用其他的名字,一般在后面加数字即可:
1 | ssh-keygen -t rsa -C 'your_email@host.com' -f '~/.ssh/id_rsa2' |
ssh-keygen命令参数说明:
- t:type,密钥对类型,默认是rsa,可以省略
- C:comment,注释说明,一般写邮箱即可
- f:file,目标位置,一般放在
~/.ssh
路径下
然后,再增加ssh的配置,让一些地址的访问使用id_rsa2,而不是默认的id_rsa。在~/.ssh
下创建一个名为config的文件,向里面添加这几行内容:
1 | Host github2.com |
其中Host指的是我们访问的地址中的Host,而HostName则是真正去请求的地址,User和Port不用说了,IdentityFile则是这次请求中要使用的密钥对文件。其中,Host的值写什么都可以,只要和用的值匹配即可。
这个时候,当我们需要拉取使用id_rsa2配置文件的仓库时,仓库地址要修改一下,原地址如果是这样的:
1 | git clone git@github.com/oynix/repo.git |
那么新地址就是这样的:
1 | git cloen git@github2.com/oynix/repo.git |
可以注意到,只是替换了一个Host名而已。发起请求前,当检查到github2.com命中了ssh的配置项,那么就会使用config中的值。
当还有其他GitHub账号时,在config文件后面追加即可:
1 | Host github2.com |