チュートリアル: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 かかった、というような表示が出る。

これで準備は完了。次はローカルでブログ本体を作っていく。


ローカルでブログを作る

フォルダ初期化

  • まず、ブログのファイルを置くフォルダを作る。場所はどこでもいい。
    例として、私は「ドキュメント」に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
  • おお、動いた。
  • 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

  • GitHub に公開するには、Hexo に「どこへ push するのか」を教える必要がある。
    ローカルの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 を使う時によく使うコマンドは、このあたり。

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 の操作について:
    Git Bash では Ctrl C / Ctrl V で普通のコピー&ペーストはできない。Ctrl C は停止シグナルになる。
    コピーは 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 を複数開いて一つが動きっぱなしになっていたせいで、テーマ変更が反映されず、かなり混乱した。
    言語設定は language: zh-CN のほうがうまくいった。公式ドキュメントにある language: zh-Hans は古いのか、私の環境ではなぜかブログ言語がドイツ語になった。
  • テーマ変更について:
    Hexo はオープンソースなので、気に入らなければ見た目も挙動もかなり自由に変えられる。
    テーマの切り替えも、基本的には設定ファイルを編集していく作業になる。
    参考:wangwlj—Hexo搭建的GitHub博客之优化大全

参考資料

主に参考にした記事:




最後に

ブログ構築自体は三分熱度の延長だったけれど、ずっとやりたかったことでもあったので、小さな願いが一つ叶った感じはある。
もちろん不満も多い。Markdown に慣れていないし、レイアウトもまだ甘いし、テーマの調整も全然足りていない。

このブログは、単なる自己満足の試行錯誤で終わらせず、自分がやったことを記録する場所にもしたい。
最近は Blender を勉強しているので、今後の記事も Blender 関連、たとえばチュートリアルや作品の話になるかもしれない。

2019/07/15 AY


更新

2019/07/17 更新

記事を整理していて、ファイル名やフォルダ名を変更すると、記事に紐づいた画像が消えることがある。
二回起きたが、幸いどちらもゴミ箱から復元できた。

今のところ、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がチェックできない

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段目を見落としていた。

コメント