web-dev-qa-db-ja.com

リモートホストから送信されたECDSAキーのフィンガープリントを確認します

サーバーにSSH接続しようとすると、よく知られた警告メッセージが表示されます。

$ ssh whateverhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE Host IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a Host key has just been changed.
The fingerprint for the ECDSA key sent by the remote Host is
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Please contact your system administrator.
Add correct Host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:10
ECDSA Host key for ipofmyhost has changed and you have requested strict checking.
Host key verification failed.

そして、私はそのようなサーバーのIPを変更したので理由を知っています。しかし、そうでない場合、リモートホストから送信されたECDSAキーのフィンガープリントをどのように確認できますか?

私はそうすることを試みました:

echo -n ipofthehost | sha256sum

しかし、私は同じ指紋を取得しません。私はawsのような「ホスト名、ip」も試しましたが、一致しませんでした。

私のknown_hostsファイルから入り口を削除し、もう一度sshしようとすると、成功して次のように通知されます。

ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

では、指紋を取得するためにsha256sumをどのように適用し、それをどのように確認できるのでしょうか。

25
gugol

公開鍵のフィンガープリントは、IP文字列の単純なハッシュではありません。

リモートホストの公開鍵を取得するには、ssh-keyscan <IP>を使用してから、通常のツールを使用してフィンガープリント(ssh-keygen -lf <public_key_file>)を抽出できます。

最後に、known_hostsファイルの現在の指紋とssh-keygen -l -F <domain_or_ip>を比較できます。

13
Xavier Lucas

もう少し詳しく:警告メッセージはリモートホストから送信されたECDSAキーのフィンガープリントを参照しているため、ホストの公開(ecdsa)キーに関する情報を収集します。

ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare

次に、公開(ecdsa)キーがknown_hostsファイルのどこにあるかを確認できます。

ssh-keygen -l -F ipofhost

フィンガープリントを比較したい場合は、known_hostsファイルのコンテンツ(このホストに関連するエントリのみ)を置く必要があります。これをecdsa_file_from_known_hostsと呼び、次のように比較できます。

ssh-keygen -lf ecdsa_file_to_compare
ssh-keygen -lf ecdsa_file_from_known_hosts

そして、同じハッシュを表示するかどうかを確認します。

もちろん、それらは一致しません。それが私が警告メッセージを受け取った理由です(sshはこの一致を内部的にチェックします)。 IPの変更について確信がある場合(つまり、中間者攻撃を受けていない場合)、known_hostsファイルからそのホストのエントリを削除し、次にsshを実行して、新しい新しいエントリを追加します。そのようなファイルに追加されます。

9
gugol