如果自己用过github,或开源中国代码托管,或coding代码托管的人应该都有一种需求,需要准备多个ssh key,一个用作公司项目代码库的验证,一个用来自己其他项目代码库的验证,也许每一个代码托管平台分别对应一个ssh key。那么,问题就来了,如何保证key与要验证的代码库对应。比如:我需要默认的key:id_rsa来验证公司项目代码库,coding key来验证coding平台提供的代码库,oschina key来验证开源中国的代码托管。以上问题则是本文解决目标。
由于ssh默认使用id_rsa密钥去验证操作权限,当有多个ssh key时,需要一个配置文件来管理key与代码托管平台的访问映射关系。下面分两个步骤来阐述如何配置管理多个ssh key:生成两个key和管理配置。
生成KEY
生成key的命令如下:
ssh-keygen -t rsa -C comment -f outputfile
参数t指定生成key的类型,一般为RSA,默认也是该值;参数C则是为该key生成注释说明,通常说明该key的用途;参数f指定生成key的文件名,默认是id_rsa。
下面我们来生成两个key:id_rsa和coding。
ssh-keygen -C "key for project of company";
ssh-keygen -t rsa -C "key for coding.net" -f coding;
只有执行第一条命令生成默认名的key之后,才会在当前用户目录为生成.ssh目录(指定文件名无法生成该目录)。
执行完以上两条命令之后,.ssh目录下面将包含四个文件:id_rsa, id_rsa.pub, coding, coding.pub,带.pub后缀的文件为公钥,它们将被配置到代码托管平台。
管理配置
key生成之后,其配置包括两部分:将公钥配置到第三方代码托管平台和私钥访问配置。
- 公钥配置
以coding.net平台为例,进入其SSH公钥配置 页面,如下图,公钥名称可不填,公钥内容即上个步骤中生成的coding.pub文件的内容,将其拷贝至表单中,点击添加按钮即可。

- 私钥访问配置
我们先做个试验,验证一下是否可以访问。验证命令为:
ssh -T git@git.coding.net
结果如下:

下面指定具体的key来重新访问一下:

结合两次测试结果,我们知道因为在coding.net上配置的公钥是coding.pub,则理所当然,ssh访问的时候必须使用coding私钥校验,但是因为ssh默认使用id_rsa,所以必须使用参数i来指定私钥。那如果每次访问都要指定私钥,敲命令太麻烦了吧!是的,所以我们需要配置,在配置文件中指定key和平台的访问映射关系。
在.ssh目录下新建文件config,其内容如下,指定访问coding平台使用coding key。
Host git.coding.net
PreferredAuthentications publickey
IdentityFile ~/.ssh/coding
再次执行:ssh -T git@git.coding.net,不需指定命令,也可以成功访问。
至此,ssh多key的管理说完了,谢谢各位看官!请多多点评!