由一个hexo部署问题说起

最近有时间,终于重启了自己的在 GitHub Pages 上的博客,用 hexo 建立网站确实省心省力,然而我也遇到了一些问题,在此记录一下 hexo 部署时的小波折。

和往常一样,我依然使用 hexo cleanhexo ghexo d 三个命令部署更新网站,然而在执行第三个命令时收到了这样一个错误提示:

1
2
3
4
5
6
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
...

于是,非常自然地想到是不是 SSH 连接的问题,经过网上一番搜索,我首先在 C 盘 .ssh 文件夹目录下新建了一个名为 config 的文件,内容如下:

1
2
3
4
5
6
Host github.com
User address@mail.com
Hostname ssh.github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Port 443

重新尝试部署,依然出错,错误提示一样。最好还是看官方文档,于是,我在 GitHub Docs上找到了这个页面,按照它里面的操作步骤一步步排查问题。可以发现,在执行

1
ssh -vT git@github.com

命令时,我的机器是可以连上 github.com 的,但其中,我本机的详情信息略有不同,最关键的两行信息如下:

1
2
> debug1: identity file /Users/you/.ssh/id_dsa type 0
> debug1: identity file /Users/you/.ssh/id_dsa-cert type -1

结合官方给出的文档,我发现是由于缺失了 id_dsa-cert 文件所致,但去 .ssh 文件夹下,却没有发现这个文件。问题是,这个 SSH key 是我在前几天生成的新 key,为什么现在提示我会缺少这么一个文件呢?于是我大胆假设:hexo是不是版本太老,所需要的文件如今的系统是不会生成的。用 hexo -v 命令一看,居然是 1.x 版本!当初我建立博客还是在2018年,这么久过去了,我从未主动更新过 hexo,现在最新版本已到达 6.0.0,时代变了。

hexo 的运行依赖 npm,我想到自己的 Node 也不是新版本,于是去 Node.js 官网下载并覆盖安装最新的稳定版本,然后使用 node -v 查看版本更新是否成功。

接下来若是尝试运行 hexo 的任何指令,都会提示我无法找到该命令。不急不急,使用以下命令全局更新 hexo:

1
npm i hexo-cli -g

安装 npm-check:

1
npm i npm-check -g

然后再运行 npm-check 指令,这里就展示了需要升级的各种插件,可以发现 hexo 赫然在列。

再执行以下命令:

1
2
3
4
npm install -g npm-upgrade   // 安装npm-upgrade
npm-upgrade // 更新package.json,这里一路yes即可
npm update -g //更新全局插件
npm update --save //更新系统插件

其中几乎每一步都花费了几分钟时间,的确,我系统中各种插件都长时间没有更新了。在执行第三条命令的时候,还出现了 “npm ERR! The operation was rejected by your operating system.” 的错误,在 Windows 10系统上,搜索并进入设置的“PowerShell开发者选项”,勾选并“应用”如下图所示的选项即可成功运行该命令。

终于更新完,来检验一下成果,运行 hexo -v

1
2
3
4
5
hexo: 6.0.0
hexo-cli: 4.3.0
os: win32 10.0.19044
node: 16.13.2
...

更新成功!最终新的文章也成功部署到了网站上。

参考

  1. hexo升级
  2. 博客更新:Hexo更新到5.2.0版本血泪踩坑史
  3. GitHub Docs - Error: Permission denied (publickey)