株式会社エスロジカル
株式会社エスロジカル
SSL証明書(DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

HOME > 技術ドキュメント > SSH 公開鍵認証・セキュリティ設定(Ubuntu 24.04)

SSH 公開鍵認証・セキュリティ設定(Ubuntu 24.04 LTS)


SSH のパスワード認証を許可したままサーバーを公開すると、ブルートフォース攻撃の標的になります。
公開鍵認証に切り替えてパスワード認証を無効化することが、Linux サーバーのセキュリティ強化の第一歩です。
この記事では Ubuntu 24.04 LTS での公開鍵認証の設定から sshd_config のセキュリティ強化まで順を追って解説します。


公開鍵認証では、数学的にペアになった「公開鍵」と「秘密鍵」を使います。

接続時にサーバーが乱数を秘密鍵で署名させ、公開鍵で検証することで本人確認を行います。 パスワードをネットワーク越しに送信しないため、盗聴・ブルートフォース攻撃に強いです。


手元の 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

最初はパスワード認証でサーバーに接続し、公開鍵を登録します。

# クライアント側から 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 が公開鍵を読み込まないので注意してください。


# クライアントから接続テスト
ssh -i ~/.ssh/id_ed25519 user@your-server-ip

# パスフレーズを設定した場合はパスフレーズを求められる(パスワードではない)

パスワードを入力せず接続できれば成功です。
次のステップでパスワード認証を無効化します。公開鍵認証が確実に動くことを確認してから行ってください。


/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 セッションは切れません。 新しいターミナルを開いて接続できることを確認してから、古いセッションを閉じてください。


デフォルトの 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

手元の ~/.ssh/config に接続先を定義すると、毎回オプションを入力しなくて済みます。

# ~/.ssh/config
Host myserver
    HostName your-server-ip
    User username
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
# 設定後は短縮コマンドで接続できる
ssh myserver

設定項目 推奨値
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 セキュリティ強化


SSH でサーバーを守ったら、次は Web サーバーの SSL証明書(HTTPS 化)でユーザーへの信頼性を確保しましょう。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、 RapidSSL 3,960円/1年(税込)〜で SSL証明書を販売しています。審査サポート・インストール代行も対応しています。

SSL証明書の購入はこちら / 購入から発行までの流れ / インストール代行サービス


← 技術ドキュメント一覧へ戻る