为什么有这种需求?
在我们开发过程中,可能会遇到使用同一台机器,既要向公司git服务器提交代码,也要向gitlib或者gitee等
git仓库提交代码,2个仓库设置的用户名信息,不一样,此时需要用到多个ssh-key管理.主要包含以下几个步骤.
生成对应的私钥公钥
1. 生成github.com对应的私钥公钥
ssh-keygen -t rsa -C xxx@126.com -f ~/.ssh/github_rsa
**2. 同样的方式生产git.oschina.net的私钥公钥
ssh-keygen -t rsa -C xxx@163.com -f ~/.ssh/id_rsa_github
把上面得到的文件拷贝到git默认访问的.ssh目录(默认就存在当前登录用户文件夹.ssh目录)
如图所示
把github对应的公钥和oschina对应的公钥上传到服务器
在.ssh目录创建config文本文件并完成相关配置(最核心的地方)
每个账号单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性即可
Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:
Host mygithub 这样定义的话,命令如下,即git@后面紧跟的名字改为mygithub
git clone git@mygithub:cary/sample.git
HostName 这个是真实的域名地址
IdentityFile 这里是id_rsa的地址
PreferredAuthentications 配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
User 配置使用用户名
** config文件配置如下:**
#gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_oschina
User cary
#github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github
User cary
打开Git Bash客户端(管理员身份运行)执行测试命令测试是否配置成功(会自动在.ssh目录生成known_hosts文件把私钥配置进去)
**使用ssh -T 校验
ssh -T git@gitee.com
如果成功会显示如下:
Hi cary! You've successfully authenticated, but GITEE.COM does not provide shell access.