導入
このブログのキャッチコピーは「未来の自分のための技術メモ、時々あなたのためのヒント。」ですが、今回はあなたのWordPressサイトが動くサーバーを守る、最重要セキュリティ設定に関するヒントです。
「レンタルサーバーからVPSに移行したけど、SSH接続って毎回パスワード入力が面倒…」
「サーバーへの不正アクセスが心配…」
もしあなたがVPSなどでWordPressを運用しているなら、サーバーにSSH(Secure Shell)で接続する機会が多いはずです。しかし、このSSH接続に毎回同じパスワードを使っていたり、短いパスワードを使っていたりすると、あなたのサーバーは非常に危険な状態にあるかもしれません。
この記事では、そんな悩みを一挙に解決する「SSH公開鍵認証」について、その仕組みから具体的な設定手順、そして万全のセキュリティ対策まで、初心者の方でも確実に設定できるよう徹底的に解説します。
SSH公開鍵認証とは? パスワードより安全で便利な「デジタルな鍵」
SSH公開鍵認証は、あなたのサーバーへのアクセスを、まるで「自宅の鍵」のように安全かつ便利にする仕組みです。
通常のパスワード認証は「合言葉」のようなものですが、公開鍵認証は**「秘密鍵」と「公開鍵」というペアのデジタルな鍵**を使います。
例えるなら…
- あなたの手元(クライアントPC) には、絶対に他人に見せてはいけない**「秘密のマスターキー(秘密鍵)」**があります。
- サーバーの玄関(Linuxサーバー) には、「秘密のマスターキー」とセットでしか開かない特殊な錠前(公開鍵)が取り付けられています。
接続を試みると、サーバーは公開鍵を使って、あなたの手元にある「秘密のマスターキー」が正しいものかを安全に確認します。
なぜ安全なの?
- あなたの「秘密のマスターキー」は、あなたのPCから一切外に出ることがありません。 サーバーに渡されるのは、マスターキーが本物であるという「証明」だけです。
- 「公開鍵」から「秘密鍵」を特定することは、現実世界で錠前から鍵を複製する以上に非常に困難です。
- これにより、パスワード認証よりもはるかに強固なセキュリティを実現できます。
なぜ便利なの?
- 一度設定すれば、毎回パスワードを入力する必要がなくなり、スムーズにサーバーに接続できます。日々の作業効率が格段に上がります。
SSH公開鍵認証の具体的な設定手順
それでは、いよいよ具体的な設定手順に入ります。焦らず、一つ一つの手順を確実に実行していきましょう。
Step 1: あなたのPCで「秘密のマスターキー」と「特殊な錠前」を作る
まずは、SSH接続を行うあなたのPC(Windows, macOS, Linuxなど)で、秘密鍵と公開鍵のペアを生成します。
# コマンドを実行
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-keygen
: SSH鍵ペアを生成するコマンドです。-t rsa
: 鍵の暗号方式を指定します。一般的に使われるRSA方式です。(より新しいed25519
も推奨されますが、まずはRSAでOK)-b 4096
: 鍵のビット数(強度)です。2048
以上が推奨されています。数字が大きいほど解読されにくくなります。-C "your_email@example.com"
: 鍵にコメントを付与します。誰の鍵か分かりやすくするために、自分のメールアドレスなどを入れておくと良いでしょう。
このコマンドを実行すると、以下のような質問が対話形式で表示されます。
- Enter file in which to save the key (/home/youruser/.ssh/id_rsa):鍵ファイルを保存する場所とファイル名です。デフォルトのまま(~/.ssh/id_rsa)で問題ありません。エンターキーを押しましょう。
- Enter passphrase (empty for no passphrase):「パスフレーズ」を設定します。これは、秘密鍵を使う際に必要な「追加のパスワード」のようなものです。セキュリティ向上のため、必ず設定することを強く推奨します。 パスフレーズを設定しておけば、万が一秘密鍵が誰かに盗まれても、パスフレーズを知らなければ勝手に使われる心配がありません。(「パスワードレス接続」と言っても、このパスフレーズは初回接続時や秘密鍵を使うアプリ起動時に一度だけ入力が必要になります。全く入力したくない場合は空欄にできますが、セキュリティリスクは上がります。)
- Enter same passphrase again:設定したパスフレーズをもう一度入力します。
このコマンドにより、通常~/.ssh/
ディレクトリ(Windowsの場合はユーザーフォルダ内の.ssh
フォルダ)に以下の2つのファイルが生成されます。
id_rsa
: これがあなたの「秘密のマスターキー」です。誰にも見せてはいけません。 厳重に管理してください。id_rsa.pub
: これが「特殊な錠前(公開鍵)」です。これをサーバーに設置します。
Step 2: 「特殊な錠前」をサーバーの玄関に取り付ける
次に、生成した公開鍵 (id_rsa.pub
) を、SSH接続したいLinuxサーバーにアップロードし、設定します。
最も簡単で確実な方法:ssh-copy-id
コマンドを使う
# 公開鍵をサーバーにコピー(初回接続時はパスワードを求められます)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@your_server_ip_or_domain
-i ~/.ssh/id_rsa.pub
: コピーしたいあなたの公開鍵ファイルを指定します。user@your_server_ip_or_domain
: サーバーへのログイン情報です。user
:サーバーのユーザー名(例:root
やubuntu
,centos
など)。your_server_ip_or_domain
:サーバーのIPアドレス(例:192.168.1.100
)またはドメイン名。
このコマンドは、初回接続時にサーバーのログインパスワードを求めます。パスワードが正しければ、サーバーのユーザーディレクトリにある~/.ssh/authorized_keys
ファイルに、あなたの公開鍵を自動的に追加してくれます。また、authorized_keys
ファイルの適切なパーミッション(権限)設定も自動で行ってくれるため、非常に便利です。
ssh-copy-id
が使えない、または手動で設定する場合
もし何らかの理由でssh-copy-id
が使えない場合は、手動で公開鍵をサーバーにコピーし、設定することも可能です。
1. 公開鍵ファイルをサーバーにコピーする:
# あなたのPCから実行
scp ~/.ssh/id_rsa.pub user@your_server_ip_or_domain:/tmp/id_rsa.pub
scp
はファイルをSSH経由で安全にコピーするコマンドです。
2. サーバーにSSH接続し、公開鍵を登録する:
# あなたのPCからサーバーにSSH接続(この時はまだパスワード認証)
ssh user@your_server_ip_or_domain
# サーバー上で実行
# .sshディレクトリが存在しない場合は作成
mkdir -p ~/.ssh
# 公開鍵をauthorized_keysファイルに追加(既にファイルがある場合は追記)
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
# authorized_keysファイルのパーミッションを厳しく設定(必須!)
chmod 600 ~/.ssh/authorized_keys
# .sshディレクトリのパーミッションも厳しく設定(必須!)
chmod 700 ~/.ssh
# コピーした一時ファイルを削除
rm /tmp/id_rsa.pub
exit # サーバーからログアウト
chmod 600
は、そのファイルが「所有者のみ読み書き可能」であることを意味します。authorized_keys
の権限が緩いと、セキュリティエラーで公開鍵認証が機能しません。
Step 3: サーバーの「玄関」から「合言葉(パスワード)」をなくす(任意だが強く推奨!)
セキュリティをさらに高めるため、サーバー側でSSHのパスワード認証を無効化し、公開鍵認証のみを受け付けるように設定することを強く推奨します。これにより、パスワードを総当たりで破ろうとする攻撃(ブルートフォースアタック)からサーバーを守れます。
# サーバー上でSSH設定ファイルを開く
sudo vi /etc/ssh/sshd_config
以下の設定項目を見つけて、変更します。
# -------------------------------------------------------------
# 変更前 (コメントアウトされている場合や yes になっている場合)
# PasswordAuthentication yes
# 変更後 (パスワード認証を完全に無効化)
PasswordAuthentication no
# 公開鍵認証を有効にする (通常はデフォルトで yes)
PubkeyAuthentication yes
設定を変更したら、SSHサービスを再起動して反映させます。
sudo systemctl restart sshd
【超重要注意点!】
このPasswordAuthentication noを設定する前に、必ずStep 4に進み、公開鍵認証で正常にログインできることを確認してください。 もしログインできない状態でパスワード認証を無効にしてしまうと、サーバーにSSHでアクセスできなくなり、大変な事態に陥ります。
Step 4: SSH接続をテストする!
クライアントPCから、通常通りSSH接続を試します。
ssh user@your_server_ip_or_domain
- パスフレーズを設定した場合: あなたが設定したパスフレーズの入力が求められます。これを入力すれば、パスワードの入力なしでサーバーにログインできるはずです。
- パスフレーズを空欄にした場合: そのままパスワード入力なしでサーバーにログインできるはずです。
これで、パスワード不要で安全なSSH接続が確立されました!
トラブルシューティング:もしうまくいかなかったら?
- 「Permission denied (publickey).」エラー:
- サーバーの
~/.ssh/authorized_keys
ファイルのパーミッションが正しく設定されていない可能性があります。chmod 600 ~/.ssh/authorized_keys
、chmod 700 ~/.ssh
を再確認してください。 - 公開鍵が
authorized_keys
ファイルに正しく追加されていないか、誤って違う鍵をコピーしている可能性があります。 - クライアントPC側の秘密鍵のパーミッションが緩すぎる(
chmod 600 ~/.ssh/id_rsa
より緩い)場合も発生します。
- サーバーの
- 「Connection refused」エラー:
- サーバー側のSSHサービスが起動していないか、ファイアウォールでSSHポート(通常22番)がブロックされている可能性があります。
sudo systemctl status sshd
でサービス状況を確認し、sudo firewall-cmd --add-service=ssh --permanent
などでファイアウォール設定を確認・追加してください。
- サーバー側のSSHサービスが起動していないか、ファイアウォールでSSHポート(通常22番)がブロックされている可能性があります。
ssh-copy-id
が動かない:ssh-copy-id
コマンド自体がインストールされていない可能性があります(Linuxでは通常プリインストール)。手動での設定(Step 2後半)を試してください。
まとめ
SSH公開鍵認証の設定は、サーバー管理の第一歩として非常に重要であり、WordPressサイトのセキュリティを根本から強化する対策です。これにより、日々のサーバーへのアクセスが安全かつスムーズになり、あなたの大切なサイトを不正アクセスから守ることができます。
最初は少し難しく感じるかもしれませんが、一度設定してしまえば、その恩恵は計り知れません。この記事が、あなたのサーバー管理をより安心で快適なものにするための「ヒント」になれば幸いです。
コメント