解决hexo d上传失败(Spawn failed)问题


前情提要

想上传博客,但是发现执行 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了。

解决方案

  1. 执行 ssh -T git@github.com 发现抛出异常:ssh: connect to host github.com port 22: Connection timed out ,和刚才hexo d 出现的报错一样。
  2. 我们 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即可。
  3. C:\Users\用户名\.ssh 下新建一个 config.txt 文件,写入如下内容:
Host github.com  
  Hostname ssh.github.com  
  Port 22
  1. 把.txt后缀删掉
  2. 重新执行 ssh -T git@github.com ,发现成功了。
  3. 回到博客目录执行 hexo d 发现一切都好了。

其他情况的解决方案

可以采取一些尝试:

  1. 如果在根目录下的config.yml中的deploy的repo里用的是http,改用SSH试试,需要自己创建和仓库的ssh连接,可以自行搜索
  2. 参见大佬的一些解决方案 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报文都被拦截了,不太清楚到底是什么原因,我做了以下尝试,但均以失败告终:

  1. 关闭防火墙,或在防火墙中出站规则允许关于ICMP的一切规则
  2. 将DNS从DHCP切换手动配置为8.8.8.8或1.1.1.1
  3. 修改hosts文件,在其中添加github.com和问题ip
  4. 执行 ipconfig /flushdns刷新dns缓存
  5. 执行 netsh int ip resetnetsh winsock reset 重置TCP/IP协议栈
  6. 用telnet/tcping测试,全都是依旧显示有问题
  7. 禁用ipv6
  8. 更换网络为手机热点
    最终还是没有解决,不太清楚为什么,不过现在不影响博客上传了,所以也没有处理了。

感谢

非常感谢下面这篇博客,解决了问题。
GitHub连接超时问题解决 | 冰刻无痕
感谢可爱小柴陪我解决了半天。
Home - 我要当黄牛!


文章作者: Fetyloi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Fetyloi !
  目录