公司项目和本人各有一个oschina的账户,因此需要配置对其分别进行关联,以期达到同时在git上使用并互不干扰的效果。
一、生成两个SSH-Key
分别使用如下命令生成两个SSH-Key:
ssh-keygen -t rsa -f ~/.ssh/id_rsa -C "oneemail@xxx.com"
ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "twoemail@xxx.com"
如下图:
生成的文件保存在 C:\Users\18708\.ssh 中:
二、 把两个公钥分别添加到对应的oschina账号中
三、在.ssh目录创建config文本文件并完成相关配置
每个账号单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性即可
HostName 这个是真实的域名地址
IdentityFile 这里是id_rsa的地址
PreferredAuthentications 配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
User 配置使用用户名
Host one.gitee.com
HostName git.oschina.net
IdentityFile C:\\Users\\18708\\.ssh\\id_rsa
PreferredAuthentications publickey
User onename
Host two.gitee.com
HostName git.oschina.net
IdentityFile C:\\Users\\18708\\.ssh\\id_rsa_x
PreferredAuthentications publickey
User twoname
或者配置文件写为以下内容(建议第一种):
Host one.git.oschina.net
HostName git.oschina.net
IdentityFile C:\\Users\\18708\\.ssh\\id_rsa
PreferredAuthentications publickey
User onename
Host two.git.oschina.net
HostName git.oschina.net
IdentityFile C:\\Users\\18708\\.ssh\\id_rsa_x
PreferredAuthentications publickey
User twoname
四、打开Git Bash执行测试命令测试
该步会自动在.ssh目录生成known_hosts文件把私钥配置进去。命令如下:
ssh -T git@one.gitee.com
ssh -T git@two.gitee.com
或者
ssh -T git@one.git.oschina.net
ssh -T git@two.git.oschina.net
五、分别clone两个账号的项目进行验证
git clone git@one.gitee.com:XXX/xxx.git
git clone git@two.gitee.com:XXX/xxx.git
或者
git clone git@one.git.oschina.net:XXX/xxx.git
git clone git@two.git.oschina.net:XXX/xxx.git
写在最后的原理分析:
1. ssh 客户端是通过类似 git@git.oschina.net:githubUserName/repName.git ** 的地址来识别使用本地的哪个私钥的,地址中的 User 是@前面的git, Host 是@后面的git.oschina.net;
2. 如果所有账号的 User 和 Host 都为 git 和 git.oschina.net,那么就只能使用一个私钥。所以要对User 和 Host 进行配置,让每个账号使用自己的 Host,每个 Host 的域名做 CNAME 解析到 git.oschina.net,如上面配置中的Host two.git.oschina.net;
3.配置了别名之后,新的地址就是git@two.git.oschina.net:githubUserName/repName.git**(在添加远程仓库时使用)。
这样 ssh 在连接时就可以区别不同的账号了。