WordPressの本番作業を調べると、「SSHでつないで、次のコマンドを実行します」という説明に出会います。
SSHは、何に、何をしに接続する方法なのか。
このブログでは、本番のXserverにSSHで接続して作業しています。
実際にコマンドを実行しているのはClaude Codeで、自分は確認役です。
公式の説明と一緒に、SSHの基本をまとめます。
先に結論です。
SSHは、離れたサーバーに安全につなぐ方法です。
鍵のペアで認証する方法がよく使われ、エックスサーバーでは公開鍵認証だけが使えます。
つなぐときは、SSH設定をONにして、ポート10022を指定します。
SSHって、結局なにをするもの?
離れたサーバーにつないで、操作するための方法だよ。
SSHとは?離れたサーバーに、安全につなぐ方法
SSHは、離れたサーバーやサービスに接続して、認証するためのプロトコルです。
プロトコルとは、通信のルールのこと。SSHでは、通信が暗号化されるので、安全につなげます。
GitHubの公式ドキュメントでも、SSHを使うと、リモートのサーバーやサービスに接続して認証できる、と説明されています。
つなぐ先は、レンタルサーバーやGitHubなどです。
コマンドを実行できるサーバーにつないだ場合は、ターミナルからコマンドを実行できます。
ターミナルの基本は、ターミナルの記事にまとめています。
どんなときに出てくる?
SSHが出てくる場面は、たとえば3つです。
- レンタルサーバーの中で、WP-CLIのようなコマンドを実行するとき
- 本番サーバーで、GitHubから最新のコードを取り込む(
git pull)とき - Claude Codeのような、ターミナルで動くAIツールが、SSHでサーバーにつないで作業するとき
鍵認証のしくみ:公開鍵と秘密鍵
SSHのログインは、パスワードではなく、鍵のペアで認証する方法がよく使われます。
GitHubの公式ドキュメントでも、鍵のペアを使う方法が説明されています。
- 秘密鍵:つなぐ側(自分のパソコンなど)に置いておく。つなぐときに、この鍵のファイルを使う
- 公開鍵:つなぐ先に登録しておく
秘密鍵は、人に渡したり、公開したりしません。
サーバーに登録するのは、公開鍵のほうだけです。
つなぐときに、秘密鍵そのものを接続先に渡すわけではありません。
パスワードじゃだめなの?
サーバーによるよ。エックスサーバーは、SSHのパスワード認証は使えなくて、公開鍵認証だけなんだ。
エックスサーバーでの接続情報
エックスサーバーの公式マニュアルには、SSHの接続情報が書かれています。
- ホスト名:サーバーIDを使った
サーバーID.xsrv.jpの形式(sv***.xserver.jpも使える) - ユーザー名:サーバーID
- ポート:10022(OpenSSHの既定は22)
- 認証:公開鍵認証のみ。パスワード認証は使えない
- 登録できる公開鍵:OpenSSH形式のみ
公開鍵の登録は、サーバーパネルのSSH設定から行います。
やり方は2つで、サーバー側で鍵のペアを作って秘密鍵をダウンロードする方法と、自分で作った公開鍵を登録する方法です。
どちらの場合も、先にSSHの設定を「ON」にしておく必要があります。
マニュアルでは、使わないときは「OFF」にしておく運用も案内されています。
国外IPからのアクセスを制限する設定もあります。
初期状態で有効で、マニュアルでは、国外からつなぐ場合以外は有効のままにしておくことが推奨されています。
自分はこう使ってます
接続先に別名をつけて、毎回の入力を省く
毎回入力しなくて済むように、Macの~/.ssh/configというファイルに、接続先の設定を書いておきます。
このブログでは、本番のXserverにxserver-catshandという別名をつけています。
書き方は、こうです。サーバーIDなどの値は、例に置き換えています。
Host xserver-example
HostName xsample.xsrv.jp
Port 10022
User xsample
IdentityFile ~/.ssh/xsample.key
OpenSSHのssh_configのマニュアルでは、HostNameが実際につなぐホスト名、Portが接続先のポート、Userがログインするユーザー名、IdentityFileが公開鍵認証に使う秘密鍵のファイルです。Hostに書いた名前は、コマンドで入力するだけで、これらの設定が使われる別名になります。
書いておけば、ssh xserver-exampleの1行で済みます。
実際は、Claude Codeがこの別名でSSH接続して、コマンドを実行しています。
自分は、Claude Codeからの報告を読んで、何が行われたのかを確認する役です。
秘密鍵のファイルは、どこに置くの?
このブログでは、自分のMacの中に置いてるよ。人に渡したり、クラウドに置いたりはしないんだ。
本番サーバーからGitHubを読む鍵は、読み取り専用にした
このブログのテーマは、ローカルで編集したあと、Claude Codeが変更をコミットしてGitHubにpushし、本番サーバーでgit pullを実行して反映しています。
本番サーバーがGitHubのプライベートリポジトリを読むときにも、SSHの鍵を使います。
ここで使っているのが、デプロイキーです。
鍵は、2方向あります。
- Macから本番サーバーにつなぐ鍵:秘密鍵はMacに置く
- 本番サーバーからGitHubにつなぐ鍵(デプロイキー):秘密鍵は本番サーバーの中にだけ置く
GitHubの公式ドキュメントによると、デプロイキーは、サーバーから1つのリポジトリにアクセスするためのSSH鍵です。
初期状態では読み取り専用で、書き込みを許可する設定も、登録するときに選べます。
制限されるのは、GitHub上のリポジトリへの権限です。
このブログでは、デプロイキーの公開鍵をGitHubのリポジトリに読み取り専用で登録し、秘密鍵を本番サーバーに置いています。
このデプロイキー単体でアクセスできる範囲は、そのリポジトリの読み取りに限られます。
設定の経緯は、Git+GitHubで本番反映する仕組みを作った話に書いています。
SSH接続後の本番作業で止まった例
SSHでつなげるようにすると、接続先で許可された操作ができます。
書き込みを伴う操作では、Claude Codeに確認を求められた内容を、自分が確認します。
止めたのはSSHではなく、Claude Code側の確認と、ツール側の安全機構です。
- Claude Codeに、本番サーバーへSSH経由でWP-CLIの書き込み系コマンド(記事の新規作成)を頼んだら、一度確認を求められて、作業が止まった:Claude Codeの権限まわり、本番サーバー作業で実際に線引きを体感した話
- 本番反映の仕組みを作る途中で、Claude Codeが本番サーバー上で
git reset --hardを使おうとして、ツール側の安全機構に止められた:Git+GitHubで本番反映する仕組みを作った話
迷ったときの確認ポイント
- サーバー側で、SSHの設定が「ON」になっているか
- ホスト名・ポート・ユーザー名が、サーバーのマニュアルと合っているか(エックスサーバーのポートは10022)
- 公開鍵認証のサーバーに、パスワードでつなごうとしていないか
- エックスサーバーに国外からつなぐ場合は、国外IPアクセス制限を確認したか
- 接続先に登録した公開鍵と、指定した秘密鍵が、ペアになっているか
- 秘密鍵のファイルを、人に渡したりクラウドに置いたりしていないか
鍵認証では、つなぐ側に秘密鍵、つなぐ先に公開鍵を置きます。
つながらないときは、サーバー側のSSH設定と、公開鍵の登録を先に確認してください。