説明
SSH (Secure Shell) は、通常はコマンド ライン経由でリモート マシンに安全にアクセスするための非常に一般的な方法です。SSH の目的は、接続と渡されるすべてのデータが盗聴されないことを保証することです。
このため、OpenSSH などの一般的な SSH クライアントには、接続が侵害されないようにするためのチェックが数多く組み込まれています。
これらのチェックの 1 つの例を以下に示します。これは、サーバーのフィンガープリントがいつ変更されたかを識別します。
$ ssh
[email protected]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 警告: リモート ホストの識別が変更されました! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
誰かが何か悪いことをしている可能性があります!
誰かが今あなたを盗聴している可能性があります (中間者攻撃)。
ホスト キーが変更された可能性もあります。
リモートホストから送信されたECDSAキーのフィンガープリントは
SHA256:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I。
システム管理者に問い合わせてください。
このメッセージを削除するには、/Users/scott/.ssh/known_hosts に正しいホスト キーを追加します。
/Users/scott/.ssh/known_hosts:47 に問題のある ECDSA キーがあります
ec2-192-168-1-1.compute-1.amazonaws.com の ECDSA ホスト キーが変更されたため、厳密なチェックを要求しました。
ホストキーの検証に失敗しました。
SSH 経由でサーバーに接続すると、ECDSA キーのフィンガープリントが取得され、ホーム ディレクトリの ~/.ssh/known_hosts に保存されます。これは最初にサーバーに接続した後に実行され、次のようなメッセージが表示されます。
$ ssh
[email protected]ホスト「ec2-192-168-1-1.compute-1.amazonaws.com (192.168.1.1)」の信頼性を確立できません。
ECDSA キーのフィンガープリントは SHA256:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I です。
本当に接続を続行しますか? (はい/いいえ)
「yes」と入力すると、フィンガープリントが known_hosts ファイルに保存され、SSH はそのサーバーに接続するたびにそのファイルを参照します。
しかし、最後に接続してからサーバーのECDSAキーが変更されていたらどうなるでしょうか?これは、知らないうちに別のサーバーに接続している可能性があるので、警戒すべきことです。この新しいサーバーが悪意のあるものである場合は、接続で送受信されるすべてのデータを見ることができるため、サーバーをセットアップした人がそれを利用することができます。これは中間者攻撃と呼ばれます。このシナリオは、まさに
「警告: リモート ホスト ID が変更されました!」というメッセージは警告を発しようとしています。
もちろん、常にそうなるわけではなく、サーバーの ECDSA キー フィンガープリントが変わる理由はさまざまです。私の場合、AWS に Elastic IP アドレスがあり、アプリケーションを再デプロイした後、それを別のサーバーに割り当てました。接続先の IP アドレスとホスト名は同じでしたが、基盤となるサーバーが異なっていたため、SSH クライアントがトリップしてこの警告が発行されました。
問題の解決
これが想定された動作であり、潜在的なセキュリティ問題がないことを 100% 確信している場合は、続行する前に問題を修正する必要があります。
この問題を解決するために私が見つけた最も簡単な方法は、次の 2 つの解決策です。
known_hosts 経由で手動で解決する
* 警告メッセージで、問題のあるECDSAキーがknown_hostsファイルのどこにあるのかを示す行を見つけます。私の例では、この行は「問題のあるECDSAキーが
/Users/scott/.ssh/known_hosts:47" は 47 行目を参照します。
* 警告メッセージで指定されたknown_hostsファイルを開きます
* 警告メッセージで指定された行を削除します
この行を削除すると、SSH クライアントは比較する ECDSA キーのフィンガープリントを持たなくなり、次回接続するときにサーバーの信頼性を確認するよう再度要求されます。完了すると、このサーバーの known_hosts ファイルに新しいフィンガープリントが作成され、警告は表示されなくなります。
ssh-keygenを使用して解決する
別の解決策としては、ssh-keygen ユーティリティを使用して、known_hosts ファイルから問題のあるキーを削除することです。これは、次のコマンドで実行できます。
$ ssh-keygen -R [ホスト名またはIP]
私の例では、次のように使用します。
$ ssh-keygen -R ec2-192-168-1-1.compute-1.amazonaws.com
この方法は、known_hosts ファイルを手動で変更したくない場合に適しており、修正するホスト名と IP アドレスが複数ある場合は、このユーティリティの方が使いやすくなります。また、known_hosts.old ファイル内のハッシュ化されたホスト名も処理できます。