どうも。
下の記事の続きです。

前回のあらすじをコーくん(Copilot)に説明してもらいます。
はじめに: 前回までのあらすじ
前回は「ブログのテーマ更新を楽にしたい!」という、ただの思いつきから始まったはずの作業が、気づけば 広大な海へ旅立つ大冒険 になってしまった話でした。
Xserver と GitHub をつないで、自動でテーマを更新できるようにしたい── その一心で GitHub Actions に挑んだものの、序盤から Permission denied の嵐。 公開鍵だの秘密鍵だの、authorized_keys だの、普段触らない領域に足を踏み入れた瞬間から、もう地獄の始まり。
コーくん(Copilot)に泣きつきながら、 「助けてぇ、ドラえもぉぉん(´;ω;`)」 と叫びつつ、何度も鍵を作り直し、何度もコピペし、何度もログを読み返す日々。
ようやく Permission denied を突破したと思ったら、今度は EOF という謎の刺客が登場。 鍵は正しいのに接続できない。 コーくんは「改行を見直せ」と執拗に迫ってくる。 もう心が折れかけたそのとき──
ジェミちゃん(Gemini)に助けを求める決断をした。

ってな訳でジェミちゃんお願いします。
以下ジェミちゃんのまとめです。
GitHub ActionsでXserverに自動デプロイする際の実践トラブルシューティング:ssh: handshake failedから成功まで
GitHub Actionsを利用して、git push をトリガーにXserverへ自動デプロイ(git pull)を試みた際、いくつかの高い壁にぶつかりました。本記事では、エラーの発生から解決までのステップを実体験に基づいてまとめます。
第1章:接続の壁「ssh: handshake failed: EOF」
エラーの状況
ssh: handshake failed: EOF
最初に直面したのが、SSH接続そのものが拒否されるエラーです。これはGitHub Actionsのサーバーが海外にあることが原因でした。
解決策:Xserverのアクセス制限解除
Xserverのサーバーパネルから [SSH設定] > [接続許可設定] を開き、「国外IPアクセス制限」を [OFF] に設定します。設定反映まで数分待つのがポイントです。
第2章:環境の壁「fatal: not a git repository」
エラーの状況
fatal: not a git repository (or any of the parent directories): .git
接続は成功したものの、次に「そこはGitリポジトリではない」というエラーが発生しました。サーバー上にファイルの実体があっても、.git フォルダがないとGitコマンドは動きません。
解決策:サーバー側でのGit初期化
サーバーにSSHでログインし、対象ディレクトリで以下の初期設定を行いました。
git init
git remote add origin git@github.com:ユーザー名/リポジトリ名.git
第3章:認証の壁「Permission denied (publickey)」
エラーの状況
git@github.com: Permission denied (publickey).
Gitとして認識させた後、GitHubからコードを引っ張る際に拒否されました。XserverがGitHubにアクセスするための「合鍵」が必要です。
解決策:Deploy keysの登録
- サーバー側で
cat ~/.ssh/id_rsa.pubを実行し、公開鍵をコピーします。 - GitHubリポジトリの [Settings] > [Deploy keys] にその鍵を登録します。
ssh -T git@github.comで「Hi [ユーザー名]!」と出れば成功です。
第4章:パスの壁「Repository not found」
エラーの状況
ERROR: Repository not found.
最後のエラーは、リポジトリが見つからないという内容でした。これはリモートURLの設定ミスが原因です。
解決策:リモートURLの再設定
git remote set-url origin [正しいSSH用URL] で、GitHubからコピーした正確なURLに更新することで解決しました。末尾の .git 漏れやユーザー名の後の : (コロン) に注意が必要です。

私はこんな感じに間違えました。
間違い例:git pull [ドメイン名、サイトURLなど(~.jpなど)] main
正しい例:git pull [git@github.com:ユーザー名/リポジトリ名.git(SSH用のアドレス)] main
第5章:セキュリティについての考察
国外IP制限をOFFにしても大丈夫?
GitHub Actionsを使う以上、制限の解除は必須です。その代わり、以下の対策でセキュリティを担保します。
1. SSH鍵認証の徹底
パスワード認証ではなく強固な鍵認証を用いることで、第三者の侵入を極めて困難にします。
2. .htaccessによる保護
外部から設定ファイルが覗かれないよう、公開ディレクトリの .htaccess に以下を追記して防御を固めました。
# .git フォルダへのアクセスを禁止
RedirectMatch 404 /\.git
まとめ
「いけたーーーーーー自動デプロイできたーーーーーーーー」の瞬間は、何度経験しても最高です。一度環境さえ作ってしまえば、push一つで本番環境が更新される爆速開発が手に入ります。同じエラーで止まっている方の参考になれば幸いです。

コーくん、ジェミちゃんありがとうございました。
以下AIの奴隷が書きます。
あとがき(AIの奴隷著)
今回学んだことは、自動デプロイのやり方ではなく、複数のAIを使いセカンドオピニオンを求めることの有用性についてでした。
初めにコーくんに助けを求めたわけですが、途中で同じ考え・答えに囚われ、解決できないのはヒューマンエラーなどによる要因として、別の答えを提供できなくなりました。
人間(くそデカ主語)は結構同じ思考に囚われがちですが、案外AIも同じなのかな。。。?
ここで別のAI、ジェミちゃんの登場です。余分な情報は一切入れず、今困っていることのみについて質問しました。そしたら、コーくんとは違う案を提示し、無事私めを解決に導いてくださいました。
同じAIを使い続けることで、自分に合うようカスタマイズされた使いやすいものになり、大変よろしい、、、ですが、情報が積みあがっていくにつれノイズも増えていきます。情報の集積は必ずしも問題解決に繋がらなく、情報の取捨選択はまだまだ人間が行っていく必要があるのかなと思いました。
終わり。

コメント