同篇文章以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中进行相同的修改即可.
完毕!