Red Hat Enterprise Linux での安全な SSH 設定

Red Hat Enterprise LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、リモート Linux システムの管理に不可欠なスキルである SSH 接続の設定とセキュリティについて実践的に学習します。SSH を使用してリモートシステムにアクセスする方法、クライアント・サーバーアーキテクチャ、基本的な接続コマンドについて学びます。これには、SSH クライアントのインストールの確認、リモートホストへの接続、ホスト認証プロンプトの処理、リモートシステムへのログインとログアウトが含まれます。

この基礎に基づいて、パスワードレス認証のための SSH キーペアの作成と利用、ssh-agentを使用したこれらのキーの有効な管理、一般的な SSH 接続の問題のトラブルシューティングといったより高度なトピックを深く探求します。最後に、SSH クライアントの設定を効率化し、OpenSSH サーバーのセキュリティを強化するためにルートログインとパスワード認証を無効化し、堅牢で安全なリモートアクセスを実現する方法を学びます。

SSH を使用したリモートシステムへのアクセス

このステップでは、SSH (Secure Shell) を使用してリモートシステムにアクセスする方法を学びます。SSH は、暗号化されたネットワークプロトコルであり、非暗号化ネットワーク上でネットワークサービスを安全に運用するために使用されます。クライアント・サーバーアーキテクチャを採用し、SSH クライアントと SSH サーバーを接続することで、非暗号化ネットワーク上で安全なチャネルを提供します。

注意: この実験環境では、セキュリティ上の理由から、ルートログイン制限などのセキュリティ機能が既に設定されている場合があります。これは正常な動作であり、ベストプラクティスを実証しています。

最初に、SSH を使用してローカルシステムに接続します。これは、同じマシンに接続する場合でも、SSH クライアント・サーバーアーキテクチャを実証します。ssh コマンドを使用して localhost に接続します。

ssh の基本的な構文は次のとおりです。 ssh [username]@[hostname_or_IP]

ユーザー名を指定しない場合、SSH は現在のローカルユーザー名を使用してログインを試みます。この場合、ローカルユーザー名は labex です。

現在のユーザー名を使用して localhost に接続してみましょう。

ssh localhost

初めて接続すると、SSH はホストの認証を確認するように求められます。これは、中間者攻撃を防ぐためのセキュリティ対策です。yes と入力し、Enter キーを押します。

ホスト 'localhost (127.0.0.1)' の認証が確立できません。
ED25519 キーフィンガープリントは SHA256:h5k1mmPFylpxUCsKx+Mf8rN4wOrk9TmyRfzTvGWRm7A です。
このキーは他の名前で認識されていません
接続を続行しますか (yes/no/[フィンガープリント])? yes
警告: 'localhost' (ED25519) を既知のホストリストに永久に追加しました。
labex@localhost のパスワード:

labex ユーザーのパスワードを求められます。labex と入力し、Enter キーを押します。

labex@localhost のパスワード:
最終ログイン時刻: 2025年6月9日午前1時34分39秒、47.251.66.143 から
[labex@host ~]$

これで、SSH を介して localhost にログインしました。プロンプトに [labex@localhost ~]$ と表示されていることに注意してください。これは、SSH を介して接続されていることを示します。

SSH セッションからログアウトするには、exit コマンドを使用します。

exit
ログアウト
localhost への接続を閉じました。
[labex@host ~]$

次に、root ユーザーとして localhost に接続してみましょう。この環境では、セキュリティ上の理由から、ルートログインがデフォルトで無効になっている場合があります。

ssh root@localhost

ルートパスワードを求められますが、ルートログインが無効になっている場合、「Permission denied」というメッセージが表示される場合があります。

root@localhost のパスワード:
Permission denied, please try again.
root@localhost のパスワード:
Permission denied, please try again.
root@localhost のパスワード:

ルートログインが無効になっている場合、これは予想される動作であり、セキュリティのベストプラクティスを実証しています。接続試行をキャンセルするには、Ctrl+C を押します。

SSH は、インタラクティブなシェルを開かずに、リモートシステム上で単一の命令を実行することもできます。これは、迅速な確認や自動化に便利です。

labex ユーザーとして localhost 上で hostname コマンドを実行してみましょう。

ssh labex@localhost hostname

labex ユーザーのパスワードを求められます。labex と入力し、Enter キーを押します。

labex@localhost のパスワード:
6846375f1c0e35fea6cb03e6
[labex@host ~]$

hostname コマンドは SSH を介して実行され、その出力はローカル端末に表示されました。インタラクティブなシェルには移行されませんでした。

最後に、SSH が既知のホストをどのように管理するかを調べてみましょう。新しい SSH サーバーに接続すると、その公開鍵フィンガープリントが ~/.ssh/known_hosts ファイルに追加されます。このファイルは、将来の接続で SSH クライアントがサーバーの ID を検証するのに役立ちます。

~/.ssh/known_hosts ファイルの内容を表示します。

cat ~/.ssh/known_hosts
localhost ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHvl7dcZkvMNOr3cjKjlR2/JgFbGpURThT/bHnLZN6gG
localhost ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCynhy3601o9ZSGZoY0KB/QSonk5ykod2Tb7sCAqVn4ZgTCwd96BhPjJLPNQ6ldNASo1e7EzfT4BUjG5T0ZDRhgaI65qmDwITWipTWUfmYT5XoScyf6NDhcRxYiJwztFEkOvLcPhelS6UXj5Z7HdmYH4Nc5wiF00Wah3Jc0/2CfQsFZCXTn/7Kp8KKbBbPqPzr2R3WIULEacOxx9HKVv+2TvYg/OHZz40hTsr1c68DD7h5PMBNe21YB3HLRRk2LQEC7v7BFD+DCek9GNR66JBjbLDljtwWCaPCY0UntBjjvJ3W2LhX5RDZQHV/iaUSj2tEXnvPt9KSqGfBS91D12dBXyOmWVnTpvvI17BdDkEeefas2Uz4d7Bv/PDxZR6IKkaIGQ/ZnRhSEhBNvfqlBGqkOhRr6jQJK+rQMnsZCT6OEgW7osWzkw5Bs1wY/RNToeQqrRMclqffO9plFI688N2iT86+nxrvBVZg4yMMm2J1lleaBvinXCB8jE6lrtwoAdgk=
localhost ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKYWY8Ty6TrbQS/0fUljBWuUpkyPCS/5P6ZwxhSYsqjRBIprMANI/JQotZqHYq2w3b2X/n8O+J3/WuIB6XMl1f4=

これらのエントリは、クライアントが localhost の複数の公開キー (ED25519、RSA、および ECDSA) を記録していることを確認します。SSH サーバーは互換性のために複数のキータイプをサポートしている可能性があります。これらのサーバーキーのいずれかが予期せず変更された場合、SSH は警告します。これは重要なセキュリティ機能です。

パスワードレス認証のための SSH キーペアの生成と使用

このステップでは、SSH キーペアを作成し、パスワードレス認証に使用する方法を学びます。SSH キーベース認証は、パスワード認証よりも安全で便利な代替手段です。接続するたびにパスワードを入力する代わりに、暗号化キーのペア(ローカルマシンに保存される秘密鍵と、リモートサーバーに配置される公開鍵)を使用します。

最初に、SSH キーペアを作成する必要があります。この目的のために ssh-keygen コマンドを使用します。デフォルトでは、ssh-keygen は RSA キーペアを作成し、秘密鍵を ~/.ssh/id_rsa に、公開鍵を ~/.ssh/id_rsa.pub に保存します。

ssh-keygen コマンドを実行します。

ssh-keygen

いくつかのオプションを求められます。

公開鍵/秘密鍵の RSA キーペアを生成しています。
キーを保存するファイル名を入力してください (/home/labex/.ssh/id_rsa):

デフォルトのファイルパス (/home/labex/.ssh/id_rsa) を受け入れるために Enter キーを押します。

パスフレーズを入力してください (パスフレーズなしの場合は空のまま):

この実験では、セキュリティを強化するためにパスフレーズを使用することを推奨しますが、簡単にするため、パスフレーズを空のままにして Enter キーを 2 回押します。

パスフレーズを入力してください (パスフレーズなしの場合は空のまま):
同じパスフレーズをもう一度入力してください:
あなたの識別情報は /home/labex/.ssh/id_rsa に保存されました
あなたの公開鍵は /home/labex/.ssh/id_rsa.pub に保存されました
キーフィンガープリントは次のとおりです。
SHA256:QoV7pNBFu1kafGP3VJhpZuIdr1zc+qamJ1C2YAadgNY labex@6846375f1c0e35fea6cb03e6
キーのランダムアート画像は次のとおりです。
+---[RSA 3072]----+
|     . *=o .   +.|
|    . =oE.o . O. |
|     o.++.=..*.+.|
|     .o .O+o+o. =|
|      ..So + o.+ |
|       .  . . +  |
|           .   . |
|            . o o|
|            .=.o |
+----[SHA256]-----+

これで、~/.ssh/ ディレクトリにキーファイルが作成されたことを確認します。

ls -l ~/.ssh/
合計 16
-rw------- 1 labex labex 2622 2025年6月9日午前1時37分 id_rsa
-rw-r--r-- 1 labex labex  584 2025年6月9日午前1時37分 id_rsa.pub
-rw------- 1 labex labex  825 2025年6月9日午前1時35分 known_hosts
-rw-r--r-- 1 labex labex   91 2025年6月9日午前1時35分 known_hosts.old

id_rsa (秘密鍵) と id_rsa.pub (公開鍵) が表示されるはずです。権限に注意してください。id_rsa の権限は rw------- (所有者のみ読み書き可能) であり、セキュリティ上重要です。以前の known_hosts ファイルのバックアップである known_hosts.old も表示される場合があります。

次に、パスワードレス認証を有効にするために公開鍵をコピーする必要があります。この目的のために ssh-copy-id コマンドが設計されています。公開鍵を ~/.ssh/authorized_keys ファイルに追加し、パスワードなしでログインできるようにします。

ssh-copy-id コマンドを実行し、ユーザー名とホスト名を指定します。

ssh-copy-id labex@localhost

labex ユーザーのパスワードを求められます。labex と入力し、Enter キーを押します。

...

コマンド出力は、1 つのキーが追加されたことを確認します。これで、パスワードなしで labex ユーザーとして localhost にログインしてみてください。

ssh labex@localhost

すべて正しく設定されている場合、パスワードを求められることなく SSH を介してログインするはずです。

最終ログイン時刻: 2025年6月9日午前1時37分39秒、47.251.66.143 から
[labex@host ~]$

キーペアを使用してパスワードレス SSH 認証を正しく設定しました!

リモートセッションを終了するには、exit と入力します。

exit
...

ssh-agent を使用した SSH キーの管理

このステップでは、ssh-agent を使用して SSH キーを管理する方法を学びます。ssh-agent はバックグラウンドで実行され、秘密鍵をメモリ上に保持するプログラムです。これは、秘密鍵がパスフレーズで保護されている場合に特に便利です。キーを使用するたびにパスフレーズを入力する代わりに、キーを ssh-agent に追加する際に一度だけパスフレーズを入力すれば、そのセッション中はエージェントが認証を処理してくれます。

前のステップではパスフレーズなしでキーを生成しましたが、今回は ssh-agent の有用性を示すためにパスフレーズ付きの新しいキーを作成します。

まず、パスフレーズ付きの新しい SSH キーペアを生成します。このキーをデフォルトの id_rsa キーと区別するために id_rsa_passphrase と名付けます。

ssh-keygen -f ~/.ssh/id_rsa_passphrase

パスフレーズを入力するよう求められます。この実験では、パスフレーズとして mypassphrase を使用します。

公開鍵/秘密鍵の RSA キーペアを生成しています。
パスフレーズを入力してください (パスフレーズなしの場合は空のまま): mypassphrase
同じパスフレーズをもう一度入力してください: mypassphrase
あなたの識別情報は /home/labex/.ssh/id_rsa_passphrase に保存されました
あなたの公開鍵は /home/labex/.ssh/id_rsa_passphrase.pub に保存されました
キーフィンガープリントは次のとおりです。
SHA256:BuSxVlJb1lsiUFi2I5DAvyL01fJ5d480LT86dgtcHEg labex@6846375f1c0e35fea6cb03e6
キーのランダムアート画像は次のとおりです。
+---[RSA 3072]----+
|   ...=o+=*. E   |
|    .o.*.=..+ o  |
|     .=.o o. = . |
|  .  .+... .. . .|
| . . . +S.     + |
|  . o ..o . o * .|
|   . .   . . = * |
|             oooo|
|            ..+.o|
+----[SHA256]-----+

注意: 間違いでパスフレーズを入力せずに Enter キーを押すと、パスフレーズなしでキーが作成されます。その場合は、ファイルごと削除し、mypassphrase を入力するように求められたら入力してコマンドを再度実行してください。

次に、この新しい公開鍵を localhost にコピーして、認証に使用できるようにします。

ssh-copy-id -i ~/.ssh/id_rsa_passphrase.pub labex@localhost

デフォルトのキーで既にパスワードレス認証が設定されているため、パスワードの入力を求められない場合があります。既存の認証が使用されます。

...

これで、この新しいキーを使用して localhost に接続してみましょう。-i オプションを使用して秘密鍵ファイル名を指定する必要があります。

ssh -i ~/.ssh/id_rsa_passphrase labex@localhost

キーにパスフレーズを設定している場合、パスフレーズを入力するよう求められます。ただし、誤ってパスフレーズなしでキーを作成した場合(例の出力が示す場合)、直接ログインします。

最終ログイン時刻: 2025年6月9日午前1時39分25秒、47.251.66.143 から
[labex@host ~]$

ログインしました。セッションを終了します。

exit
...

注意: キーにパスフレーズがない場合でも、ssh-agent のデモを続けることができます。この場合、パスフレーズは求められません。

まず、現在のシェルセッションで ssh-agent を起動します。eval コマンドは、ssh-agent が出力する環境変数を正しく設定するために使用されます。

eval "$(ssh-agent)"
Agent pid 1024

出力には、ssh-agent のプロセス ID (PID) が表示されます。

次に、秘密鍵 (id_rsa_passphrase) を ssh-agent に追加します。

ssh-add ~/.ssh/id_rsa_passphrase

キーにパスフレーズがある場合、パスフレーズを入力するよう求められます。そうでない場合、キーは直接追加されます。

Identity added: /home/labex/.ssh/id_rsa_passphrase (labex@6846375f1c0e35fea6cb03e6)

キーが ssh-agent に追加されたので、同じキーを使用して localhost に再度接続してみましょう。

ssh -i ~/.ssh/id_rsa_passphrase labex@localhost

パスフレーズを求められることなく接続できるはずです(キーにパスフレーズがあってもなくても、エージェントによって管理されているため)。

最終ログイン時刻: 2025年6月9日午前1時39分49秒、127.0.0.1 から
[labex@host ~]$

ssh-agent を使用して SSH キーを管理する方法を理解できました。

重要な注意事項: ssh-agent 環境変数は、それを起動したシェルセッションでのみ有効です。SSH セッション内にある場合は、ローカルシェルに戻って ssh-add コマンドを使用する必要があります。

まず、SSH セッションを終了します。

exit
...

現在 ssh-agent にロードされているキーを表示するには、ssh-add -l を使用できます。

ssh-add -l

エージェントが実行中でキーがロードされている場合、次のような出力が表示されます。

...

ただし、「Could not open a connection to your authentication agent」のようなエラーメッセージが表示された場合は、現在のセッションでエージェント環境変数が設定されていないことを意味します。

ssh-agent からすべての ID を削除するには、ssh-add -D を使用します。

ssh-add -D

エージェントにアクセスできる場合、次のような出力が表示されます。

All identities removed.

ただし、「Could not open a connection to your authentication agent」のようなエラーメッセージが表示された場合は、現在のセッションでエージェント環境が利用できないことを意味します。

これで、もう一度接続しようとすると、キーにパスフレーズがある場合は、キーがエージェントから削除されているため、パスフレーズを入力するよう求められます。

ssh -i ~/.ssh/id_rsa_passphrase labex@localhost

キーにパスフレーズがある場合、次のような出力が表示されます。

Enter passphrase for key '/home/labex/.ssh/id_rsa_passphrase':

キーにパスフレーズがない場合、それでも直接接続できます。パスフレーズを求められたら、Ctrl+C を押して接続試行をキャンセルします。

最後に、ssh-agent プロセスを停止するには、ssh-agent -k を使用できます。

ssh-agent -k

SSH_AGENT_PID 環境変数が設定されていない場合、次のような出力が表示される場合があります。

SSH_AGENT_PID not set, cannot kill agent

これは、エージェントが別のシェルセッションで起動された場合、または環境変数が適切にエクスポートされていない場合に正常です。

SSH 接続問題のトラブルシューティング

このステップでは、一般的な SSH 接続問題のトラブルシューティング方法を学びます。SSH 接続が失敗した場合、正確な問題点を特定するのは困難な場合があります。ssh コマンドは詳細な出力オプションを提供しており、接続プロセスの詳細情報を表示することで問題の診断に役立ちます。

ssh コマンドには、-v-vv-vvv の 3 つの詳細レベルがあります。追加の v は、表示されるデバッグ情報の量を増やします。

まず、localhost の存在しないポートに接続を試して、接続失敗とデバッグ出力を確認してみましょう。

最初に、-v (詳細) でポート 2222 (実行されていないはず) に接続してみましょう。

ssh -v -p 2222 labex@localhost

接続拒否を示す、次の様な出力が出力されます。

OpenSSH_8.7p1, OpenSSL 3.0.1 14 Dec 2021
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Reading configuration data /etc/ssh/ssh_config.d/01-training.conf
debug1: /etc/ssh/ssh_config.d/01-training.conf line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config.d/50-redhat.conf
debug1: /etc/ssh/ssh_config.d/50-redhat.conf line 3: Applying options for *
debug1: Connecting to localhost [127.0.0.1] port 2222.
ssh: connect to host localhost port 2222: Connection refused

次に、-vv (より詳細) で試してみましょう。

ssh -vv -p 2222 labex@localhost

出力はより詳細になり、追加のデバッグメッセージが表示されます。

... (上記の出力と同様)
debug2: resolving "localhost" port 2222
debug2: ssh_connect_direct: entering
debug1: Connecting to localhost [127.0.0.1] port 2222.
debug1: connect to address 127.0.0.1 port 2222: Connection refused
ssh: connect to host localhost port 2222: Connection refused

最後に、-vvv (最も詳細) で試してみましょう。

ssh -vvv -p 2222 labex@localhost

このレベルでは、最大量のデバッグ情報が表示されます。複雑な問題に対して非常に役立ちますが、圧倒される可能性があります。

... (上記の出力と同様)

この場合、エラー「Connection refused」は、ポート 2222 に SSH サーバーが実行されていないことを明確に示しています。

次に、一般的な問題をシミュレートします。ホストキーの変更です。最初のステップで localhost に接続し、その公開鍵が ~/.ssh/known_hosts ファイルに追加されました。SSH サーバーのキーが変更された場合(たとえば、サーバーの再構築や悪意のある攻撃による場合)、SSH クライアントはこれらの不一致を検出し、接続を拒否します。

これをシミュレートするために、localhostknown_hosts エントリを意図的に無効にするために変更します。

まず、nano を使用して ~/.ssh/known_hosts ファイルを開きます。

nano ~/.ssh/known_hosts

さまざまなキータイプの複数の行が表示されます。

... (上記の出力と同様)

行の 1 つを変更します。この例では、ED25519 キー(最初の行)を変更します。長いキー文字列のいくつかの文字を変更します(たとえば、最後の文字を G から A に変更します)。行全体またはファイルの他の部分を削除しないように注意してください。

たとえば、次のように変更します。 ...ZN6gG...ZN6gA

ファイル保存するには、Ctrl+XYEnter キーを押します。

次に、もう一度 localhost に接続します。

ssh labex@localhost

ホストキーが変更されたことを示す警告が表示されます。

... (上記の出力と同様)

これは重要なセキュリティ警告です。実際の状況でこれに出くわした場合、ホストキーが変更された理由を調査する必要があります。正当な変更である場合(たとえば、サーバーの再インストール)、known_hosts から古いエントリを削除する必要があります。

これを修正するには、~/.ssh/known_hosts を手動で編集して問題のある行を削除するか、ssh-keygen -R を使用して localhost のエントリを削除します。

ssh-keygen -R を使用して、間違ったエントリを削除します。

ssh-keygen -R localhost
... (上記の出力と同様)

もう一度 localhost に接続します。最初の接続時と同様に、ホストの認証を確認するよう求められます。

ssh labex@localhost
... (上記の出力と同様)

これで、キーベース認証を使用して再び接続できます。

セッションを終了します。

exit
... (上記の出力と同様)

SSH クライアント設定のカスタマイズ

このステップでは、~/.ssh/config ファイルを使用して SSH クライアント設定をカスタマイズする方法を学びます。このファイルを使用すると、異なるリモートホストのエイリアスと具体的な接続パラメータを定義でき、SSH コマンドを簡素化し、一貫性を高めることができます。

~/.ssh/config ファイルは、SSH 接続を管理するための強力なツールです。ユーザー名、使用する秘密鍵ファイル、ポート番号、プロキシコマンドなどの高度な設定など、さまざまなオプションを指定できます。

最初に、~/.ssh/config ファイルを作成または開きます。ファイルが存在しない場合は、nano がファイルを作成します。

nano ~/.ssh/config

ファイルに次の設定を追加します。この設定は、localhostlabex ユーザーとして接続するためのエイリアス localhost_labex と、root ユーザーとして接続するためのエイリアス localhost_root を定義します。また、labex ユーザー用に IdentityFile を明示的に指定して、以前のステップで生成した id_rsa キーを使用するように設定しています。

Host localhost_labex
    HostName localhost
    User labex
    IdentityFile ~/.ssh/id_rsa

Host localhost_root
    HostName localhost
    User root

ファイル保存するには、Ctrl+XYEnter キーを押します。

次に、これらの新しいエイリアスを使用して localhost に接続してみましょう。

localhost_labex エイリアスを使用して labex ユーザーとして接続します。

ssh localhost_labex

IdentityFile ~/.ssh/id_rsa を設定し、id_rsa にパスフレーズがないため、パスワードの入力を求められることなくログインするはずです。

最終ログイン時刻: 2025年6月9日午前1時54分16秒、47.251.66.143 から
[labex@host ~]$

セッションを終了します。

exit
exit
Connection to localhost closed.
[labex@host ~]$

次に、localhost_root エイリアスを使用して root ユーザーとして接続します。

ssh localhost_root

root ユーザーのパスワードの入力を求められます。ただし、この環境では root ログインが無効になっているため、「Permission denied」メッセージが表示されます。

root@localhost's password:
Permission denied, please try again.
root@localhost's password:

接続試行をキャンセルするには、Ctrl+C を押します。

^C

SSH 設定エイリアスが機能しますが、root ログインが無効になっているセキュリティポリシーのために接続が失敗したことを示しています。

ご覧のとおり、~/.ssh/config ファイルを使用すると、一般的な接続パラメータを事前に設定することで、SSH コマンドを簡素化できます。

別のポートを指定する方法を示すために、別のエントリを追加します。localhost はデフォルトの SSH ポート (22) を使用しますが、この例では、それが異なる場合にどのように設定するかを示します。

~/.ssh/config ファイルを再度開きます。

nano ~/.ssh/config

次のエントリを追加します。これにより、ポートを明示的に 2222 に設定するエイリアス localhost_port_example が作成されます。(注:localhost は実際にはポート 2222 でリスニングしていません。そのため、この接続は失敗しますが、SSH 設定でカスタムポートを指定する方法を示しています。)

... (上記の構成)

Host localhost_port_example
    HostName localhost
    Port 2222
    User labex

ファイルを保存します。

次に、localhost_port_example エイリアスを使用して接続します。

ssh localhost_port_example

localhost がポート 2222 でリスニングしていないため、この接続は失敗しますが、SSH 設定でカスタムポートを指定する方法を示しています。

ssh: connect to host localhost port 2222: Cannot assign requested address

... (エラーメッセージ)

定義されたすべてのホストを表示するには、現在の SSH 設定を表示できます。

cat ~/.ssh/config
... (上記の構成)

最後に、~/.ssh/config ファイルをクリーンアップして、localhost_port_example エントリを削除します。

~/.ssh/config ファイルを開きます。

nano ~/.ssh/config

Host localhost_port_example ブロックを削除します。ファイルは次のようになります。

... (上記の構成)

ファイルを保存します。

OpenSSH サーバーセキュリティ設定の理解

このステップでは、現在のセキュリティ設定を調べることで、OpenSSH サーバーのセキュリティに関するベストプラクティスを学びます。root ログインの制限とパスワード認証の設定が、不正アクセスからサーバーをどのように保護しているかを理解します。

注意: この実験(Lab)環境では、現在の SSH セキュリティ設定を調べ、さまざまなセキュリティ設定について理解します。このステップは、これらのセキュリティ対策を理解し、SSH サーバー設定のベストプラクティスについて学ぶことに焦点を当てています。

root ログインのセキュリティについて理解する

root アカウントは完全な管理者権限を持っているため、SSH 経由での直接 root ログインは一般的に推奨されません。攻撃者が root アカウントにアクセスした場合、システム全体を完全に制御されてしまいます。通常のユーザーとしてログインし、その後sudoを使用して管理者タスクを実行する方が安全です。

現在の root ログイン設定を調べ、その有効性をテストしてみましょう。

まず、labexユーザーとして SSH でログインします。

ssh labex@localhost

以前のステップで設定した SSH キーが正しければ、パスワードなしでログインできるはずです。

Last login: Mon Jun  9 01:57:27 2025 from 47.251.66.143
[labex@host ~]$

次に、SSH サーバーの設定ファイルを確認して、現在のセキュリティ設定を理解しましょう。

sudo cat /etc/ssh/sshd_config | grep -E "^PermitRootLogin|^#PermitRootLogin"

このコマンドは、現在のPermitRootLogin設定を表示します。以下のような出力が表示されるはずです。

PermitRootLogin no

この設定は、SSH 経由での直接 root ログインが無効になっていることを意味し、これはセキュリティ上のベストプラクティスです。

実際に root ログインがブロックされているかテストしてみましょう。まず、現在の SSH セッションを終了します。

exit
exit
Connection to localhost closed.
[labex@host ~]$

次に、rootとしてlocalhostにログインを試みます。

ssh root@localhost

「Permission denied」というメッセージが表示されるはずです。これは、直接 root ログインが許可されていないことを示しています(これは環境ですでに設定されている場合があります)。

root@localhost's password:
Permission denied, please try again.
root@localhost's password:
Permission denied, please try again.
root@localhost's password:

これにより、この環境では root ログインが無効になっており、これは望ましいセキュリティ設定であることが確認できます。「Permission denied」メッセージは、セキュリティ対策が効果的に機能していることを示しています。

パスワード認証のセキュリティについて理解する

パスワード認証を無効にすることで、ユーザーは SSH キーベース認証のようなより安全な方法に頼るようになります。これにより、サーバーに対するブルートフォース攻撃のリスクが大幅に軽減されます。

現在のパスワード認証設定を調べ、その仕組みを理解しましょう。

labexユーザーとして SSH でログインします(SSH キーを使用)。

ssh labex@localhost
Last login: Mon Jun  9 01:57:32 2025 from 127.0.0.1
[labex@host ~]$

まず、現在のPasswordAuthentication設定を確認しましょう。

sudo cat /etc/ssh/sshd_config | grep PasswordAuthentication
PasswordAuthentication yes
## PasswordAuthentication.  Depending on your PAM configuration,
## PAM authentication, then enable this but set PasswordAuthentication

ご覧のとおり、現在PasswordAuthentication yesが設定されており、パスワード認証が有効になっています。これによりユーザーはパスワードで認証できますが、サーバーがブルートフォースパスワード攻撃に対して脆弱になるため、セキュリティリスクも伴います。

出力は以下を示しています。

  • PasswordAuthentication yes - パスワード認証を有効にする現在の設定です。
  • コメントアウトされた行は、PAM 設定に関する追加のコンテキストを提供します。

この設定は、ユーザーがパスワードと SSH キーの両方を使用して認証できることを意味します。セキュリティを強化するためには、パスワード認証を無効にし、SSH キーベース認証のみに依存することが推奨されます。

現在の SSH セッションを終了します。

exit
exit
Connection to localhost closed.
[labex@host ~]$

次に、パスワード認証が無効になっている場合に、SSH キーベース認証が正しく機能することを確認しましょう。

ssh labex@localhost

これは、SSH キーを使用して、パスワードプロンプトなしで成功するはずです。

Last login: Mon Jun  9 02:00:22 2025 from 127.0.0.1
[labex@host ~]$

これにより、いくつかの重要なセキュリティ概念が実証されます。

  1. パスワード認証が有効になっている (PasswordAuthentication yes) - ユーザーはパスワードと SSH キーの両方でログインできます。
  2. SSH キーベース認証が正しく機能している - より安全な認証方法が利用可能です。
  3. サーバーは両方の認証方法を許可している - 便利ですが、ブルートフォース攻撃からのセキュリティリスクを伴う可能性があります。
  4. root ログインが無効になっている - 管理者アクセスには、適切なユーザー昇格が必要です。

セキュリティ推奨事項: 本番環境では、ユーザーに SSH キーベース認証のみを使用させることでセキュリティを強化するために、PasswordAuthentication noを設定することを検討してください。

セッションを終了します。

exit
exit
Connection to localhost closed.
[labex@host ~]$

OpenSSH サーバーのセキュリティ設定を正常に調べ、理解しました。サーバーは現在、root ログインが無効になっており(セキュリティベストプラクティスに従っています)、パスワード認証が有効になっています(柔軟性を提供しますが、本番環境では追加のセキュリティ上の考慮が必要になる場合があります)。また、より安全な認証方法として SSH キーベース認証が正しく機能することも確認しました。

まとめ

この実験では、参加者は SSH を使用してシステムにアクセスする方法を学びました。まず、openssh-clients のインストールを確認し、SSH 経由でlocalhostに接続することから始めました。パスワードによる認証の実習を行い、初期のホスト認証確認についても理解しました。

さらに、この実験では、パスワードレス認証のために SSH キーペアを生成および利用する方法、ssh-agent を使用してこれらのキーを管理する方法、一般的な SSH 接続の問題のトラブルシューティング方法を指導しました。最後に、参加者は SSH クライアント設定のカスタマイズ方法と、root ログインおよびパスワード認証を無効にすることで OpenSSH サーバーを保護する方法を学び、安全なリモートアクセス方法の理解を深めました。