Hexo网站配置多个SSH-Key一起推送多个远程仓库

我要用SSH密钥这种链接推送其实不是因为它方便,当然也其实很方便,只是要在不设置Git密码的情况下,设置Git密码就要每次都输密码才能推送,所以我后面设置都是留空,这样我一键推送以后就可以去做其他事了。

之前用https这个链接其实也很方便的,至于有的人说每次都要输入密码才可以,我是第一次输入过后面的推送都是不用的,因为现在的win10系统是可以在本地账号里面保存凭据的,有了凭据肯定是不用每次都输密码了。

所以我要换成SSH这种链接的推送方式不是方便和不方便的问题了,问题是Github不能通过https这种加密链接推送了,几天之前Github就发邮件给我说这种推送方法不能用了,当时也还没有觉得有多大的问题,后面有一天是真的就推送不了,连用了几次一键推送都是失败的,于是就下定决心在昨天把它换了。

换个推送链接说起来和做起来真的不太难,可是关键的问题是换了之后出问题了,Github倒是能推送上去了,但是Gitee这个平台的仓库就推送不上去了,当时也不知道什么原因,就想着把Gitee这个链接在站点配置文件里注释一下,只保留Github这个单独推送,果然单独推送确实是可以的,那么问题就只在Gitee这一边了。当然其实我也可以用Gitee这里依然保持用https推送,因为那样也是可以的,只是我强迫症犯了,我做事喜欢保持整齐划一,要换自然要两个都换了才行。

在网上查了一下都没有找到什么答案,最后还是去看了Gitee上面的帮助文档,在文档里面搜了一下关于公钥配置的问题,突然看到可以配置多个SSH-Key的方法:

1
2
a. 一个Gitee
b. 一个Github

解决方法:

1.生成一个Gitee用的SSH-Key

1
2
ssh-keygen -t rsa -C 'xxxxx@company.com' -f ~/.ssh/gitee_id_rsa
#适用于SSH8.8之前的版本
1
2
ssh-keygen -t ed25519 -C "xxxxx@company.com" -f ~/.ssh/gitee_id_rsa
#适用于SSH8.8之后的版本

2.生成一个Github用的SSH-Key

1
2
ssh-keygen -t rsa -C 'xxxxx@qq.com' -f ~/.ssh/github_id_rsa
#适用于SSH8.8之前的版本
1
2
ssh-keygen -t ed25519 -C "xxxxx@qq.com" -f ~/.ssh/github_id_rsa
#适用于SSH8.8之后的版本

3.在 ~/.ssh 目录下新建一个config文件,添加如下内容(其中HostHostName填写git服务器的域名,IdentityFile指定私钥的路径)。这里的config文件怎么创建刚开始我也是搞不懂,其实也不难,就是找到~/.ssh这个文件夹目录,在它里面新建一个文本文档,然后把这个文本文档的名字和后缀改成config,这样就创建好了这个config文件,然后用notepad++打开添加如下内容后保存。

1
2
3
4
5
6
7
8
9
10
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa

4.添加私钥,分别按顺序输入下面的代码

1
2
3
ssh-agent bash
ssh-add ~/.ssh/github_id_rsa
ssh-add ~/.ssh/gitee_id_rsa

注意:电脑重置系统以后就算密钥还在,这几个指令也必须按顺序添加。

5.把公钥添加到远程服务器Gitee和Github
到这里两个平台的SSH-Key就配置完成了,把两个不同平台的公钥分别添加到各自的平台,用notepad++分别打开gitee_id_rsa.pubgithub_id_rsa.pub,打开后复制到添加公钥的地方就可以。

6.用ssh命令分别测试

1
2
ssh -T git@gitee.com
ssh -T git@github.com

以gitee为例,成功的话会返回下图内容

7.设置推送的配置信息

1
2
git config --global user.name "yourname"
git config --global user.email "youremail"

这里要注意Gitee的公钥必须要添加到个人公钥才可以,具体不能推送的问题应该也不是要配置多个SSH密钥的这个问题,这个报错的问题是我后面才发现的,那就是我把电脑上创建的公钥放到部署公钥那里去了,发现这个问题是因为配置了两个密钥还是不能推送,后面一看原因就是在这里,因为部署公钥只能下载不能写入,就是这个公钥只能从这里部署到其他服务器上去,而不能用这个公钥从Git推送写入到仓库里面。

后面才发现后面有一行如下图的小字:

说是要添加个人公钥才能对仓库进行写操作,到这里总算搞清楚问题所在了,那就先把添加到部署公钥这个删了,点了那个蓝色一行小字,跳转过去添加个人公钥,从本地电脑notepad++上打开的公钥直接复制过去添加确定输入密码就可以了。

重新使用一键编译和推送,然后发现正常推送了,也不需要输入密码的操作了,是的第一次就不需要,这个确实要比https这种方便很多了,只要一键推送了后面的事都可以不用管了,只要它不推送失败,都没有什么问题,打开网站只要刷新一下就更新了。