前情提要
想上传博客,但是发现执行 hexo d
出现如下报错:
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: Spawn failed
at ChildProcess.<anonymous> (F:\myweb\myblog\node_modules\hexo-deployer-git\node_modules\hexo-util\lib\spawn.js:51:21)
at ChildProcess.emit (node:events:524:28)
at cp.emit (F:\myweb\myblog\node_modules\cross-spawn\lib\enoent.js:34:29)
at ChildProcess._handle.onexit (node:internal/child_process:293:12)
然后就思考是不是网络问题,于是我 ping github.com
发现全是请求超时,花了好长时间去搜索如何解决这个问题。但是在看报错的时候,忽略了一行信息:
ssh: connect to host github.com port 22: Connection timed out
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
可以看出是ssh连接的问题,且问题出现在22端口。需要说明的是由于最开始部署博客的时候,采用http协议就出现过超时问题,所以转用ssh了。
解决方案
- 执行
ssh -T git@github.com
发现抛出异常:ssh: connect to host github.com port 22: Connection timed out
,和刚才hexo d
出现的报错一样。 - 我们
ping ssh.github.com
,发现可以ping通。同时可以和ping github.com
返回的ip对比,发现是两个不同的ip,ssh.github.com对应的是 20.205.243.160,而github.com对应的是20.205.243.166。所以端口应该是没有毛病的,我们把要访问的改为ssh.github.com即可。 - 在
C:\Users\用户名\.ssh
下新建一个config.txt
文件,写入如下内容:
Host github.com
Hostname ssh.github.com
Port 22
- 把.txt后缀删掉
- 重新执行
ssh -T git@github.com
,发现成功了。 - 回到博客目录执行
hexo d
发现一切都好了。
其他情况的解决方案
可以采取一些尝试:
- 如果在根目录下的config.yml中的deploy的repo里用的是http,改用SSH试试,需要自己创建和仓库的ssh连接,可以自行搜索
- 参见大佬的一些解决方案 Hexo错误:spawn failed的解决方法 | 张洪Heo,本文的解决其实就对应大佬这篇博客的
ssh -T git@github.com
连接失败的解决方案。/侵删
关于Github无法ping通的问题(未解决)
情况是:能ping通8.8.8.8或1.1.1.1,但ping不通github.com或者google.com,科学上网可以直接访问所有外部网站,但就是ping不通。甚至在github可不科学上网直接打开网页的时候,也ping不通。同时不是校园网的问题,隔壁师兄可以ping通。分析了半天,问题定位在ICMP。
用WireShark抓包发现所有的ICMP报文都被拦截了,不太清楚到底是什么原因,我做了以下尝试,但均以失败告终:
- 关闭防火墙,或在防火墙中出站规则允许关于ICMP的一切规则
- 将DNS从DHCP切换手动配置为8.8.8.8或1.1.1.1
- 修改hosts文件,在其中添加github.com和问题ip
- 执行
ipconfig /flushdns
刷新dns缓存 - 执行
netsh int ip reset
和netsh winsock reset
重置TCP/IP协议栈 - 用telnet/tcping测试,全都是依旧显示有问题
- 禁用ipv6
- 更换网络为手机热点
最终还是没有解决,不太清楚为什么,不过现在不影响博客上传了,所以也没有处理了。
感谢
非常感谢下面这篇博客,解决了问题。
GitHub连接超时问题解决 | 冰刻无痕
感谢可爱小柴陪我解决了半天。
Home - 我要当黄牛!