解决同一台电脑生成两份或多份ssh密钥、公钥映射两个或多个GitHub账号
需求描述
本人注册一个GitHub账户,用来分享本人自己的开源项目或者代码,同时,公司注册了一个GitHub账户,用来分享公司的开源项目。如果按照单个ssh公钥生成的方法则会把之前的公钥覆盖掉,这样将导致其中一方在下一次上传代码,本机和GitHub无法映射成功。
需求分析
解决这个问题首先要明确如何生成单个ssh公钥。
ssh生成单个公钥命令:ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
。如何生成ssh公钥
上述命令会在当前~/.ssh
目录下生成id_rsa
和id_rsa.pub
两个文件。其中id_rsa
是私钥文件,id_rsa_.pub
是公钥文件。
id_rsa
和id_rsa_.pub
文件都是通过一个邮箱号生成的,同一个公钥文件不可以配置两个不同GitHub账户(已测试)。
那么两个GitHub账户就需要两个不同的邮箱号,来生成两组不同的公钥文件。
解决方案
分别指定ssh公钥文件的名称即可。
命令:ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_example
示例:分别以791815567@qq.com和galaxysoft@sina.cn两个邮箱在~/.ssh
目录下生成两级不同的公钥文件。
791815567@qq.com邮箱:ssh-keygen -t rsa -C "791815567@qq.com" -f ~/.ssh/id_rsa_me
galaxysoft@sina.cn邮箱:ssh-keygen -t rsa -C "galaxysoft@sina.cn" -f ~/.ssh/id_rsa_galaxysoft
生成过程可参考如何生成单个ssh公钥 这篇文章。
执行完成后,会以~/.ssh
目录下看791815567@qq.com邮箱对应的私钥文件id_rsa_me
、公钥文件id_rsa_me.pub
和galaxysoft@sina.cn邮箱对应的私钥文件id_rsa_galaxysoft
、公钥文件id_rsa_galaxysoft.pub
分别在两个GitHub账户中添加对应的公钥信息即可,可参考如何生成单个ssh公钥 这篇文章
通过ssh-add添加密钥至ssh-agent中
命令:ssh-add ~/.ssh/id_rsa_example;
示例:添加本文中的两个密钥:ssh-add ~/.ssh/id_rsa_me; ssh-add ~/.ssh/id_rsa_galaxysoft;
添加config配置文件分别映射不同的GitHub账户
进入~/.ssh
目录,新建config
文件,并添加相应的内容:
# 个人的GitHub公钥
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_me # 指定特定的ssh私钥文件
# BitMan's GitHub
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_galaxysoft # 指定特定的ssh私钥文件
测试配置是否成功
测试命令:ssh -T git@github.com
如果出现如下信息,表示配置成功:
`Hi myNameIssls!` You've successfully authenticated, but GitHub does not provide shell access.
小提示:由于配置了两个GitHub的公、私钥映射信息,测试结果并不会把两个GitHub的信息都显示出来,只会显示第一个配置的映射成功信息。例如本例中只显示了Hi myNameIssls!
账户信息。