sshd_config(SSH サーバー設定)
『sshd_config』は SSH サーバーデーモン(sshd)の設定ファイルです。/etc/ssh/sshd_config に配置されており、接続ポートや認証方式・ログイン許可ユーザーなどをここで制御します。デフォルト設定はそのままでは脆弱なため、PasswordAuthentication no(パスワード認証の無効化)・PermitRootLogin no(root 直接ログインの禁止)・Port変更といったセキュリティ強化を施すことが強く推奨されます。設定変更後は sshd を再起動して反映します。
構文
# ----------------------------------------------- # /etc/ssh/sshd_config の主要設定項目 # ----------------------------------------------- # Port # → SSH サーバーが待ち受けるポート番号を指定します # → デフォルトは 22 です。変更するとポートスキャンによる # 自動攻撃を大幅に減らせます # 例: Port 22 # 例: Port 2222 # AddressFamily # → IPv4・IPv6・どちらも受け付けるかを指定します # → any(両方)/ inet(IPv4のみ)/ inet6(IPv6のみ) # 例: AddressFamily any # ListenAddress # → サーバーが待ち受けるネットワークインターフェースを指定します # → 0.0.0.0 はすべての IPv4 インターフェースで待ち受けます # 例: ListenAddress 0.0.0.0 # PermitRootLogin # → root ユーザーによる SSH 直接ログインを制御します # → no に設定するとセキュリティが大幅に向上します # → prohibit-password にすると公開鍵認証のみ root ログインを許可します # 例: PermitRootLogin no # 例: PermitRootLogin prohibit-password # PasswordAuthentication # → パスワード認証を許可するかどうかを指定します # → no に設定して公開鍵認証のみにすることを強く推奨します # 例: PasswordAuthentication no # PubkeyAuthentication # → 公開鍵認証を許可するかどうかを指定します # → yes がデフォルトです。PasswordAuthentication を no にする前に # 公開鍵の設定が完了していることを確認してください # 例: PubkeyAuthentication yes # AuthorizedKeysFile # → 公開鍵を格納するファイルのパスを指定します # → %h はユーザーのホームディレクトリに展開されます # 例: AuthorizedKeysFile .ssh/authorized_keys # PermitEmptyPasswords # → 空のパスワードによるログインを許可するかを指定します # → 必ず no に設定してください # 例: PermitEmptyPasswords no # MaxAuthTries # → 1接続あたりの認証試行回数の上限を指定します # → 上限を超えると接続が切断されます。3〜6 程度に設定します # 例: MaxAuthTries 3 # MaxSessions # → 1接続あたりのセッション多重化上限を指定します # 例: MaxSessions 10 # AllowUsers # → SSH ログインを許可するユーザー名をスペース区切りで指定します # → ここに記載のないユーザーはログインできません # 例: AllowUsers itadori gojou nanami # AllowGroups # → SSH ログインを許可するグループ名をスペース区切りで指定します # 例: AllowGroups sshusers # DenyUsers / DenyGroups # → SSH ログインを拒否するユーザー・グループを指定します # 例: DenyUsers nobody # LoginGraceTime # → 認証完了までの制限時間を指定します(秒または分) # → デフォルトは 120 秒です。短くすると総当たりへの耐性が上がります # 例: LoginGraceTime 30 # ClientAliveInterval / ClientAliveCountMax # → クライアントへの生存確認間隔と無応答時の切断までの回数を指定します # → 一定時間操作のないセッションを自動切断するために使います # 例: ClientAliveInterval 300 # 例: ClientAliveCountMax 3 # X11Forwarding # → GUI アプリを SSH 経由で転送するかを指定します # → 不要な場合は no に設定します # 例: X11Forwarding no # UseDNS # → クライアントの逆引き DNS 解決を行うかを指定します # → no にするとログイン速度が改善される場合があります # 例: UseDNS no # Banner # → ログイン前に表示するメッセージファイルのパスを指定します # 例: Banner /etc/issue.net # Subsystem # → SFTP などのサブシステムを定義します # 例: Subsystem sftp /usr/lib/openssh/sftp-server
構文一覧
| 設定項目 | 説明 |
|---|---|
Port | SSH サーバーが待ち受けるポート番号を指定します。デフォルトは 22 で、変更することで自動スキャンによる攻撃を減らせます。 |
AddressFamily | 待ち受けるアドレスファミリを指定します。any(IPv4・IPv6 両方)・inet(IPv4 のみ)・inet6(IPv6 のみ)から選択します。 |
ListenAddress | 待ち受けるネットワークインターフェースの IP アドレスを指定します。デフォルトはすべてのインターフェースです。 |
PermitRootLogin | root によるSSH 直接ログインを制御します。no に設定するのが最も安全です。prohibit-password は公開鍵認証のみ root ログインを許可します。 |
PasswordAuthentication | パスワード認証を許可するかどうかを指定します。no に設定して公開鍵認証のみにすることを強く推奨します。 |
PubkeyAuthentication | 公開鍵認証を許可するかを指定します。デフォルトは yes です。パスワード認証を無効にする前に公開鍵の登録が完了しているか確認してください。 |
AuthorizedKeysFile | 公開鍵を格納するファイルのパスを指定します。デフォルトは ~/.ssh/authorized_keys です。 |
PermitEmptyPasswords | 空のパスワードによるログインを許可するかを指定します。必ず no に設定してください。 |
MaxAuthTries | 1接続あたりの認証試行回数の上限を指定します。上限を超えると接続が切断されます。3〜6 程度に設定することを推奨します。 |
MaxSessions | 1接続あたりのセッション多重化の上限を指定します。デフォルトは 10 です。 |
AllowUsers | SSH ログインを許可するユーザー名をスペース区切りで列挙します。ここに記載のないユーザーはログインできません。 |
AllowGroups | SSH ログインを許可するグループ名をスペース区切りで指定します。AllowUsers と組み合わせて使えます。 |
DenyUsers | SSH ログインを拒否するユーザー名を指定します。AllowUsers よりも優先されます。 |
LoginGraceTime | 認証完了までの制限時間を指定します。デフォルトは 120 秒です。短くすることで総当たり攻撃への耐性が上がります。 |
ClientAliveInterval | クライアントへの生存確認パケットの送信間隔を秒単位で指定します。0 で無効化されます。 |
ClientAliveCountMax | 生存確認に無応答だった場合にセッションを切断するまでの回数を指定します。 |
X11Forwarding | GUI アプリの SSH 転送(X11 フォワーディング)を許可するかを指定します。不要な場合は no に設定します。 |
UseDNS | クライアントの逆引き DNS 解決を行うかを指定します。no にするとログインが速くなる場合があります。 |
Banner | ログイン前に表示するメッセージファイルのパスを指定します。不正アクセス警告などを表示する際に使います。 |
Subsystem | SFTP などのサブシステムを定義します。通常は変更不要です。 |
使用例
/etc/ssh/sshd_config(セキュリティ強化設定)
# ----------------------------------------------- # ポート番号の変更(デフォルトの 22 から変更して自動スキャン対策) # ----------------------------------------------- Port 2222 # ----------------------------------------------- # IPv4 のみ待ち受ける # ----------------------------------------------- AddressFamily inet # ----------------------------------------------- # root によるダイレクトログインを禁止します # ----------------------------------------------- PermitRootLogin no # ----------------------------------------------- # パスワード認証を無効化し、公開鍵認証のみ許可します # (事前に ~/.ssh/authorized_keys に公開鍵を登録しておく必要があります) # ----------------------------------------------- PasswordAuthentication no PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys # ----------------------------------------------- # 空パスワードによるログインを禁止します # ----------------------------------------------- PermitEmptyPasswords no # ----------------------------------------------- # 認証試行回数の上限を設定します(ブルートフォース対策) # ----------------------------------------------- MaxAuthTries 3 LoginGraceTime 30 # ----------------------------------------------- # ログインを許可するユーザーを明示的に指定します # (呪術廻戦) # itadori: 虎杖悠仁、gojou: 五条悟、nanami: 七海建人 # ----------------------------------------------- AllowUsers itadori gojou nanami # ----------------------------------------------- # 一定時間操作がないセッションを自動切断します # 300秒(5分)間隔で生存確認し、3回無応答で切断します # ----------------------------------------------- ClientAliveInterval 300 ClientAliveCountMax 3 # ----------------------------------------------- # 不要な機能を無効化します # ----------------------------------------------- X11Forwarding no UseDNS no # ----------------------------------------------- # SFTP サブシステムは有効のまま残します # ----------------------------------------------- Subsystem sftp /usr/lib/openssh/sftp-server
実行するコマンドは次の通りです。
$ sudo sshd -t
(エラーがなければ何も表示されません。設定ファイルの構文チェックに使います)
$ sudo systemctl restart sshd
$ sudo systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-03-25 10:00:00 JST; 3s ago
Main PID: 12345 (sshd)
Tasks: 1 (limit: 4659)
Memory: 3.2M
CPU: 18ms
CGroup: /system.slice/ssh.service
└─12345 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
設定の確認と sshd の再起動(RHEL / AlmaLinux 系)
# ----------------------------------------------- # 設定ファイルの構文チェック(-t オプション) # 変更後は必ず構文チェックを行ってから再起動します # 構文エラーがあると sshd が起動できず SSH でログインできなくなります # ----------------------------------------------- sudo sshd -t # ----------------------------------------------- # sshd を再起動して設定を反映します # RHEL 系では sshd.service、Ubuntu 系では ssh.service です # ----------------------------------------------- sudo systemctl restart sshd # ----------------------------------------------- # sshd が起動していること・ポートを確認します # ----------------------------------------------- sudo ss -tlnp | grep sshd
実行するコマンドは次の通りです。
$ sudo ss -tlnp | grep sshd
LISTEN 0 128 0.0.0.0:2222 0.0.0.0:* users:(("sshd",pid=12345,fd=3))
AllowUsers に指定したユーザーのみ SSH 接続できることを確認する
# ----------------------------------------------- # AllowUsers に含まれないユーザー(fushiguro: 伏黒恵)で # SSH 接続を試みると拒否されることを確認します # ----------------------------------------------- # fushiguro ユーザーで接続試行(ポート 2222 に変更済みの場合) ssh -p 2222 fushiguro@192.168.1.100
実行するコマンドは次の通りです。
fushiguro@192.168.1.100: Permission denied (publickey). (AllowUsers に含まれないため接続が拒否されます)
概要
『sshd_config』は SSH サーバーのセキュリティと動作を制御する最重要設定ファイルです。最低限おさえておくべきポイントは、PermitRootLogin no(root 直接ログインの禁止)・PasswordAuthentication no(パスワード認証の無効化)・AllowUsers(ログイン許可ユーザーの明示)の3点です。パスワード認証を無効化する際は、事前に公開鍵の生成と ~/.ssh/authorized_keys への登録を完了させてください。公開鍵の作成方法については ssh-keygen のページを参照してください。また、設定を変更したら必ず sshd -t で構文チェックを行ってから systemctl restart sshd で反映してください。構文エラーがある状態で再起動すると SSH 接続が一切できなくなるため注意が必要です。ユーザー管理については useradd / userdel や passwd / shadow のページも合わせて参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。