GitHub Actions で Xserver に SSH接続できなかった話と解決方法【appleboy/ssh-action】
はじめに
GitHub Actions を使って Xserver に自動デプロイしたい!
でも何度やっても SSH 接続が通らず… かなり沼りました。
同じように悩む方のために、原因と解決方法を共有します。
問題
以下の構成で GitHub Actions を使って自動デプロイしようとしていました。
GitHub リポジトリ → push
GitHub Actions(appleboy/ssh-action)で Xserver に SSH 接続
サーバ側はGitHub Actionsで git pull を自動実行
ですが、何度やっても 接続エラー が発生しました。
エラー例
ssh: handshake failed: ssh: unable to authenticate
ssh: handshake failed: EOF
ssh.ParsePrivateKey: ssh: this private key is passphrase protected
原因
1. Xserver のSSH接続制限
Xserver は初期状態で 国内IPアドレスからの接続のみ許可 になっているため、
GitHub Actions(海外のサーバー)からのSSH接続がブロックされていました。
2. 鍵のビット数不足&形式不一致?
最初に作ったSSH鍵が
ssh-keygen -t rsa
のように作成したものだったため、
ビット数が少ない(2048bit以下)
PEM形式でない(appleboyのSSHアクションはPEM形式を推奨)
という問題もあったかもしれない。。。
こちらは検証できていないのでわからない
解決方法
Xserver側の設定変更!
Xserverのサーバーパネルから:
SSH設定 → 「国外IPからの接続も許可」に変更
※セキュリティ的に必要であれば、一時的に変更後、自動化確認が済んだら元に戻す運用もあり。
SSH鍵の再作成(強度&形式)
ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/xserver_deploy
-m PEM: Appleboy/ssh-action に必要
-b 4096: 推奨強度
-f: ファイル名
秘密鍵をGitHubのSecret(例: XSERVER_SSH_KEY)に登録
公開鍵をXserverのSSH設定に登録
GitHub Actions の設定例
コードはこちらのブログを参考に
https://zenn.dev/joh_luck/articles/6e0d029bd6a33a
cd /home/ユーザーID/ドメイン名/public_html/の箇所はプロジェクトのディレクトリに合わせてください。
yaml
name: Release to Develop Environment
on:
push:
branches:
- develop
jobs:
job1:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: ssh and deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SSH_PORT }}
script: |
cd /home/ユーザーID/ドメイン名/public_html/
git checkout develop
git pull origin develop
最終的に成功したログ
pgsql
Already on 'develop'
Your branch is ahead of 'origin/develop' by 4 commits.
From github.com:username/repo
* branch develop -> FETCH_HEAD
Updating 564002a..cd095b6
Fast-forward
index.html | 1 +
1 file changed, 1 insertion(+)
✅ Successfully executed commands to all hosts.
まとめ
トラブル 解決策
接続できない SSH制限を「国外OK」に
それでもダメなら秘密鍵エラー -m PEM -b 4096で作成
Secretsで認識されない 改行・最終行に注意して貼り付け
おわりに
ここまで読んでいただきありがとうございます!
もし同じような構成で詰まった方の参考になれば嬉しいです。