HOME > 技術ドキュメント > SSH 公開鍵認証・セキュリティ設定(Ubuntu 24.04)
SSH 公開鍵認証・セキュリティ設定(Ubuntu 24.04 LTS)
SSH のパスワード認証を許可したままサーバーを公開すると、ブルートフォース攻撃の標的になります。
公開鍵認証に切り替えてパスワード認証を無効化することが、Linux サーバーのセキュリティ強化の第一歩です。
この記事では Ubuntu 24.04 LTS での公開鍵認証の設定から sshd_config のセキュリティ強化まで順を追って解説します。
1. 公開鍵認証の仕組み
公開鍵認証では、数学的にペアになった「公開鍵」と「秘密鍵」を使います。
- 秘密鍵:手元のクライアント PC に保管。外部に出してはいけない。
- 公開鍵:サーバーの
~/.ssh/authorized_keysに登録。漏れても安全。
接続時にサーバーが乱数を秘密鍵で署名させ、公開鍵で検証することで本人確認を行います。 パスワードをネットワーク越しに送信しないため、盗聴・ブルートフォース攻撃に強いです。
2. クライアント側:鍵ペアの生成
手元の PC(接続元)で鍵ペアを作成します。ED25519 は RSA-4096 と同等以上のセキュリティを小さい鍵サイズで実現する現在の推奨アルゴリズムです。
# ED25519 鍵ペアを生成(推奨) ssh-keygen -t ed25519 -C "your_email@example.com" # 保存先を聞かれる(デフォルト: ~/.ssh/id_ed25519) # Enter file in which to save the key (~/.ssh/id_ed25519): [Enter] # パスフレーズを設定(空でも動くが、設定を強く推奨) # Enter passphrase (empty for no passphrase): [パスフレーズを入力]
生成されたファイル:
~/.ssh/id_ed25519 — 秘密鍵(絶対に外部に出さない)
~/.ssh/id_ed25519.pub — 公開鍵(サーバーに登録する)
# 公開鍵の内容を確認 cat ~/.ssh/id_ed25519.pub # ssh-ed25519 AAAA... your_email@example.com
3. サーバー側:公開鍵の登録
最初はパスワード認証でサーバーに接続し、公開鍵を登録します。
# クライアント側から ssh-copy-id を使う方法(最も簡単) ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server-ip # 手動で登録する場合(サーバー上で実行) mkdir -p ~/.ssh chmod 700 ~/.ssh echo "公開鍵の内容をここに貼り付ける" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
パーミッションが正しくないと SSH が公開鍵を読み込まないので注意してください。
4. 公開鍵認証での接続確認
# クライアントから接続テスト ssh -i ~/.ssh/id_ed25519 user@your-server-ip # パスフレーズを設定した場合はパスフレーズを求められる(パスワードではない)
パスワードを入力せず接続できれば成功です。
次のステップでパスワード認証を無効化します。公開鍵認証が確実に動くことを確認してから行ってください。
5. sshd_config のセキュリティ設定
/etc/ssh/sshd_config を編集してセキュリティを強化します。
編集前にバックアップを取ること、そして別の SSH セッションを開いたまま作業することを強く推奨します。
# バックアップを取る sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 設定ファイルを編集 sudo nano /etc/ssh/sshd_config
以下の項目を確認・変更します:
# パスワード認証を無効化(公開鍵認証が確認できてから) PasswordAuthentication no # root でのログインを禁止 PermitRootLogin no # 公開鍵認証を明示的に有効化 PubkeyAuthentication yes # 認証試行回数を制限 MaxAuthTries 3 # 認証失敗後の猶予時間(秒) LoginGraceTime 30 # 不要な認証方式を無効化 KbdInteractiveAuthentication no # 空パスワードを禁止 PermitEmptyPasswords no # 接続が切れた場合のタイムアウト(オプション) ClientAliveInterval 300 ClientAliveCountMax 2
変更を保存したら設定を検証して sshd を再起動します:
# 設定ファイルの文法チェック sudo sshd -t # 問題なければ再起動 sudo systemctl restart ssh # 状態確認 sudo systemctl status ssh
注意: 再起動後、開いている SSH セッションは切れません。 新しいターミナルを開いて接続できることを確認してから、古いセッションを閉じてください。
6. SSH ポートの変更(オプション)
デフォルトの 22 番ポートを変更することで、スキャン・攻撃ログを大幅に減らせます。 セキュリティ的な根本的解決にはなりませんが、ノイズ低減に効果があります。
# /etc/ssh/sshd_config でポートを変更 Port 2222 # 49152〜65535 の範囲のポートを推奨 # UFW でポートを許可してから sshd を再起動 sudo ufw allow 2222/tcp sudo systemctl restart ssh # 接続確認後、元のポート 22 を閉じる sudo ufw delete allow 22/tcp sudo ufw delete allow OpenSSH
接続時はポート番号を指定します:
ssh -p 2222 user@your-server-ip
7. ~/.ssh/config でクライアントの接続設定を簡略化
手元の ~/.ssh/config に接続先を定義すると、毎回オプションを入力しなくて済みます。
# ~/.ssh/config
Host myserver
HostName your-server-ip
User username
Port 2222
IdentityFile ~/.ssh/id_ed25519
# 設定後は短縮コマンドで接続できる ssh myserver
8. セキュリティ設定の確認まとめ
| 設定項目 | 推奨値 |
|---|---|
| PasswordAuthentication | no |
| PermitRootLogin | no |
| PubkeyAuthentication | yes |
| MaxAuthTries | 3 |
| PermitEmptyPasswords | no |
| 鍵アルゴリズム | ED25519(または RSA 4096 ビット) |
| ポート | 22 以外に変更(オプション) |
関連ドキュメント
UFW・Fail2ban 設定(Ubuntu 24.04) — SSH ブルートフォース対策、ファイアウォール設定
Nginx SSL/TLS 設定(Ubuntu 24.04) — HTTPS 設定と TLS セキュリティ強化
SSL証明書でサーバーの信頼性を高める
SSH でサーバーを守ったら、次は Web サーバーの SSL証明書(HTTPS 化)でユーザーへの信頼性を確保しましょう。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、
RapidSSL 3,960円/1年(税込)〜で SSL証明書を販売しています。審査サポート・インストール代行も対応しています。
SSL証明書の購入はこちら / 購入から発行までの流れ / インストール代行サービス
