oynix

于无声处听惊雷,于无色处见繁花

如何在一个设备上配置多个git ssh key

ssh是访问GitHub仓库最常用的方式。

通过ssh-keygen命令可以生成ssh的密钥对,每次会生成两个文件,一个是id_rsa,一个是id_rsa.pub,当你尝试把公钥信息,即id_ras.pub中内容添加到多个GitHub账号后台时,会发现这样无法行得通,对于一个公钥,GitHub只允许存在于一个账号配置里,添加到第二个账号时,它便会提示已经存在。

但确实会存在这样的需求:我有多个GitHub账号,每个账号的用途可能不同,比如工作用的账号,个人用的账号,这样一来我就需要在同一个设备上访问两个账号下的仓库,而一个设备的ssh公钥只允许添加一次,这样就需要对ssh进行一些额外的配置。

当使用ssh协议通信时,如果没有额外指定配置信息,会使用默认的密钥对信息,即:

1
2
~/.ssh/id_rsa
~/.ssh/id_rsa.pub

而一个设备上可以存在的密钥对是没有数量限制的,所以,我们可以创建多个密钥对,例如额外再创建一个,注意这里不能用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
2
3
4
5
Host github2.com
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa2

其中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
2
3
4
5
6
7
8
9
10
11
Host github2.com
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa2

Host github3.com
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa3
------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2023/06/259f429ddfb0/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道