Git —— 关于创建多对非对称密钥时对不同服务器的匹配问题
《工欲善其事,必先利其器》—— 既然点进来了,麻烦你看下去,希望你有不一样的收获~
《 前言 》
大概是半年前,我写过一篇关于 git
连接托管平台提示 permission denied 的文章,大概是 —— 《Git ---- 解决coding:Permission denied(publickey)》,感兴趣的朋友可以去看看。
当时我在写文章时,考虑到 C 站这个平台的尿性,压根都没想去研究这其中的缘由。不过这件事也一直在我的心里堵着,本身我自己写作时就不喜欢写那些没头没尾的文章,搞得云里雾里的。因为即便帮助其他人解决了问题之后,如果也不能掌握这个知识点的话,那么我会宁愿不写。
那么今天我就来填这个坑 [托腮]。
一、为什么需要多对密钥?
由于工作的原因,团队要求使用码云作为代码托管平台。而我本人则是习惯使用 Coding 平台托管自己的学习代码,并且有时也会需要把部分自学的代码开源到 GitHub 上(虽然并没有什么价值 [托腮])。所以,为了便于管理和区分各个平台服务器的账户绑定的非对称密钥对,我采用了每个平台各自管理自己对应密钥的管理方式。
二、管理多对密钥所产生的问题
区分管理固然很清晰,但随之而来的问题就是,在同一台本地主机的情况下,除了 id_rsa
绑定的托管平台,其他平台,都会出现 permission denied 的情况。这是由于 git
在没有会默认选取 id_rsa
作为本机的非对称密钥对的私钥而导致的。
因此,当我们打开 ssh
交互面板时,如果此时我们想尝试连接其他托管平台的服务器(例如上面提及的 Coding、GitHub等),就会出现拒绝访问的情况。因为非对称密钥对,只有当公钥和私钥解密比较结果一致之后,才可以允许用户登陆本服务器。
三、如何解决密钥对匹配不一致的问题?
- 临时会话时短暂指定选取的本机私钥
打开 SSH 会话时,选取私钥存入内存中,以上图为例,我们选取 Coding 私钥:
eval `ssh-agent`
ssh-add '~\.ssh\coding_rsa'
或者:
$(ssh-agent)
ssh-add '~\.ssh\coding_rsa'
这样,我们就能正确的匹配到想要沟通的服务器上。
四、讲讲 ssh-agent 和 ssh-add
可能现在你会好奇 ssh-agent
是做什么的?
其实很简单,私钥设置了密码以后,每次使用都必须输入密码,有时让人感觉非常麻烦。
ssh-agent
命令就是为了解决这个问题而设计的,它让用户在整个 Bash 对话(session)之中,只在第一次使用 SSH 命令时输入密码,然后将私钥保存在内存中,后面都不需要再输入私钥的密码了。
而 ssh-add
命令则是用来将私钥加入 ssh-agent
,仅此而已。
参考文章:
- 《SSH教程》—— 阮一峰