新サーバの最初の作業:SSH 公開鍵認証を設定する

red padlock on black computer keyboard

新しくサーバを借りたら、まず最初にやるのが SSH 公開鍵認証の設定 です。パスワードログインを禁止することで、ブルートフォース攻撃のリスクをほぼゼロにできます。

上の「環境変数」欄に自分の値を入れてください。ページ全体の 192.168.1.10 alice 22 などが一括であなたの値に書き換わります。書き換わった状態でコピーすればそのままターミナルに貼れます。

前提条件
  • 手元のマシン(macOS / Linux / Windows WSL)
  • 新サーバへの初期 SSH ログイン手段(パスワード or プロバイダ提供の鍵)
  • 鍵を登録するサーバユーザー名(例: alice)と IP(例: 192.168.1.10

Kagoya での Rocky 9 はちょっと違う(GUI登録の鍵・rocky ユーザ)

以下の手順は「手元で鍵を作ってサーバに登録する」一般的な流れですが、Kagoya(カゴヤ・ジャパン)の VPS で Rocky Linux 9 を GUI から構築した場合は、初回ログインまわりの前提が少し異なります。

  • Kagoya の GUI(コントロールパネル)で登録した公開鍵が、rocky ユーザに設置されますroot ではありません)。したがって外部からは rocky ユーザで接続します。
  • 鍵を Kagoya の GUI で生成した場合は、コントロールパネルの 「ログイン用認証キー追加」ボタンから行います。そこで .key ファイル(秘密鍵)が自動でダウンロードされるので、そのファイルを -i で指定して接続します。
bash
chmod 600 ~/Downloads/your-key.key
ssh -i ~/Downloads/your-key.key [email protected]
注意

Kagoya での「鍵は正しいのに繋がらない」の典型は、接続ユーザの取り違えです。root@... で繋ごうとして弾かれているだけ、というケースが多いので、まず rocky ユーザで接続できているか確認してください。なお Kagoya では サーバを初期化(再インストール)した直後だけ、外部から SSH が無反応になることもあります(初期化したサーバ自身から ping 8.8.8.8 を一発打つと直る)。詳しくは Kagoyaでサーバを初期化するとSSHが繋がらない問題 を参照。

つまり Kagoya の Rocky 9 では、初回ログインに必要な鍵は GUI 側で用意済みです。下記の「手元で鍵ペアを作る」を自分でやり直す必要は必ずしもなく、その後のパスワード認証無効化(5節以降)はそのまま役立ちます。

1. 手元で鍵ペアを作る

bash
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519

-t ed25519 は現行最強の鍵タイプ。-C はコメント(誰の鍵か分かるようメールなど入れる)。-f で出力ファイル名を指定します。

ヒント

パスフレーズを聞かれます。鍵の盗難リスクに対する最後の防壁になるので、空にせず必ず設定してください。

実行後、2つのファイルが出来上がります:

bash
ls -la ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
出力
-rw-------  1 you you  411 May 28 16:00 /home/you/.ssh/id_ed25519
-rw-r--r--  1 you you   95 May 28 16:00 /home/you/.ssh/id_ed25519.pub
  • id_ed25519(拡張子なし)= 秘密鍵絶対に外に出さない
  • id_ed25519.pub = 公開鍵。これをサーバに置く

2. 公開鍵をサーバに転送する

方法 A: ssh-copy-id (楽)

bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 [email protected]

最後にパスワードを聞かれるので、初期パスワードを入力。これで完了。

方法 B: 手動コピー (ssh-copy-id が無い環境向け)

bash
cat ~/.ssh/id_ed25519.pub | ssh -p 22 [email protected] \
  "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

3. 鍵でログインできるか確認

bash
ssh -i ~/.ssh/id_ed25519 -p 22 [email protected]

パスワードを聞かれずにログインできれば成功。聞かれたら次節の .ssh/config を見直してください。

4. ~/.ssh/config に登録(毎回オプション指定をなくす)

手元の ~/.ssh/config に書いておくと、以降 ssh エイリアス名 だけで繋がります。

~/.ssh/configssh-config
Host myserver
    HostName  192.168.1.10
    User      alice
    Port      22
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes
bash
ssh myserver

5. サーバ側でパスワードログインを無効化(重要)

鍵で確実にログインできることを確認してから、パスワード認証を切ります。

bash
sudo vi /etc/ssh/sshd_config

以下の3行を確認/編集:

sshd_config
# /etc/ssh/sshd_config の該当箇所
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password

設定を反映:

bash
sudo sshd -t            # 構文チェック(重要:これでエラーがあれば直すまで再起動しない)
sudo systemctl reload sshd
やってはいけないこと

現在の SSH セッションは絶対に閉じないこと。新しいターミナルから鍵ログインできるかテストし、確認できてからログアウトします。万一の設定ミスで締め出されたらコンソール(プロバイダのWeb管理画面)からのみ復旧できます。

6. 別ターミナルから動作確認

新しいターミナルを開いて:

bash
ssh myserver

すぐログインできれば完了。試しにパスワード認証が無効化されたか確認:

bash
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no -p 22 [email protected]
出力
[email protected]: Permission denied (publickey).

このように publickey のみ と表示されればOKです。

まとめ

手元で ed25519 鍵を生成

ssh-keygen -t ed25519

公開鍵をサーバに転送

ssh-copy-id で楽に

鍵でログインできるかテスト

先に必ず確認

サーバ側でパスワード認証を無効化

PasswordAuthentication nosshd -tsystemctl reload sshd

別ターミナルで再確認

現セッションは閉じないこと

以上で SSH 鍵認証の設定は完了です。次回からは ssh myserver でログインでき、攻撃者がパスワードを試しても全て弾かれます。