新しくサーバを借りたら、まず最初にやるのが 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で指定して接続します。
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. 手元で鍵ペアを作る
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519-t ed25519 は現行最強の鍵タイプ。-C はコメント(誰の鍵か分かるようメールなど入れる)。-f で出力ファイル名を指定します。
パスフレーズを聞かれます。鍵の盗難リスクに対する最後の防壁になるので、空にせず必ず設定してください。
実行後、2つのファイルが出来上がります:
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.pubid_ed25519(拡張子なし)= 秘密鍵。絶対に外に出さないid_ed25519.pub= 公開鍵。これをサーバに置く
2. 公開鍵をサーバに転送する
方法 A: ssh-copy-id (楽)
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 [email protected]最後にパスワードを聞かれるので、初期パスワードを入力。これで完了。
方法 B: 手動コピー (ssh-copy-id が無い環境向け)
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. 鍵でログインできるか確認
ssh -i ~/.ssh/id_ed25519 -p 22 [email protected]パスワードを聞かれずにログインできれば成功。聞かれたら次節の .ssh/config を見直してください。
4. ~/.ssh/config に登録(毎回オプション指定をなくす)
手元の ~/.ssh/config に書いておくと、以降 ssh エイリアス名 だけで繋がります。
Host myserver
HostName 192.168.1.10
User alice
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yesssh myserver5. サーバ側でパスワードログインを無効化(重要)
鍵で確実にログインできることを確認してから、パスワード認証を切ります。
sudo vi /etc/ssh/sshd_config以下の3行を確認/編集:
# /etc/ssh/sshd_config の該当箇所
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password設定を反映:
sudo sshd -t # 構文チェック(重要:これでエラーがあれば直すまで再起動しない)
sudo systemctl reload sshd現在の SSH セッションは絶対に閉じないこと。新しいターミナルから鍵ログインできるかテストし、確認できてからログアウトします。万一の設定ミスで締め出されたらコンソール(プロバイダのWeb管理画面)からのみ復旧できます。
6. 別ターミナルから動作確認
新しいターミナルを開いて:
ssh myserverすぐログインできれば完了。試しにパスワード認証が無効化されたか確認:
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 no → sshd -t → systemctl reload sshd
別ターミナルで再確認
現セッションは閉じないこと
以上で SSH 鍵認証の設定は完了です。次回からは ssh myserver でログインでき、攻撃者がパスワードを試しても全て弾かれます。



