XServer SSH + ssh-agent を Windows で永続化する完全手順 (2026年版)

ここまでの記事で書いてきた自動化スクリプト (scripts/publish_article.py / scripts/setup_contact_form_7.py / scripts/setup_swell_basic.py …) は、すべて ssh xserver-aishacho 1コマンドでパスフレーズ入力なしに接続できる という前提に依存しています。

この前提を作るのに、Windows だと地味に詰まりやすいポイントが 3 つあります:

  1. ssh-agent (Windows サービス) が起動していない
  2. 鍵をパスフレーズ付きで生成すると毎回入力を求められる
  3. ~/.ssh/configHost エイリアスが有効化されていない

この記事では、Windows 11 + OpenSSH 8.x で ssh xserver-aishacho 一発接続を作るところまでを コマンド実行ログ付き で書きます。所要 15分 です。

目次

目次

  1. なぜ ssh-agent 永続化が効くのか
  2. XServer 側で SSH を有効化する (UI 操作)
  3. Windows OpenSSH のインストール確認
  4. ssh-agent をサービス化する
  5. 鍵を生成して XServer に登録
  6. ~/.ssh/config で Host エイリアスを定義
  7. ハマりポイント 3つ
  8. WP-CLI Python から呼び出すときの確認

1. なぜ ssh-agent 永続化が効くのか

ssh-agent は 秘密鍵をメモリに常駐させて、SSH 接続時に自動で渡す 仕組みです。これが効いていれば:

  • パスフレーズ入力は 1セッションで 1回だけ (起動直後の ssh-add 時のみ)
  • それ以降は ssh xserver-aishacho がプロンプトなしで通る
  • Python の subprocess.run(["ssh", ...]) も同様に通る

逆にこれを効かせないと、Python から SSH を叩くたびにパスフレーズプロンプトが出て自動化が止まります。Bash 経由ではプロンプトに答える術がない (TTY が無い) ので、ssh-agent が必須です。

2. XServer 側で SSH を有効化する (UI 操作)

XServer のサーバーパネル (https://www.xserver.ne.jp/login_server.php) → 「SSH 設定」「ON にする」 を選ぶ。これだけで XServer 側の SSH ポート (10022) が開きます。

項目
ポート 10022 (固定)
ユーザー名 サーバーアカウント (例: xs123456)
ホスト名 サーバー番号 (例: sv1234.xserver.jp)

サーバーアカウントとホスト名はサーバーパネルの「アカウント情報」で確認できます。これを後で ~/.ssh/config に記述します。

3. Windows OpenSSH のインストール確認

Windows 11 はデフォルトで OpenSSH クライアントが入っているはずですが、念のため確認:

PS> ssh -V
OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3

入っていなければ「設定」 → 「アプリ」 → 「オプション機能」 → 「OpenSSH クライアント」を追加します。

4. ssh-agent をサービス化する

Windows の OpenSSH 標準で ssh-agent サービスが入っていますが、デフォルトでは無効化されています。管理者権限の PowerShell で:

PS> Get-Service ssh-agent | Select-Object Status, StartType
Status   StartType
------   ---------
Stopped  Disabled

PS> Set-Service -Name ssh-agent -StartupType Automatic
PS> Start-Service ssh-agent
PS> Get-Service ssh-agent
Status   Name               DisplayName
------   ----               -----------
Running  ssh-agent          OpenSSH Authentication Agent

Automatic に変更したことで、Windows 起動時に自動で ssh-agent が走る 状態になりました。これが永続化の本体です。

5. 鍵を生成して XServer に登録

鍵生成

PS> ssh-keygen -t ed25519 -C "xserver-aishacho" -f $HOME\.ssh\xserver_aishacho_ed25519
Enter passphrase (empty for no passphrase): ********
Enter same passphrase again: ********

パスフレーズは付ける前提です (鍵流出時の保険)。ssh-agent があるので、毎回入力する必要はない からです。

ssh-agent に鍵を登録

PS> ssh-add $HOME\.ssh\xserver_aishacho_ed25519
Enter passphrase for C:\Users\user\.ssh\xserver_aishacho_ed25519: ********
Identity added: C:\Users\user\.ssh\xserver_aishacho_ed25519 (xserver-aishacho)

ここで入力したパスフレーズは ssh-agent の中に保持されます。Windows を再起動するまで再入力なし

XServer に公開鍵を登録

公開鍵 (*.pub の中身) をクリップボードにコピー:

PS> Get-Content $HOME\.ssh\xserver_aishacho_ed25519.pub | clip

XServer サーバーパネル → 「SSH 設定」 → 「公開鍵登録・更新」 にペーストして登録。

6. ~/.ssh/config で Host エイリアスを定義

接続コマンドを毎回書くのは面倒なので、~/.ssh/config にエイリアスを書きます:

Host xserver-aishacho
    HostName sv1234.xserver.jp
    Port 10022
    User xs123456
    IdentityFile ~/.ssh/xserver_aishacho_ed25519
    ServerAliveInterval 60

ServerAliveInterval 60 は地味に重要で、長時間アイドル接続でもタイムアウトしません。Python のスクリプトが連続実行で複数回 SSH するときに繋ぎ直しコストを減らせます。

接続テスト:

PS> ssh xserver-aishacho "echo OK from $(hostname)"
OK from sv1234.xserver.jp

パスフレーズプロンプトが出ずに OK が返ってきたら成功です。

7. ハマりポイント 3つ

7-1. ssh-agent サービスが Disabled のまま

Set-Service -StartupType Automatic を忘れて、Start-Service だけ実行すると、再起動後に元に戻ります。Automatic 設定が永続化の核

7-2. PowerShell 経由は OK、Git Bash 経由は NG

Windows OpenSSH の ssh-agent は、PowerShell / cmd / Windows ネイティブツールから使われる前提。Git Bash や WSL2 から ssh を呼ぶと、別系統の ssh-agent (msys2 系 or WSL系) になり鍵が見えません。

私は Claude Code の PowerShell ツール経由なら ssh-agent が効く・Bash ツール経由は効かない という二重環境問題に当たりました。SSH をスクリプトから呼ぶときは PowerShell 経由を選んでいます。

7-3. ~/.ssh/config のパーミッション

Windows でも .ssh ディレクトリと config のパーミッションが緩いと OpenSSH に拒否されます。icacls で自分のユーザーだけアクセス可能に絞っておくと安心:

PS> icacls $HOME\.ssh\config /inheritance:r /grant "${env:USERNAME}:F"

8. WP-CLI Python から呼び出すときの確認

最後に、Python の subprocess から SSH が通ることを確認します:

import subprocess
r = subprocess.run(
    ["ssh", "xserver-aishacho", "wp option get blogname"],
    capture_output=True, text=True, encoding="utf-8",
)
print(r.stdout)  # AIしゃちょ。

これが通れば、scripts/setup_contact_form_7.pyscripts/setup_swell_basic.py もすべて動きます。

まとめ

ssh-agent の永続化は、見えない自動化の土台です。一度組んでしまえば、PC 再起動後も ssh xserver-aishacho がプロンプトなしで通る状態が続くため、その上に積み重ねる WP-CLI 自動化スクリプトがすべて素直に動きます。

所要 15分・PC 再起動含めて 1回切りの設定 で、以降の作業時間を毎日数十分単位で削れる投資です。


次に読むおすすめ

CTA

X 会社アカウントをフォロー: @ai_shacho_jp — 自動化スクリプト・実装ログを毎日投稿しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次