web-dev-qa-db-ja.com

opensshでホストの指紋を確認する方法

リモートマシンからホームマシンに接続しようとしたときに、新しく接続するホストのフィンガピンを確認するにはどうすればよいですか。最初の接続で私はこれを得ました:

[email protected]$ ssh [email protected]:~/
The authenticity of Host '[home-machine.org]:222 ([x.xx.xx.xx]:222)' can't be established.
ECDSA key fingerprint is SHA256:6lr/VtTwgrKZVNZQ8y8Le/ilfBYfo0e+9UliSg+AD2k.
Are you sure you want to continue connecting (yes/no)? 

「ホームマシン」の指紋を確認するにはどうすればよいですか。私は私の家のマシンでそれらを次のようにリストしようとしました:

[email protected]:~$ for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file};  done
1024 d1:ef:db:b4:24:fc:ca:fe:e1:11:8c:36:0a:77:90:49 /etc/ssh/ssh_Host_dsa_key.pub (DSA)
256 d9:25:51:16:ca:76:bd:8f:b8:6a:79:a2:1c:81:4b:4c /etc/ssh/ssh_Host_ecdsa_key.pub (ECDSA)
2048 3a:c6:2d:29:7c:b9:16:e8:ed:1c:a8:26:5d:ab:0d:1e /etc/ssh/ssh_Host_rsa_key.pub (RSA)
[email protected]:~$ 

しかし、それらのキーは別の形式になっているようです。これはある種のMD5フィンガープリントですか?どうすればこれらの指紋を統一された形式にできますか?

8
Emiter

Sshサーバーが提供するsha256公開鍵ハッシュは、md5ハッシュよりもはるかに安全です。

次に、md5ハッシュの代わりにsha256を使用することをssh-keygenに指定する必要があります。 home-machineでコマンドを実行してみてください:

for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file} -E sha256; done

6
vera

使用するコマンド

  • サーバーに保存されている公開ホストキーのascii-artを表示します(サーバー側で行うには、sshを介して接続するもの):

    _ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_Host_ecdsa_key.pub
    _

    -l:指定した公開鍵ファイルのフィンガープリントを表示します。

    -v:ビジュアル(ascii-art)

    -E md5:フィンガープリントの計算に使用されるハッシュアルゴリズム( "md5"または "sha256")。 (可能な場合は「sha256」が推奨されます)。 (古いバージョンのssh-keygenでは使用できない場合があります)

    -f:ファイル

  • リモートサーバーの公開ホストキーのascii-artを表示します(クライアント側で実行するため、ssh経由でFROMから接続するもの):

    _ssh -o visualhostkey=yes -o FingerprintHash=md5 <Host_server_to_connect>
    _

    -o:オプション

    visualhostkey:ビジュアル(ascii-art)

    FingerprintHash:使用するハッシュアルゴ(サーバーから取得したものと同じ:md5またはsha256)

ホスト/サーバーの信頼性をチェックするためにすべきこと

まず、1。はサーバー(sshを介してTOに接続するサーバー)でローカルに実行されます。これにより、最初のascii-artが提供されます。印刷するか、写真を撮ります。

次に、2。は最初のSSH接続で行われます。 2番目のアスキーアートが表示されます。 ascii-artが同じ場合、yes「I do trust?」質問(つまり、Are you sure you want to continue connecting (yes/no))。

  • サーバー側
_$ ssh-keygen -l -v -f /etc/ssh/ssh_Host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6   (ECDSA)
+--[ECDSA  256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+-----------------+
_
  • クライアント側
_$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of Host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)? 
_

もう少し説明

最初のコマンドは、入力として指定したファイルのフィンガープリント(およびフィンガープリント自体)に対応するascii-artを表示します。入力として与えるファイルは、サーバーの公開Hostキーです。クライアントが接続するとき(初めてではない)、サーバーはその公開ホストキーを送信します。この公開ホストキーは_~/.ssh/known_hosts_で検索されます。公開鍵がファイル内にある場合、問題はありません。ホスト(サーバー)がわかっているため、次のステップに進んでユーザーを認証します(ユーザー認証はこの投稿には記載されていません)。公開鍵がファイルにない場合、クライアントはハッシュアルゴリズムを使用してこの公開ホスト鍵のフィンガープリントを計算します(異なるハッシュアルゴは異なるフィンガープリントを提供します)。以前に計算されたこのフィンガープリントが表示され(対応するオプションが提供されている場合はascii-artとともに)、このフィンガープリントを認識するかどうかに応じて、yesまたはnoと答える必要があります(このフィンガープリントは、サーバ)。 「はい」と答えると、サーバーの公開鍵(フィンガープリントではない)がファイル_~/.ssh/known_hosts_に追加されます。

youがこのホスト(サーバー)を信頼しているため、_~/.ssh/known_hosts_がホーム(〜)ディレクトリの下にあることがわかりますが、別のユーザーがあなたと同じものを信頼しないでください。また、サーバーのホスト公開鍵はユーザーに依存しないため、_/etc/ssh/_に格納されます。

2番目のコマンドは、Host_server_to_connectから受信した公開鍵のフィンガープリントとアスキーアートを表示します(オプションで指定されたハッシュアルゴに従って)。これはsshのみを実行するのと同じですが、より多くの視覚的オプションがあるため、接続は通常のssh接続と同じ方法で続行されます。

3