この記事のポイント
・sshd_configは/etc/ssh/sshd_configにあり、変更後はsshdの再起動が必要
・Port・PermitRootLogin・PasswordAuthenticationの3つが最初に変えるべき設定
・AllowUsers/AllowGroupsで接続ユーザーをホワイトリスト管理できる
・sshd -t でsshd_configの構文チェックが可能。再起動前に必ず実行する
「デフォルトのまま運用していたら、rootでのログインが許可されていた」
LinuxサーバーのSSH設定は、運用開始後も後から変更を求められる場面が多い項目です。ポート番号の変更、rootログインの禁止、パスワード認証の無効化。セキュリティ要件が厳しくなるにつれて、sshd_configを何度も触ることになります。
この記事では、/etc/ssh/sshd_configの主要設定項目を解説します。RHEL 9 / AlmaLinux 9 / Ubuntu 22.04 LTS で動作確認済みの内容です。
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
sshd_configとは
sshd_configは、OpenSSHのサーバープロセス(sshd)の動作を制御する設定ファイルです。パスは/etc/ssh/sshd_configです。設定ファイルを変更しても、sshdプロセスを再起動するまで反映されません。変更後は以下のコマンドで再起動します。
# RHEL/AlmaLinux 系 # systemctl restart sshd # Ubuntu 系 # systemctl restart ssh
# sshd -t
sshd_configの基本設定3つ
新しくサーバーを構築した場合、まず以下の3つを確認・変更することを推奨します。1. Port(SSHポート番号)
デフォルトは22番ポートです。辞書攻撃(自動スキャン)の標的になりやすいため、使われていないポートへ変更する運用が多いです。# /etc/ssh/sshd_config の設定例 Port 22222
# RHEL/AlmaLinux 系 (firewalld) # firewall-cmd --add-port=22222/tcp --permanent # firewall-cmd --reload # Ubuntu 系 (ufw) # ufw allow 22222/tcp
# semanage port -a -t ssh_port_t -p tcp 22222
2. PermitRootLogin(rootログインの可否)
デフォルト値はディストリビューションによって異なります。RHEL 9 / AlmaLinux 9 はprohibit-password(鍵認証のみ許可)、Ubuntu 22.04 LTS はprohibit-passwordです。セキュリティポリシーによってはnoに変更して、rootへの直接ログインを完全に禁止します。その場合は、sudoが使える一般ユーザーでSSH接続できることを確認してから変更してください。
# rootログインを完全に禁止する場合 PermitRootLogin no # 鍵認証のみ許可する場合(デフォルトに近い運用) PermitRootLogin prohibit-password
3. PasswordAuthentication(パスワード認証の可否)
鍵認証を設定済みの場合は、パスワード認証を無効化します。ブルートフォース攻撃を実質的に無力化できます。PasswordAuthentication no
Linux ポート確認の全コマンドを参考に、ポートが開いていることを確認してから進めてください。
接続制限の設定
AllowUsersとAllowGroups
SSH接続を許可するユーザーを限定する設定です。どちらか一方、または両方を使用できます。# 特定ユーザーのみSSH接続を許可する AllowUsers tanaka yamada # 特定グループに所属するユーザーのみ許可する AllowGroups sshusers
DenyUsersとDenyGroups
特定のユーザー・グループだけを拒否する方法です。AllowUsersの逆の動作です。# 特定ユーザーのSSH接続を拒否する DenyUsers test_user guest # 特定グループを拒否する DenyGroups nogroup
認証関連の設定
MaxAuthTries(認証試行回数)
1回の接続あたりの認証試行回数を制限します。デフォルトは6です。MaxAuthTries 3
LoginGraceTime(ログイン待機時間)
接続してからログインが完了するまでの制限時間です。デフォルトは2分(120秒)です。LoginGraceTime 60
PubkeyAuthentication(公開鍵認証)
公開鍵認証の有効・無効を切り替えます。デフォルトはyesです。PubkeyAuthentication yes
AuthorizedKeysFile(公開鍵ファイルのパス)
公開鍵を格納するファイルのパスです。デフォルトは.ssh/authorized_keysです。AuthorizedKeysFile .ssh/authorized_keys
転送関連の設定
X11Forwarding(X11転送)
GUIアプリケーションをSSH経由で表示する機能です。使用しない場合は無効化します。X11Forwarding no
AllowTcpForwarding(TCPポートフォワーディング)
SSHのポートフォワーディング機能の有効・無効を切り替えます。踏み台サーバーとして使用する場合を除き、無効化を推奨します。AllowTcpForwarding no
接続維持の設定
ClientAliveInterval とClientAliveCountMax
SSHセッションが切れるのを防ぐキープアライブ設定です。一定時間操作がないと接続が切れる環境で有効です。# 60秒ごとにサーバーからクライアントへ確認を送る ClientAliveInterval 60 # 確認に3回応答がなければ切断する ClientAliveCountMax 3
ログ設定
LogLevel(ログの詳細度)
sshdが出力するログの詳細度を設定します。デフォルトはINFOです。# 通常運用(デフォルト) LogLevel INFO # 認証の詳細をログに残す場合 LogLevel VERBOSE
sshd_configの設定変更手順
1. バックアップを取る
変更前に必ずバックアップを取ります。# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
2. 設定を変更する
viやnanoで設定を変更します。コメントアウトされている行(#で始まる行)はデフォルト値を意味します。設定を変える場合は、コメントアウトを外した上で値を変更します。# vi /etc/ssh/sshd_config
3. 構文チェックを実行する
# sshd -t
4. sshdを再起動する
# systemctl restart sshd
5. 別のターミナルで動作確認する
現在の接続を維持したまま、別のターミナルウィンドウから接続テストを行います。接続できることを確認してから、現在の接続を閉じます。トラブルシュート
「Permission denied (publickey)」が出た場合
パスワード認証を無効化した後にこのエラーが出た場合、鍵認証の設定に問題があります。確認すべき点をまとめます。
・クライアント側の~/.ssh/authorized_keysに公開鍵が登録されているか
・~/.sshディレクトリのパーミッションが700になっているか
・~/.ssh/authorized_keysのパーミッションが600になっているか
・ホームディレクトリのパーミッションがother書き込み不可になっているか
# パーミッション確認 # ls -la ~/.ssh/ total 12 drwx------. 2 tanaka tanaka 29 May 17 09:00 . drwx------. 4 tanaka tanaka 104 May 17 09:00 .. -rw-------. 1 tanaka tanaka 571 May 17 09:00 authorized_keys
sshdが再起動できない場合
構文エラーがある状態でsshdを再起動すると、sshdが起動しません。sshd -tで事前に確認することで防げます。すでにSSH接続ができなくなった場合は、コンソール接続(VPS管理画面やILO/iDRAC)でサーバーに直接ログインし、バックアップファイルに戻します。
# バックアップから復元 # cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config # systemctl start sshd
ポート変更後に接続できない場合
ポートを変更した場合、接続時に-pオプションで新しいポートを指定します。# ssh -p 22222 tanaka@192.168.1.10
sshd_config 主要設定まとめ
| 設定項目 | デフォルト値 | 推奨設定 | 用途 |
|---|---|---|---|
| Port | 22 | 任意の番号 | SSHポート番号の変更 |
| PermitRootLogin | prohibit-password | no | rootログインの禁止 |
| PasswordAuthentication | yes | no | パスワード認証の無効化 |
| PubkeyAuthentication | yes | yes | 公開鍵認証の有効化 |
| AllowUsers | (未設定) | 接続許可ユーザーを列挙 | ユーザーのホワイトリスト管理 |
| MaxAuthTries | 6 | 3 | 認証試行回数の制限 |
| LoginGraceTime | 120 | 60 | ログイン待機時間の短縮 |
| ClientAliveInterval | 0(無効) | 60 | 接続維持のキープアライブ |
| X11Forwarding | no | no | X11転送の無効化 |
| AllowTcpForwarding | yes | no | TCPポートフォワーディングの制限 |
Linux DNS 設定の基本も合わせて確認しておくと、SSH接続時のホスト名解決に関するトラブルを防げます。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Linuxサーバー構築入門マニュアル(図解60P)を無料でお渡ししています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxサーバーのスワップ領域を設計・拡張する方法|物理メモリ別の推奨容量とswapfile作成
- 前のページへ:Linuxサーバー監視の基礎|サーバー状態を見る11項目とコマンド対応表
- この記事の属するカテゴリ:Linuxtips・セキュリティへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます