Git使用两个用户名两个公钥链接同一个Git服务器

同篇文章以Gitee举例, 支持国产, 首先关联一下我的另外一篇文章: 

在码云上添加公钥时提示不允许重复添加(实际上当前公钥数为0)

在这篇文章中, 我后续有补充解释为什么会出现我之前没有弄明白的这个提示, 是因为时间间隔久远我用手机号和邮箱分别注册了一个gitee账户.

而我为了ssh方便, 自始至终保存了一套公钥私钥, 而她被用在了我之前注册的那个账号上, 于是在新的账号上提示不允许重复添加.

很容易理解, 她重复的作用域是整个gitee服务器.

要解决这个问题, 我势必要产生两套公钥私钥, 那么问题来了, 如何让他自动选择应该使用的那一套呢?

网上查了资料, 写一个ssh的config, 参考了这篇文章:

https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/

就是在.ssh文件夹下面新建一个config文件, 里面的格式大概这样:

Host server1
     HostName server1.cyberciti.biz
     User nixcraft
     Port 4242
     IdentityFile /nfs/shared/users/nixcraft/keys/server1/id_rsa

依葫芦画瓢搬过来目测不太好使, 因为他通篇介绍的是如何区别不同的服务器使用不同的密钥, 而没有介绍如何在同一个服务器使用不同的密钥.

然后我在GitHub上看到了另外一篇文章:

https://gist.github.com/jexchan/2351996

这个很符合我的胃口, 描述的是如何对同一个服务器使用两套密钥:

#account1
Host gitee.com-jerryqii
     HostName gitee.com
     User git
     IdentityFile ~/.ssh/id_rsa

#account2
Host gitee.com-jerryqi
     HostName gitee.com
     User git
     IdentityFile ~/.ssh/id_rsa1

然后在你的仓库设置远程地址:

git remote set-url origin git@gitee.com-jerryqi:jerryqi/nb.git

大喜, push成功了!

然而这也让我非常困惑, [git@gitee.com-jerryqi], 域名能够写成gitee.com-jerryqi这种格式的? 还带一个用户名? git的协议到底是怎样的?

StackExchange给了我答案, 请参考这篇文章:

https://superuser.com/questions/366649/ssh-config-same-host-but-different-keys-and-usernames

总结下来就是, 上面我提到的gitee.com-jerryqi并不是一个域名, 而是host的一个别名.

当没有config文件存在的时候, host的别名就是域名, 这个很好理解.

而当有config文件存在的时候, 他会通过host去找HostName以及IdentityFile.

上述造成我误解的原因还是在于我使用了[域名]-[用户名]的关系, 实际上他可以是任何名字, 只需要在config中进行相同的修改即可.

完毕!

 

posted @ 2019-10-23 10:36  齐建伟  阅读(836)  评论(0编辑  收藏  举报