Ubuntuのsshd_config設定項目を完全解説【セキュリティ強化】

設定

UbuntuのSSHサーバーを設定する /etc/ssh/sshd_config には、セキュリティに直結する設定項目が数十個あります。正直、「どれをどう変えればいいのか分からない」という人は多いです。本記事では、Ubuntu 24.04 LTS(OpenSSH 9.6p1)のインストール直後のデフォルト値を実際に取得し、各設定項目の意味と推奨値を具体的に解説します。

検証には ubuntu:24.04 の公式Dockerイメージを使い、openssh-server を実インストールして sshd -T コマンドで全設定値を実取得しました。記事内の数値はすべてこの実測値です(検証日: 2026-06-15)。

この記事のポイント

  • sshd -T でsshd_configの「実際に適用される全設定値」を確認できます(実測: Ubuntu 24.04 / openssh-server 1:9.6p1-3ubuntu13.16、出力は全95行)
  • デフォルトは passwordauthentication yesx11forwarding yesallowtcpforwarding yesmaxauthtries 6 — いずれも本番環境ではリスクのある設定です(実測)
  • Ubuntu 24.04 では /etc/ssh/sshd_config.d/ にドロップイン設定ファイルを置くのが推奨の変更方法です(メインファイル12行目に Include 行あり)
  • 設定変更後は sshd -t で構文チェックをしてから systemctl restart ssh を実行することで、設定ミスによるロックアウトを防げます(実測で CONFIG TEST: PASSED を確認)
  • Ubuntu 22.04(OpenSSH 8.9p1)と 24.04(9.6p1)のデフォルト設定値は主要項目でほぼ同一でした(実測比較済み)
  1. 目次
  2. sshd_configとは何か
  3. 設定ファイルの場所と構造
    1. ①メインの設定ファイル
    2. ②ドロップインディレクトリ(Ubuntu 24.04 推奨)
  4. sshd -T で現在の設定値を確認する
  5. 主要設定項目を完全解説
    1. ①Port — 待ち受けポート
    2. ②PermitRootLogin — rootログインの制御
    3. ③PasswordAuthentication — パスワード認証の有効/無効
    4. ④PubkeyAuthentication — 公開鍵認証の有効/無効
    5. ⑤MaxAuthTries — 認証試行回数の上限
    6. ⑥LoginGraceTime — ログイン猶予時間
    7. ⑦ClientAliveInterval / ClientAliveCountMax — クライアント死活監視
    8. ⑧X11Forwarding — Xウィンドウの転送
    9. ⑨AllowTcpForwarding — TCPポート転送
    10. ⑩UseDNS — DNSによる逆引き
    11. ⑪Subsystem sftp — SFTPの設定
    12. ⑫Banner — 接続時の警告バナー
  6. セキュリティ強化の実践(ドロップイン設定)
    1. 手順1:設定ファイルを作成する
    2. 手順2:設定テストを実行する
    3. 手順3:設定値を確認する
    4. 手順4:sshを再起動する
  7. 鍵認証の設定と確認
    1. ①Ed25519鍵ペアを生成する
    2. ②公開鍵をサーバーに登録する
    3. ③鍵認証で接続できることを確認する
  8. Ubuntu 22.04 vs 24.04 の設定の違い
  9. よくあるエラーと解決策
    1. エラー1:「Permission denied (publickey)」と表示される
    2. エラー2:設定変更後に「Connection refused」になる
    3. エラー3:「Bad configuration option」というsshd -t エラー
    4. エラー4:sshd_config.d の設定が反映されない
  10. まとめ

目次

  1. sshd_configとは何か
  2. 設定ファイルの場所と構造
  3. sshd -T で現在の設定値を確認する
  4. 主要設定項目を完全解説
  5. セキュリティ強化の実践(ドロップイン設定)
  6. 鍵認証の設定と確認
  7. Ubuntu 22.04 vs 24.04 の設定の違い
  8. よくあるエラーと解決策
  9. まとめ

sshd_configとは何か

sshd_config は、LinuxのSSHサーバー(OpenSSH の sshd。リモートから暗号化通信でログインするためのサーバープログラム)の動作を制御する設定ファイルです。「誰がどのように接続できるか」「どの認証方式を使うか」「どのポートで待ち受けるか」など、SSHサーバーの全ての挙動をこのファイルで定義します。

VPSを借りてUbuntuをセットアップする場合、デフォルトのsshd_configはセキュリティ的に甘い部分があります。後述の実測のとおりパスワード認証が有効になっていたり、rootログインが鍵経由で許可されていたりするため、本番で使う前に必ず設定を見直す必要があります。

設定ファイルの場所と構造

①メインの設定ファイル

メインの設定ファイルは /etc/ssh/sshd_config です。Ubuntu 24.04 の openssh-server をインストールした直後の状態を実際に確認してみます。




root@ubuntu2404: ~ (ubuntu:24.04 で実測)
$ wc -l < /etc/ssh/sshd_config
131
$ grep -n ‘Include’ /etc/ssh/sshd_config
12:Include /etc/ssh/sshd_config.d/*.conf

実測したところ、デフォルトの sshd_config は131行で、その大半はデフォルト値をコメント(行頭 #)として示しただけの「リファレンス」です。実際に効いている行はごくわずかで、本当の挙動は次の sshd -T で確認します。

②ドロップインディレクトリ(Ubuntu 24.04 推奨)

上の実測で見えたとおり、12行目に Include /etc/ssh/sshd_config.d/*.conf という行があります。これはこのディレクトリに置いた .conf ファイルをメインファイルより優先して読み込むことを意味します。




root@ubuntu2404: ~ (ubuntu:24.04 で実測)
$ ls -la /etc/ssh/sshd_config.d/
total 8
drwxr-xr-x 2 root root 4096 Apr 28 00:29 .
drwxr-xr-x 4 root root 4096 Jun 15 06:10 ..

クリーンな openssh-server インストール直後(公式Dockerイメージ)では、このディレクトリは空でした。一方で、ConoHaやVultrなどのクラウドVPSで配布されるUbuntuイメージでは、cloud-init が 50-cloud-init.conf を自動で置いていることがよくあります。メインファイルを直接編集するより、/etc/ssh/sshd_config.d/99-custom.conf のようなファイルを新規作成して設定を上書きする方が、openssh-server のアップデート時に設定が上書きされにくく安全です。

注意

ファイル名は辞書順で読み込まれます。99-custom.conf のように番号を大きくすると、他のドロップイン(例: 50-cloud-init.conf)より後に読み込まれ確実に上書きできます。

sshd -T で現在の設定値を確認する

設定の確認には sshd -T コマンドが非常に便利です。コメントアウト行を除いた「実際に適用される全設定値」を一覧表示できます。cat で設定ファイルを見るだけでは分からない、明示していないデフォルト値も含めてすべて確認できます。実測では出力は全95行ありました。




root@ubuntu2404: ~ (OpenSSH_9.6p1 Ubuntu-3ubuntu13.16)
$ sshd -T | grep -E ‘^(port|permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries|logingracetime|clientaliveinterval|clientalivecountmax|x11forwarding|allowtcpforwarding|usedns|banner)’
port 22
permitrootlogin without-password
pubkeyauthentication yes
passwordauthentication yes
maxauthtries 6
logingracetime 120
clientaliveinterval 0
clientalivecountmax 3
x11forwarding yes
allowtcpforwarding yes
usedns no
banner none

これが ubuntu:24.04 + openssh-server 1:9.6p1-3ubuntu13.16 で実際に取得したデフォルト値です。passwordauthentication yesx11forwarding yesallowtcpforwarding yes が目立ちます。本番サーバーではこのあたりを必ず見直してください。

Ubuntu 24.04 でのsshd -T 実行結果(実測)
Ubuntu 24.04 でのsshd -T 実行結果(実測)

実際にコンテナのターミナルで sshd -T を叩いた画面がこちらです。色分けは編集部によるものですが、表示されている値はすべて実際の出力です。

sshd -T のデフォルト出力を実ターミナルで撮影(実測)
sshd -T のデフォルト出力を実ターミナルで撮影(実測)
著者アイコン
著者アイコン

sshd -T は設定トラブルのときにも大活躍します。「変更したのに反映されない」という場合、このコマンドで実際に適用されている値を確認するとすぐ原因が分かります。

主要設定項目を完全解説

実測したデフォルト値と、本番サーバーでの推奨値を一覧にまとめました。

sshd_config主要設定項目一覧(実測値付き)
sshd_config主要設定項目一覧(実測値付き)

①Port — 待ち受けポート

デフォルト値(実測): 22

SSHの標準ポートです。変更することで、自動スキャン(ポートスキャン)による攻撃の試行回数を大幅に減らせます。ただし、ポート変更はセキュリティの根本解決にはなりません。鍵認証への切り替えとセットで行うのが正しい考え方です。




/etc/ssh/sshd_config.d/
# /etc/ssh/sshd_config.d/99-custom.conf への追記例
Port 2222

注意

Ubuntu 24.04 では systemd の socket activation(ssh.socket)が使われています。Port を変更した場合は sshd_config の設定変更だけでなく、systemctl daemon-reload && systemctl restart ssh.socket が必要です。変更前に ufw でそのポートを開放することも忘れないでください。

②PermitRootLogin — rootログインの制御

デフォルト値(実測): without-password(= prohibit-password と同義)

設定できる値と意味は次のとおりです。

設定値 意味 推奨
yes パスワード・鍵どちらでもrootログイン可 ✗ 危険
without-password 鍵認証でのみrootログイン可(デフォルト) △ 鍵認証に限定
prohibit-password without-passwordと同じ(新しい表記) △ 同上
no rootログインを完全禁止 ◎ 本番推奨
forced-commands-only authorized_keysに command= を指定した場合のみ可 △ 特殊用途

本番サーバーでは PermitRootLogin no にして、root権限が必要な作業は一般ユーザーで接続後に sudo で行うのが正しい運用です。

③PasswordAuthentication — パスワード認証の有効/無効

デフォルト値(実測): yes

これが本番サーバーで最初に変更すべき設定です。パスワード認証が有効だと、ブルートフォース攻撃(総当たり攻撃)の対象になります。鍵認証(PubkeyAuthentication)を設定した後に、必ず no に変更してください。

注意

鍵認証の設定(authorized_keys の登録)が完了していることを確認してから PasswordAuthentication no にしてください。鍵の設定前に変更すると、サーバーにログインできなくなります。

④PubkeyAuthentication — 公開鍵認証の有効/無効

デフォルト値(実測): yes

公開鍵認証は最初から有効になっています。あとは ~/.ssh/authorized_keys に公開鍵を登録するだけで使えます。実測では AuthorizedKeysFile の値は .ssh/authorized_keys .ssh/authorized_keys2 でした — 古い authorized_keys2 も読みますが、新規では使わないようにしましょう。

⑤MaxAuthTries — 認証試行回数の上限

デフォルト値(実測): 6

1つのSSH接続セッションで許可される認証失敗回数の上限です。本番では 3 に下げるのが一般的です。上限に達すると接続が切断されます(Fail2banと組み合わせるとさらに効果的です)。

⑥LoginGraceTime — ログイン猶予時間

デフォルト値(実測): 120(秒)

接続してから認証完了までに許容される時間です。120秒(2分)は長すぎます。30(30秒)程度に短縮することで、認証待機中の接続を長時間占有される攻撃を軽減できます。

⑦ClientAliveInterval / ClientAliveCountMax — クライアント死活監視

デフォルト値(実測): ClientAliveInterval 0(無効)/ ClientAliveCountMax 3

ClientAliveInterval は、SSHサーバーがクライアントに「生きてる?」と確認するメッセージを送る間隔(秒)です。0 だと確認しません。VPSで長時間放置された接続がゾンビ化するのを防ぐため、300(5分)程度に設定するのが一般的です。

設定項目 デフォルト(実測) 推奨値 効果
ClientAliveInterval 0(無効) 300 300秒ごとに確認パケットを送信
ClientAliveCountMax 3 2 2回応答なしで切断(300×2=600秒でタイムアウト)

⑧X11Forwarding — Xウィンドウの転送

デフォルト値(実測): yes

SSH経由でGUIアプリケーションを転送する機能です。サーバー用途では必要ありません。no に設定することで攻撃面を減らせます。

⑨AllowTcpForwarding — TCPポート転送

デフォルト値(実測): yes

SSHトンネリングを許可する設定です。特定の用途(社内VPNの代替など)で使う場合は有効のままにしますが、一般的なサーバーでは no にしておくべきです。

⑩UseDNS — DNSによる逆引き

デフォルト値(実測): no

クライアントのIPアドレスをDNSで逆引きしてホスト名を取得する設定です。実測でもデフォルトは no なのでそのままで問題ありません。yes にすると接続時にDNSクエリが走り、接続が遅くなることがあります。

⑪Subsystem sftp — SFTPの設定

デフォルト値(実測): sftp /usr/lib/openssh/sftp-server

SFTPサブシステムの設定です。ファイル転送が必要ない場合はこの行を無効化することでさらに攻撃面を減らせますが、多くの場合はSFTPが必要なのでそのままで問題ありません。

⑫Banner — 接続時の警告バナー

デフォルト値(実測): none

SSH接続時(認証前)に表示するメッセージのファイルパスを指定します。セキュリティポリシー上、「不正アクセス禁止」などの警告を表示したい場合に設定します。




root@ubuntu2404: ~
$ sudo tee /etc/issue.net << ‘EOF’
*************************************
警告: このシステムへの不正アクセスは
法律により処罰されます。
*************************************
EOF
# sshd_config.d に Banner の設定を追加
$ echo ‘Banner /etc/issue.net’ | sudo tee -a /etc/ssh/sshd_config.d/99-custom.conf

セキュリティ強化の実践(ドロップイン設定)

Ubuntu 24.04 では /etc/ssh/sshd_config を直接編集するより、/etc/ssh/sshd_config.d/ にドロップインファイルを作成する方法が推奨されています。メインファイルへの変更は最小限にとどめ、カスタマイズは別ファイルで管理することで、openssh-server のアップデート時に設定が上書きされるリスクを減らせます。実際に ubuntu:24.04 コンテナで一連の手順を実行し、設定が反映されることを確認しました。

手順1:設定ファイルを作成する




root@ubuntu2404: ~
$ sudo tee /etc/ssh/sshd_config.d/99-hardening.conf << ‘EOF’
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowTcpForwarding no
EOF

手順2:設定テストを実行する

設定を反映させる前に、必ず構文チェックを実行してください。実測ではこのチェックが通りました。




root@ubuntu2404: ~
$ sudo sshd -t && echo ‘CONFIG TEST: PASSED’
CONFIG TEST: PASSED

エラーが出た場合は、設定ファイルに誤りがあります。sshd -t のエラーメッセージを見て修正してください。

手順3:設定値を確認する




root@ubuntu2404: ~
$ sudo sshd -T | grep -E ‘^(permitrootlogin|passwordauthentication|maxauthtries|logingracetime|clientaliveinterval|clientalivecountmax|x11forwarding|allowtcpforwarding)’
permitrootlogin no
passwordauthentication no
maxauthtries 3
logingracetime 30
clientaliveinterval 300
clientalivecountmax 2
x11forwarding no
allowtcpforwarding no

全設定値が意図どおりに上書きされていることを確認したら、sshdを再起動します。この適用前後の流れを実際のターミナルで撮影したのが次の画面です。

セキュリティ強化設定の適用前後(実測)
セキュリティ強化設定の適用前後(実測)
ドロップイン設定の適用と sshd -t 構文チェックを実ターミナルで撮影(実測)
ドロップイン設定の適用と sshd -t 構文チェックを実ターミナルで撮影(実測)

手順4:sshを再起動する




ubuntu@server: ~
$ sudo systemctl restart ssh
$ sudo systemctl status ssh
● ssh.service – OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled)
Active: active (running) since …

注意

PasswordAuthentication no に変更する前に、鍵認証でログインできることを別のターミナルウィンドウで確認してください。設定ミスのままsshdを再起動すると、ログインできなくなる危険があります。

鍵認証の設定と確認

PasswordAuthentication no に変更するためには、事前に公開鍵認証を設定する必要があります。Ubuntu 24.04 で推奨される Ed25519 鍵の生成手順を確認します。実測では ubuntu:24.04(OpenSSH 9.6p1)でそのまま ssh-keygen が使えました。

①Ed25519鍵ペアを生成する




ローカルPC(接続元): ~
$ ssh-keygen -t ed25519 -C “user@linuxlab.jp” -f ~/.ssh/id_ed25519
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
$ ssh-keygen -lf ~/.ssh/id_ed25519.pub
256 SHA256:3+fdcSik6qfaEimxSSp1/RmvbYGGKiJcsGS/uJuCDTY user@linuxlab.jp (ED25519)
$ stat -c ‘%n %s bytes’ ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
/home/user/.ssh/id_ed25519 411 bytes
/home/user/.ssh/id_ed25519.pub 98 bytes

Ubuntu 24.04 で実際に確認したファイルサイズ: Ed25519 秘密鍵 411 bytes・公開鍵 98 bytes。同じく実測した RSA-4096(秘密鍵 3381 bytes・公開鍵 742 bytes)と比べてコンパクトで、セキュリティ強度は同等以上です。

ed25519 と RSA-4096 の鍵サイズ実測(実測)
ed25519 と RSA-4096 の鍵サイズ実測(実測)

②公開鍵をサーバーに登録する




ローカルPC(接続元): ~
# ssh-copy-id で公開鍵を登録(最も簡単な方法)
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server-ip
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “…”
Number of key(s) added: 1
Now try logging into the machine, with: ssh ‘user@your-server-ip’

③鍵認証で接続できることを確認する




ローカルPC(接続元): ~
$ ssh -i ~/.ssh/id_ed25519 user@your-server-ip
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-xx-generic x86_64)
user@server:~$

鍵認証でのログインが確認できたら、前のセクションの手順で PasswordAuthentication no を設定してsshdを再起動してください。

Ubuntu 22.04 vs 24.04 の設定の違い

Ubuntu 22.04 と 24.04 では OpenSSH のバージョンが 8.9p1 から 9.6p1 にアップグレードされています。実際に両バージョンのDockerコンテナで openssh-server をインストールして検証した結果を紹介します。

Ubuntu 22.04 vs 24.04 OpenSSH比較(実測)
Ubuntu 22.04 vs 24.04 OpenSSH比較(実測)
確認項目 Ubuntu 22.04 LTS(実測) Ubuntu 24.04 LTS(実測)
OpenSSH バージョン 8.9p1 9.6p1
パッケージ 1:8.9p1-3ubuntu0.15 1:9.6p1-3ubuntu13.16
OpenSSL バージョン 3.0.2 3.0.13
PermitRootLogin(デフォルト) without-password without-password
PasswordAuthentication(デフォルト) yes yes
X11Forwarding(デフォルト) yes yes
KbdInteractiveAuthentication no no
LTS標準サポート終了 2027年4月 2029年4月

実測で確認したところ、22.04 と 24.04 のデフォルト設定値(sshd -T の結果)は主要項目でほぼ同じでした。最大の違いはOpenSSH本体のバージョンアップによる暗号化アルゴリズムのサポート範囲です。新規サーバーを構築するなら、サポート期間が長くOpenSSHも新しい 24.04 を選んでください。

よくあるエラーと解決策

エラー1:「Permission denied (publickey)」と表示される

鍵認証でログインしようとしたときにこのエラーが出る場合の確認ポイントです。




ubuntu@server: ~
# サーバー側: パーミッションを確認
$ ls -la ~/.ssh/
drwx—— 2 user user 4096 Jun 15 … .ssh/ ← 700 でなければNG
-rw——- 1 user user xxx Jun 15 … authorized_keys ← 600 でなければNG
# 修正コマンド
$ chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

パーミッションが間違っていると PubkeyAuthentication yes でも鍵認証が動作しません。~/.ssh/700authorized_keys600 が必須です。

エラー2:設定変更後に「Connection refused」になる

PasswordAuthentication no にした直後に接続できなくなった場合の復旧手順です。

注意

VPSのコントロールパネルからシリアルコンソール(VNCコンソール)にアクセスして、/etc/ssh/sshd_config.d/99-hardening.confPasswordAuthentication no の行を削除し、sudo systemctl restart ssh を実行してください。その後、鍵認証の設定を確認してから再度変更します。

エラー3:「Bad configuration option」というsshd -t エラー




ubuntu@server: ~
$ sudo sshd -t
/etc/ssh/sshd_config.d/99-hardening.conf: line 3: Bad configuration option: PasswordAuthentication

設定ファイルのタイポ(スペルミス)が原因です。PasswordAuthentication のような長い単語はスペルをよく確認してください。設定ファイルを開いて修正した後、再度 sshd -t でチェックします。実測でも、正しく書けていれば sshd -tCONFIG TEST: PASSED となります。

エラー4:sshd_config.d の設定が反映されない




ubuntu@server: ~
# sshd_config.d/ のIncludeが有効か確認
$ grep ‘Include’ /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
# ファイルが存在するか確認
$ ls /etc/ssh/sshd_config.d/
50-cloud-init.conf 99-hardening.conf
# 設定値の確認
$ sudo sshd -T | grep permitrootlogin
permitrootlogin no

クラウドVPSでは 50-cloud-init.conf が先に置かれていることがあります。sshd -T で設定値が正しく反映されているにもかかわらず挙動が変わらない場合は、sudo systemctl restart ssh でsshdを再起動してください。

まとめ

Ubuntu 24.04 の /etc/ssh/sshd_config について、Dockerコンテナで実際に検証した主要ポイントをまとめます。

  • sshd -T コマンドで現在の全設定値を確認できる(デフォルト値含む・実測で全95行)
  • インストール直後は passwordauthentication yesx11forwarding yesallowtcpforwarding yesmaxauthtries 6 — 本番には不適切
  • 設定変更は /etc/ssh/sshd_config.d/99-custom.conf にドロップインファイルを作成するのが推奨
  • 変更後は必ず sshd -t で構文チェックをしてから systemctl restart ssh を実行する
  • Ubuntu 22.04(OpenSSH 8.9p1)→ 24.04(9.6p1)でバージョンアップ。主要デフォルト設定値はほぼ同じ
  • 鍵認証(Ed25519 / 秘密鍵411 bytes・公開鍵98 bytes)の確認が取れてから PasswordAuthentication no を設定する

SSHの設定はLinuxサーバーを守る上での最初の砦です。VPSを借りてサーバーを構築する際には、この設定を最初に済ませておくと安心して運用できます。

SSHの基本設定からインストール手順までを通しで確認したい方は、Ubuntu SSH設定ガイドも参考にしてください。本格的なサーバー運用に向けてVPSを検討している方は、コストとスペックのバランスで選ぶとよいでしょう。

コメント

タイトルとURLをコピーしました