sshd_configの設定ガイド|Port変更・rootログイン禁止・鍵認証設定の手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, セキュリティ > sshd_configの設定ガイド|Port変更・rootログイン禁止・鍵認証設定の手順

この記事のポイント

・sshd_configは/etc/ssh/sshd_configにあり、変更後はsshdの再起動が必要
・Port・PermitRootLogin・PasswordAuthenticationの3つが最初に変えるべき設定
・AllowUsers/AllowGroupsで接続ユーザーをホワイトリスト管理できる
・sshd -t でsshd_configの構文チェックが可能。再起動前に必ず実行する

「SSHの設定を変えたいけど、sshd_configのどこを触ればいいか分からない」
「デフォルトのまま運用していたら、rootでのログインが許可されていた」

LinuxサーバーのSSH設定は、運用開始後も後から変更を求められる場面が多い項目です。ポート番号の変更、rootログインの禁止、パスワード認証の無効化。セキュリティ要件が厳しくなるにつれて、sshd_configを何度も触ることになります。

この記事では、/etc/ssh/sshd_configの主要設定項目を解説します。RHEL 9 / AlmaLinux 9 / Ubuntu 22.04 LTS で動作確認済みの内容です。

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

sshd_configとは

sshd_configは、OpenSSHのサーバープロセス(sshd)の動作を制御する設定ファイルです。パスは/etc/ssh/sshd_configです。

設定ファイルを変更しても、sshdプロセスを再起動するまで反映されません。変更後は以下のコマンドで再起動します。

# RHEL/AlmaLinux 系 # systemctl restart sshd # Ubuntu 系 # systemctl restart ssh

再起動の前に構文チェックを必ず実行してください。設定ミスのままsshdを再起動すると、SSH接続ができなくなります。

# sshd -t

エラーが出なければ構文は正常です。出力がなければOKと判断します。

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

SELinuxが有効な環境(RHEL/AlmaLinux)では、SSHが使用できるポートをSELinuxのポリシーにも追加する必要があります。

# 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

注意: パスワード認証を無効化する前に、必ず鍵認証でログインできることを確認してください。確認前に無効化すると、SSH接続が完全にできなくなる可能性があります。
Linux ポート確認の全コマンドを参考に、ポートが開いていることを確認してから進めてください。

接続制限の設定

AllowUsersとAllowGroups

SSH接続を許可するユーザーを限定する設定です。どちらか一方、または両方を使用できます。

# 特定ユーザーのみSSH接続を許可する AllowUsers tanaka yamada # 特定グループに所属するユーザーのみ許可する AllowGroups sshusers

AllowUsersを設定すると、記載されていないユーザーは全員接続不可になります。設定後のテストは必ず別のターミナルウィンドウを開いて行ってください。現在の接続を切断すると、テストできなくなります。

DenyUsersとDenyGroups

特定のユーザー・グループだけを拒否する方法です。AllowUsersの逆の動作です。

# 特定ユーザーのSSH接続を拒否する DenyUsers test_user guest # 特定グループを拒否する DenyGroups nogroup

AllowUsersとDenyUsersを同時に設定した場合、DenyUsersが優先されます。

認証関連の設定

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

この設定の場合、最大180秒(60秒×3回)応答がなければ接続を切断します。

ログ設定

LogLevel(ログの詳細度)

sshdが出力するログの詳細度を設定します。デフォルトはINFOです。

# 通常運用(デフォルト) LogLevel INFO # 認証の詳細をログに残す場合 LogLevel VERBOSE

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

エラーが表示されたら、メッセージを確認して修正します。出力がなければOKです。

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

ファイアウォール設定の変更を忘れた場合は、新しいポートへの通信が遮断されます。Linux ポート確認の全コマンドでポートの開放状況を確認してください。

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ポートフォワーディングの制限
Apache タイムアウト設定と同様に、サーバーのタイムアウト設定は定期的な見直しが必要です。

Linux DNS 設定の基本も合わせて確認しておくと、SSH接続時のホスト名解決に関するトラブルを防げます。

現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Linuxサーバー構築入門マニュアル(図解60P)を無料でお渡ししています。

>> Linuxサーバー構築入門マニュアル(図解60P)を無料で受け取る

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。