チュートリアル:Hexo + GitHubで個人ブログを作る

公開日

原文言語: 中国語 。 AI翻訳: 英語 日本語


このチュートリアルは、技術経験がまったくない完全初心者向けです。コードが分からなくても、順番に進めればブログを作れるように書きます。

作業を始める前に、まず全体を一度通して読むのがおすすめです。
(筆者はWindows 10 1903を使っているため、本記事はWindows向けです)


きっかけ

ブログを作りたいという気持ちは昔からあったのに、ずっと実行できていませんでした。
週末に適当にネットを見ていたら「Hexo + GitHubでブログを作る」チュートリアルを見つけて、勢いでやってみることに。

三日坊主の勢いのまま昼から夜まで一気に触って、10時間(以上)かけて、チュートリアルが言うところの「10分でGitHubにホストされた個人サイト」をようやく作りました。
もちろんチュートリアル自体は良いですし、順調なら確かに早く作れます。
ただ自分の技術力がゼロなので、初心者ならではの謎の落とし穴を踏みまくって時間が溶けました。

詳しい人ほど「当たり前」の細部を省略しがちですが、初心者がつまずくのはだいたいそういう小さなところです。
なので、自分がやった手順と踏んだ坑をまとめておきます。同じようにブログを作りたい初心者の助けになれば。


全体の流れ

本題:Hexo + GitHubでサイトを作る。
大まかな流れはこうです。

  • 準備

    • Node.jsとGitをインストール
    • Hexoをインストール
  • ローカルでブログを作る

    • フォルダを作る
    • ページを生成
    • ローカル実行
  • GitHubにホストする

    • GitHubアカウント作成、リポジトリ作成
    • GitとGitHubを接続
    • ローカルのサイトをGitHubへpush
  • 完成して祝う

上の用語が分からなくても大丈夫。以下、簡単に説明します(理解できなくても手順は進められます)。

Hexoとは?
Hexoは、速くてシンプルで効率の良いブログフレームワークです(Hexo公式ドキュメント)。
PPTでテンプレを当てるイメージに近くて、Hexoでローカルにブログのベースを作って、出来上がったファイルをGitHubに置けば公開できます。

Node.jsとは?
正直よく分かっていません。ここではHexoを動かすために必要なもの、くらいでOKです。

Gitとは?
Gitはバージョン管理ツールです。このチュートリアルでは「他のツールを動かすための黒い画面(ターミナル)」くらいに思ってください。

GitHubとは?
GitHubはGitで管理されるコードやファイルをホスティングするサービスです(Wikipedia)。
ここでは「公開できるクラウドドライブ」だと思えばOK。リポジトリを作ってサイトを置けば、誰でもアクセスできるようになります。


ここからは、Windows10標準のSandbox(サンドボックス)を使って、まっさらなWindows環境でのセットアップを例示します。

準備

Node.jsをインストール

Node.js公式サイトに行き、左側の10/16/0 LTSをクリックしてダウンロードします。
インストールは基本的に全部デフォルトでOK。

Gitをインストール

Gitのダウンロードリンクからダウンロード。
ただし回線事情で遅いことがあるので、必要ならこちらのミラーも:
Git for Windows 国内下载站から最新の64-bit Git for Windows Setupを選べばOK。
インストールは基本的に全部デフォルト。

Hexoをインストール

必須コンポーネントが揃ったらHexoを入れます。
やることは簡単。
デスクトップの空白など、どこでもいいので右クリックしてGit Bash Hereを選びます。

さっき入れたGitのターミナル(黒い窓)が開きます。怖そうですが、打つコマンドは1行だけ。

黒い窓を見ると、$の後ろでカーソルが点滅しているはず。

そこでキーボードで次を入力:
npm install -g hexo-cli

こういう表示になります。

Enterを押すと……一見なにも起きず、カーソルが次の行に移るだけ。

でも裏でインストールが始まっています。しばらく待つと(回線次第)、hexo-cli 2.0.0をインストールした、105.03sかかった、など表示されます。

これで準備完了。次はローカルでブログを作ります。


ローカルでブログを作る

フォルダ初期化

  • まずブログのファイルを置くフォルダを作ります。場所はどこでもOK。
    例として、私は「ドキュメント」にBlogというフォルダを作りました。
  • その空フォルダを開き、右クリックしてGit Bash Here
  • また黒い窓。今度はhexo initを入力してEnter。
    Blogフォルダを初期化して、ブログの骨組み(テンプレ)を生成します。少し時間がかかるので待ちます。
  • 数分待つと、初期化が終わってファイルが増えているはず。
  • 続けて、窓を閉じずにnpm installを入力してEnter。
    すぐ終わります。警告が2つ出るかもしれませんが、たぶん大丈夫。

生成とローカル起動

  • hexo gを入力してEnter。
    hexo generateの略で、静的ページを生成します)
  • 黒い窓がいろいろ出力します。
  • hexo sを入力してEnter。
    hexo serverの略で、ローカルでサーバを立てます)
  • WindowsがNode.jsのネットワーク接続を許可するか聞いてきたら許可。
    黒い窓には
    Hexo is running at http://localhost:4000
    と出ます。

びっくりタイム

  • ブラウザを開いて、アドレスバーにlocalhost:4000と入れてEnter。
    こちらをクリックしてもOK:localhost:4000
  • WOW
  • Hexoが最初の投稿Hello Worldを自動生成してくれています。

hexo sはローカルでサイトを立ち上げ、localhost:4000で確認するためのものです。見た目や内容を確認して、問題があれば元のファイルを編集して保存し、ページをリロードすれば反映されます。

ここまででローカル環境は完成。
ただし、ネット上に公開するには生成したファイルをGitHubに置く必要があります。
続きます。

(続ける前に、動いているローカルサーバはCtrl+Cで止めておくのがおすすめです。)


GitHubにホストする

アカウント作成とリポジトリ作成

  • まずGitHubのアカウントを作成:Sign up
  • 次にリポジトリを作成:New repository
  • 注意:リポジトリ名は必ずusername.github.io形式。
    例:ユーザー名がKassadinLなら、リポジトリ名はKassadinL.github.io
    大文字小文字はどちらでもOKで、最終的には小文字として扱われます。
    作成。
  • 作成したリポジトリを開き、右端のSettingsをクリック。
  • 下へスクロールしてGitHub Pagesを探し、機能を有効化。
    だいたいこんな表示になります。
    (この手順が必須かはよく分かりませんが、検証のために別アカウントを作るのが面倒なので、とりあえずやっておきます。)

GitとGitHubを接続

ローカルからGitHubへファイルをpushするには、GitHub側で認証が必要です。
そのためにSSH鍵を設定します。

  • Git Bashを開き、まずGitにGitHubユーザー名を登録:
    git config --global user.name "YourGitHubUsername"
    例:git config --global user.name "KassadinL"
  • 次にメールアドレス:
    git config --global user.email "YourGitHubEmail"
    例:git config --global user.email "sensensensan@gmail.com"
  • この2つがGitに記録され、次にSSH鍵を作るときに使われます。
  • 鍵生成:
    ssh-keygen -t rsa -C "YourGitHubEmail"
    例:ssh-keygen -t rsa -C "sensensensan@gmail.com"
    Enterして、さらに3回Enter。
  • 作成場所が表示されるので、C: -> Users -> <ユーザー名> -> .sshを開き、id_rsa.pubをメモ帳で開いて内容を全部コピー。
  • GitHub Settings: SSH keysを開き、New SSH key
    Titleは適当(例:Blog)。Key欄にさっきコピーした内容を貼り付け、Add SSH key
  • Git Bashに戻り、動作確認:
    ssh git@github.com
    少し待って、スクショのような表示が出ればOK。

ローカルのサイトをGitHubへpush

  • Hexoにデプロイ先を教える必要があります。
    ローカルのBlogフォルダで_config.yml(サイト設定)を探します。
  • メモ帳で開き、ファイル末尾を次のように編集:
deploy:
type: git
repo: GitHubで作ったリポジトリのURL(末尾に .git を付ける)
branch: master
  • 例:

  • 注意:

    • URLの末尾に.gitを付ける
    • :の後にスペースが必要。type:gitはNG、type: gitはOK。
  • 保存して閉じる。

  • デプロイ用プラグインをインストール:

Terminal window
npm install hexo-deployer-git --save

これで公開できるようになります。

ここで 吴润 - GitHub+Hexo 搭建个人网站详细教程 の説明を引用:
「GitHubに鍵を設定する理由は公開鍵/秘密鍵の非対称暗号を使うため。公開鍵はGitHubに置き、秘密鍵は自分のPCに置く。GitHubはpushのたびに認証が必要で、毎回ユーザー名とパスワードを入れるのは面倒。SSHを使うと、push時に秘密鍵とGitHub上の公開鍵がペアかどうかを照合し、正しければ正当なユーザーとしてpushを許可する。」

よく使うコマンド

HexoでGitHubへデプロイするとき、よく使うコマンドはこれ:

Terminal window
hexo s
ctrl c
hexo clean
hexo g
hexo d

説明:

  • hexo shexo server):ローカルサーバ起動。localhost:4000でプレビューしてレイアウトや内容を確認。
  • Ctrl C:ローカルサーバ停止。
  • hexo clean:生成済みファイルを掃除。
  • hexo ghexo generate):静的ファイル生成(Blog\public)。
  • hexo dhexo deploy):GitHubへデプロイ。

2020/05/04 update
hexo cleanhexo clに短縮できる
hexo ghexo dhexo g -dでまとめられる

使い方

ブログのカスタマイズ

  • タイトル、副題、言語などを変更。
    • ローカルの_config.ymlを開き、title/subtitle/language/timezoneなどを編集。
    • 例:titlesubtitlelanguageを変更すると、ブログの表示も変わる。
    • 他の設定は別記事を参照(ここでは省略)。

記事を書く

  • hexo nhexo new)で、Blog\source\_posts\に新しい記事ファイルを作れます。
  • そこにhello-world.mdが既にあるはず。これが最初に出てきた記事。
  • 使い方:Git Bashでhexo n name。nameがファイル名。空白がある場合はダブルクォートで囲む。
  • 例:hexo n "the First Blog"the-First-Blog.mdが作られる。
  • 作成したファイルを開いて書く。
  • HexoはMarkdownを使う。Markdownは簡単なルールで文章に見た目を付けられるテキスト形式。
    参考:Hexo Markdown 简明语法手册

正しい手順

投稿作成〜公開までの流れをまとめると:

  • hexo n "the First Blog":新規投稿作成
  • エディタで内容を書く(Markdownエディタでもメモ帳でもOK。私はNotepad++)
  • hexo sでローカルプレビュー
  • 問題なければCtrl Cで停止
  • hexo cleanで古い生成物を削除
  • hexo gで生成
  • hexo dでGitHubへpush
  • 完了

2020/05/04 update
hexo clで掃除
hexo g -dで生成+デプロイ

完成して祝う

ここまででブログは完成です。
ブラウザでusername.github.ioを開けば見られます。
例:私のブログは kassadinl.github.io

スマホや別PCからもアクセスできます。ちょっと感動。

これで本編は終了。

完結。撒花。撒花。


補遺

  • 独自ドメインについて
  • 多くのチュートリアルが独自ドメインの設定も説明していますが、当時は必要がなく調べませんでした。必要なら紹介した記事を参照。
    これが良さそう:吴润:GitHub+Hexo 搭建个人网站详细教程
  • コマンドライン操作について
  • Git BashではCtrl C/Ctrl Vでコピー&ペーストできません。Ctrl CはStopです。
    コピーはCtrl Shift C、貼り付けはShift Insert
  • 左右矢印でカーソル移動、上下矢印で履歴。
  • ここに踏んだ坑をいくつか:
  • GitHubでリポジトリを作るとき、名前は必ずusername.github.io。最初は別名(例:MoriBlog.github.io)にしたくて時間を溶かしました。結局username.github.ioがドメインになり、ユーザー名は一意なのでリポジトリ名は自由にできない。
  • コマンド入力はWindowsのCMD/PowerShellよりGit Bashのほうが良い(後者はコマンド認識しないことがある)。
  • hexo sでプレビューしたら、見終わった時点でCtrl Cで止める。複数のGit Bashを開いていて1つが動き続けたせいで、テーマ調整が反映されず混乱した。
  • 言語設定はlanguage: zh-CNが良い。公式ドキュメントのlanguage: zh-Hansは古いのか、設定するとブログ言語がドイツ語になった(謎)。
  • テーマ変更について
  • Hexoはオープンソースなので、気に入らなければ自由に変更できる。テーマ(見た目)は設定ファイルを編集して変えられる。
    参考:wangwlj—Hexo搭建的GitHub博客之优化大全

参考資料

主に参考にした記事:




最後に

ブログ構築は三分熱度の行動ではあったけど、ずっとやりたかったので小さな願いが叶った。
ただ、Markdownに慣れていない、レイアウトが崩れる、テーマ調整が足りないなど、不満も多い。

このブログは自己満の折腾だけでなく、やったことを記録する場所にしたい。
最近はBlenderを勉強しているので、今後の記事はBlender関連(チュートリアルや作品など)になるかもしれない。

2019/07/15 AY


更新

2019/07/17 更新

記事整理(ファイル/フォルダ名変更など)をしていると、記事に紐づく画像が削除されることがある。
2回起きたが、幸いゴミ箱から復元できた。

今日は、hexo sを止めずに操作したのが原因かも…と思った。
(この坑は何度も踏んでる)


2019/07/25 更新

「CC 4.0」ライセンスを追加。
参考:潘高—Hexo博客NexT主题美化之自定义文章底部版权声明
CCについての簡単な説明:漠伦—“知识共享”(CC协议)简单介绍

(本当はCC BY-NC-SAにしたかったけど、ネットで見た多くのブログがCC BY-NC-NDで、しかも3.0が多かったので、とりあえず合わせた)


2019/08/18 更新

画像サイズの調整。
NexTテーマは画像を本文幅いっぱいに伸ばすが、読みづらい。
調べたら、画像の前後にdivを入れて縮放比率を指定できる。

<div style="width: 70%; margin: auto"></div> を画像の前後に挿入。
width:200pxのようなピクセルでも、70%のような割合でもOK。


2019/09/19 更新

著作権リンクの誤りを修正。
最後の著作権リンクが http://yoursite.com/* になっていて、自分のサイトURLに変わらないことに気づいた。
前は問題なかった気がする。

調べて解決:Moorez - hexo的next主题个性化配置教程


2019/09/25 更新

Bilibili動画の埋め込み。
Bilibiliの外部埋め込みは360pしか見られないなど微妙で、ページ上でも小さくて使いにくい。
iframeで幅高さを調整するしかない。

<iframe
src="//player.bilibili.com/player.html?aid=8854302&cid=19328137&page=1"
scrolling="no"
border="0"
frameborder="no"
framespacing="0"
allowfullscreen="true"
>
</iframe>
<iframe
src="//player.bilibili.com/player.html?aid=8854302&cid=19328137&page=1"
width="100%"
height="600"
scrolling="no"
border="0"
frameborder="no"
framespacing="0"
allowfullscreen="true"
>
</iframe>
<iframe
id="spkj"
src="//player.bilibili.com/player.html?aid=8854302&cid=19328137&page=1"
scrolling="no"
border="0"
frameborder="no"
framespacing="0"
allowfullscreen="true"
width="100%"
>
</iframe>
<script type="text/javascript">
document.getElementById('spkj').style.height =
document.getElementById('spkj').scrollWidth * 0.76 + 'px';
</script>

1つ目はBilibiliが生成したコード。
2つ目は横幅を自適応。
3つ目は高さを自適応させるスクリプト。

参考:


站内リンク(記事リンク)の挿入。

{% post_link 001-how-to-deploy-blog-with-hexo-and-github %}

参考:Marshal@十万光年 - Hexo使用内链及文章中加入图片的方法


Markdownの簡単な文法。
更新時にフォーマットで詰まって、検索しながら覚えた。
参考:Hexo Markdown 简明语法手册


2019/09/26 更新

検索機能を追加。
方法:hexo - Next 主题添加搜索功能

インストール時に依存関係バージョンが低いというエラーが2つ出たが、機能自体は動いた。


2019/11/26 更新

Linuxでも一度セットアップしてみて、この記事も少し書き直した。


テーマをFluidに変更。見た目が良い。
参考:使用指南 - Fluid


2019/11/29 更新

Windows上のHexoをアップグレードしようとして、npm updateが反応しない。
さらにやらかして、Node.jsをアンインストールした(再インストールすれば最新になると思った)。

結果、hexo initnpm installで詰まった。
Git Bashの出力:

Terminal window
username@alias MINGW64 ~/Documents/Blog
$ hexo init
INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git
Cloning into 'C:\Users\username\Documents\Blog'...
remote: Enumerating objects: 22, done.
remote: Counting objects: 100% (22/22), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 153 (delta 8), reused 8 (delta 2), pack-reused 131
Receiving objects: 100% (153/153), 29.67 KiB | 660.00 KiB/s, done.
Resolving deltas: 100% (70/70), done.
Submodule 'themes/landscape' (https://github.com/hexojs/hexo-theme-landscape.git) registered for path 'themes/landscape'
Cloning into 'C:/Users/username/Documents/Blog/themes/landscape'...
remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 1054 (delta 20), reused 13 (delta 7), pack-reused 1022
Receiving objects: 100% (1054/1054), 3.21 MiB | 851.00 KiB/s, done.
Resolving deltas: 100% (578/578), done.
Submodule path 'themes/landscape': checked out '73a23c51f8487cfcd7c6deec96ccc7543960d350'
INFO Install dependencies
'npm' is not recognized as an internal or external command,
operable program or batch file.
WARN Failed to install dependencies. Please run 'npm install' manually!
username@alias MINGW64 ~/Documents/Blog
$ npm install
> ejs@2.7.4 postinstall C:\Users\username\Documents\Blog\node_modules\ejs
> node ./postinstall.js
'node' is not recognized as an internal or external command,
operable program or batch file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules\nunjucks\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! ejs@2.7.4 postinstall: `node ./postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the ejs@2.7.4 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\username\AppData\Roaming\npm-cache\_logs\2019-11-29T03_31_36_888Z-debug.log

2時間溶けた…。

結局、Node.js付属のNode.js command promptでこの2つのコマンドを実行すれば通った。
環境変数が入っていなかったせい。

Windowsは難しい 私が弱い)


2019/12/23 更新

独自ドメインを紐付けてHTTPSを有効化。

最初は必要ないと思っていたが、trojanを触るのにドメインが必要になったので、ついでにブログにもドメインを紐付けた。
(ただし自分が弱すぎて、ついででも順調でもなかった)
kassadin.moeを購入。

trojanの折腾記録:メモ:trojanをデプロイ(運ゲー)

参考:
Managing a custom domain for your GitHub Pages site - GitHub公式
GitHub Pages自定义域名开启HTTPS - Razeen
GitHub+Hexo 搭建个人网站详细教程 - 吴润

手順通りにやるといくつか問題に遭遇した(自分が弱い/前段の設定が変だった可能性)。例えば:

  • CloudflareでA recordCNAMEがどちらか一方しかGitHub Pagesへ向けられない?

    • A recordにすると証明書が無効になるエラーが出た
    • 解決できず、結局CNAMEにした
  • GitHubのリポジトリ設定のGitHub Pages欄でEnforce HTTPSがチェックできない

    • 「24時間待て」と言う人がいたが、3日待ってもダメ
    • GitHub Pages自定义域名开启HTTPSを参考にしつつ、Cloudflare側でも役に立ちそうな設定を全部ONにして、ようやく強制HTTPSができた
    • なので、何が効いたのか正直よく分からない。動いてるからヨシ。
    • 公式手順ではdigでDNSの確認ができるらしいが、dig kassadin.moeは何度やっても変だった…まあいいや
    • 推測:最初はblog.kassadin.moeで設定して、その後kassadin.moeに変えた。さらにEnforce HTTPSが効かなくて色々いじりまくった。
      それが原因かも?謎。

2019/12/28 update
いまはCloudflareの証明書を使っているはず


2019/12/28 更新

コメント機能追加。

Fluidテーマが対応しているgitalkを使った。
参考:
gitalk - GitHub
NexT主题中集成gitalk评论系统
自动初始化 Gitalk 和 Gitment 评论

設定後、各記事の下で初始化Issueをクリックする必要がある。
(スクリプトがあるらしいが、使い方が分からない)


2020/05/04 更新

コマンド短縮。

  • hexo cleanhexo clにできる
  • hexo ghexo dhexo g -dにまとめられる

RSS追加。

Ref:

設定後にRSSアイコンが出なかった(Fluidテーマの問題かも)。
設定ファイルを探して、Navigation bar menuにRSS設定を1行追加すれば良かった。

# 导航栏菜单,可自行增减,key 用来关联 languages/*.yml,如不存在关联则显示 key 本身的值;icon 是 css class,可以省略;增加 name 可以强制显示指定名称
# Navigation bar menu. `key` is used to associate languages/*.yml. If there is no association, the value of `key` itself will be displayed; if `icon` is a css class, it can be omitted; adding `name` can force the display of the specified name
menu:
- { key: "home", link: "/", icon: "iconfont icon-home-fill" }
- { key: "archive", link: "/archives/", icon: "iconfont icon-archive-fill" }
- { key: "tag", link: "/tags/", icon: "iconfont icon-tags-fill" }
- { key: "about", link: "/about/", icon: "iconfont icon-user-fill" }
- { key: "rss", link: "/atom.xml", icon: "iconfont icon-rss", name: "RSS" }

最後の行がRSS。


2021/04/10 更新

コメントシステム変更。

npm updateしたらgitalkが動かなくなり、Error: Request failed with status code 405が出た。
GitHubの議論を見ると405は少なく、403は多い。
proxyパラメータなどが絡みそうで面倒だったので諦めた。

Fluidテーマが対応しているutterancesに変更。gitalk同様にGitHub Issueベース。
設定:utterances
gitalkより簡単で、初始化Issueも不要。
(ただ匿名コメントはできず、GitHubアカウントが必要っぽい)


2021/10/01 更新

SSH keyエラー。

デプロイ(hexo d)で以下のようなエラーが出た:

Terminal window
git@ssh.github.com: Permission denied (publickey).
kex_exchange_identification: Connection closed by remote host
Connection closed by ...
git@ssh.github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

最初はプロキシの問題だと思って切り替えたがダメ。
さらに以下のissueのやり方も試したがダメ:
HEXO DEPLOY 时不断 Error: Permission denied (publickey). fatal: Could not read from remote repository. #1478
Win10使用ssh的hexo deploy到github報錯 #3339

その後、このコメントを見つけた:
using cmd,type hexo d, Error: Permission denied (publickey). #2312

The ssh key doesn’t add to cmd environment.
Using ssh-add to add the key.
ssh-add ~/.ssh/id_rsa

GitHubドキュメント:
Error: Permission denied (publickey) - Make sure you have a key that is being used

ssh-add -lThe agent has no identities.
ssh-addCould not open a connection to your authentication agent.

つまりローカル環境が鍵を使ってなかった…。


修正はGitHub公式の手順に従った:
Generating a new SSH key and adding it to the ssh-agent

  • ssh-agentを起動

    Terminal window
    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
  • ssh-agentに秘密鍵を追加

    Terminal window
    ssh-add ~/.ssh/id_ed25519

当時この説明を読んだけど意味が分からずスキップしてしまい、数時間を溶かした。


2023/05/19 更新

SSH keyエラー (2)

久しぶりに更新してデプロイしたら、こんなエラーが出た:

Terminal window
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s.
Please contact your system administrator.
Add correct host key in /home/***/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/***/.ssh/known_hosts:17
Host key for [ssh.github.com]:443 has changed and you have requested strict checking.
Host key verification failed.
...

調べたらGitHubがホスト鍵を更新したらしい:
We updated our RSA SSH host key
手順通りに更新したが、まだダメ。

エラーをよく見ると:

Terminal window
Add correct host key in /home/***/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/***/.ssh/known_hosts:17

GitHub用の鍵設定が変だったっぽい。

~/.ssh/configに以下を追加:

Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/YourPrivateKeyFileName
User Yourname

これで解決。

以前も設定していたが、2つ書いていて、1つ目が間違っていた。
SSHは先頭の設定を使うので、ずっと失敗していた。


2023/05/19 更新 2

hexo dがusername/passwordを要求する。

_config.ymlのrepoをhttpsにすると毎回ユーザー名とパスワードを要求される。
git(SSH)URLなら鍵が使われるので、git URLに戻せばOK。

Ref:
hexo d must enter pwd | hexo deploy的时候一直需要输入密码


2024/07/03 更新

GitHubにdeployしたのに、しばらくブログが更新されない。
一度Hexoが壊れたのかと思った(Hugoに移行する時期か)。

BlogリポジトリのSettings -> Pagesに次のエラーが出ていた:

Actions is currently unavailable for your repository, and your Pages site requires a Jekyll build step.
To continue building your site on pushes, you need to enable Actions.

いろいろ触って分かったのは、GitHub PagesのデプロイがGitHub Actions経由に変わったこと。

解決:
Blogリポジトリ Settings -> Actions -> General
最上部のActions permissionsで4つ目のAllow ... actions and reusable workflowsを選び、出てくる最初のチェックAllow actions created by GitHubをオン。
保存。

これで再びhexo deployできた。
commit historyを見ると、更新時にXXX committed xx minutes agoの横に3/3のチェックが出る。
以前は2/2だった。

(失敗したデプロイはチェックが付かない)

直した後でGitHubのドキュメントを見ると、ちゃんと書かれていた:
Troubleshooting Jekyll build errors for GitHub Pages sites
このページのWho can use this feature?の小さい枠の2段目:

All GitHub Pages builds will use GitHub Actions from June 30, 2024.
No other changes are required but GitHub Actions must be enabled in your repository for builds to continue.
For more information on enabling GitHub Actions, see “Managing GitHub Actions settings for a repository.”

6/30から変わって、変わって数日しか経ってない時期に踏んだので、なかなか罠だった…。

余談:この情報をWho can use this feature?の枠に入れるのは微妙。ドキュメント冒頭を流し読みしていて2段目を見落としていた。