SSHのホスト認証

 SSH(Secure Shell)は、リモートのシステムに安全にアクセスするためのプロトコルで、特にリモートサーバーへの接続が頻繁に行われる環境においては、非常に重要な役割を果たします。その中でも「ホスト認証」は、クライアントが接続するサーバーが信頼できるものであるかどうかを確認するための重要なプロセスです。このプロセスにより、マルウェアや不正なサーバーからシステムを保護し、安全な通信が確立されます。

SSHのホスト認証の流れ

 SSHのホスト認証は、クライアントとサーバー間で信頼性を確立するために以下のステップに従って行われます。下図を使ってSSHのホスト認証について解説します。

① SSHクライアントはSSHサーバへの接続を試みる

クライアントがリモートサーバーに接続するためにSSHプロトコルを使用して通信を開始します。クライアントはサーバーのホスト名やIPアドレスを指定し、SSHを使用して接続を試みます。このとき、デフォルトでポート22が使用されます。

② サーバの公開鍵を受け取る

 サーバーは自らの公開鍵をクライアントに送信します。この公開鍵は、サーバーの真正性を確認するために使用されます。サーバー側では、この公開鍵が/etc/ssh/ディレクトリに保存されています。

③ 初回のアクセス時には「受け入れメッセージ」が表示される

 クライアントがサーバーに初めて接続する際、公開鍵を受信し、ユーザーに「受け入れメッセージ」を表示します。ユーザーが「yes」を選択すると、サーバーの公開鍵がクライアントの~/.ssh/known_hostsファイルに保存されます。このファイルには、信頼できるサーバーの公開鍵が記録され、以降の接続時に参照されます。

④ 2回目以降のアクセス

 クライアントが再度サーバーに接続する際、サーバーの公開鍵が既存の~/.ssh/known_hostsファイルに保存されている鍵と一致するか確認します。一致しない場合、クライアントは警告メッセージを表示し、接続を中断します。これは、なりすましサーバーへの接続を防止するためです。

⑤ 一致した場合、SSHサーバはユーザー認証を行いログインを許可

 公開鍵が一致した場合、サーバーはユーザー認証を行い、ログインが許可されます。認証は、パスワード認証や公開鍵認証によって行われ、認証が成功すると、クライアントはサーバーにアクセスできます。

SSHサーバにデフォルトで用意されている主な鍵

 SSHサーバーには、以下のように異なる暗号アルゴリズムを使用した秘密鍵と公開鍵がデフォルトで用意されています。それぞれの鍵は、SSH通信のセキュリティを確保するために使用されます。

暗号アルゴリズム公開鍵ファイル名秘密鍵ファイル名
RSAssh_host_rsa_key.pubssh_host_rsa_key
DSAssh_host_dsa_key.pubssh_host_dsa_key
ECDSAssh_host_ecdsa_key.pubssh_host_ecdsa_key
ED25519ssh_host_ed25519_key.pubssh_host_ed25519_key
SSHサーバにデフォルトで用意されている主な鍵

まとめ

 SSHのホスト認証は、リモートサーバーへの接続を安全に行うための重要なプロセスです。クライアントがサーバーに接続する際、サーバーの公開鍵を使用してその信頼性を確認します。このプロセスにより、接続の安全性が確保され、不正なサーバーへの接続を防ぐことができます。さらに、SSHサーバーにデフォルトで用意されている秘密鍵と公開鍵は、異なる暗号アルゴリズムを使用しており、それぞれがセキュリティの維持に重要な役割を果たしています。