多个SSH连接配置之HEXO部署

本文作为个人笔记,内容不过多展开说明。
如果只是来找直接的解决方案,可以参考《本地有多个github账号如何使用hexo部署到特定账号》这篇文章。

这里只针对Hexo部署时在多个SSH配置时一些处理,关于多个Github账号的搭配多个SSH配置的问题请自行谷歌了解。


多个SSH配置是指的是在用户家目录下.ssh\config文件中(C:\Users\good_boy\.ssh\config)文件中配置了多个SSH的连接。
之前在《如何使用SSH配置文件进行SSH连接》已经介绍了多个SSH配置的配置方法。

但当我们这样子配置之后,会发现在Hexo部署的时候会出现错误。因为Hexo在提交到仓库的时候不知道使用哪个SSH配置。
我们要解决的问题让仓库地址跟我们的SSH配置中的Host主机对应上,这样子他就会去找对应的SSH配置了。
听起来可能不太明白,其实很简单。

例如现在我的电脑上有两个Github账号,然后SSH配置文件的连接配置为:

1
2
3
4
5
6
7
8
9
10
11
Host github_1
User git
HostName github.com
PreferredAuthentications publickey
IdentityFile C:/Users/good_boy/.ssh/keys/github_1

Host github_2
User git
HostName github.com
PreferredAuthentications publickey
IdentityFile C:/Users/good_boy/.ssh/keys/github_2

配置了多个SSH链接,这时候我们如果还是以git作为github.com这个主机的User去连接那么就会失败。

$ ssh -T git@github.com
Permission denied (publickey).

这是因为不能确定具体要去使用哪个配置文件。这时候我们就需要指定具体的Host了,也就是你得通过ssh github_1这样子的方式来连接。

$ ssh -T github_1
Hi good_boy! You’ve successfully authenticated, but GitHub does not provide shell access.

一般情况下,我们的Hexo配置文件_config.yml中Deploy部分配置如下:

1
2
3
4
deploy:
- type: git
repo:
github: [email protected]:good_boy/good_boy.github.io.git

部署仓库的地址中有 git@github.com 这么一段,这就是SSH连接的用户名和主机。
这样部署,当进行ssh通讯的时候就相当于 ssh -T [email protected] ,所以是会导致连接失败的。

解决方法就是把仓库SSH地址:[email protected]:good_boy/good_boy.github.io.git 中的 [email protected] 替换成对应的SSH配置的主机,冒号后面的就是Github的用户名,这个不需要改。
例如这里HEXO部署到的Github账号需要使用github_1这个SSH配置来进行SSH连接验证。
那么部署的仓库地址就需要写成:repo: github_1:good_boy/good_boy.github.io.git
这样子Hexo在部署进行SSH连接的时候就会知道使用哪个SSH配置了。

这样的做法也适用于部署到多个Git仓库,例如同时部署到了Github和Coding上,那么SSH连接配置和Hexo的配置就是下面这样子:

SSH连接配置

1
2
3
4
5
6
7
8
9
10
11
Host coding_good_boy
User git
HostName git.coding.net
PreferredAuthentications publickey
IdentityFile C:/Users/good_boy/.ssh/keys/coding_good_boy

Host github_good_boy
User git
HostName github.com
PreferredAuthentications publickey
IdentityFile C:/Users/good_boy/.ssh/keys/github_good_boy

Hexo部署配置

1
2
3
4
5
deploy:
- type: git
repo:
coding: coding_good_boy:good_boy/good_boy.coding.me.git
github: github_good_boy:good_boy/good_boy.github.io.git