
リモート マシンからホーム マシンに接続しようとしたときに、新しく接続するホストのフィンガープリントを検証するにはどうすればよいですか。最初の接続では次のメッセージが表示されました。
[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 のようなものですか? どうすれば、それらの指紋を統一された形式で取得できるのでしょうか?
答え1
SSH サーバーは SHA256 公開キー ハッシュを提供しており、これは MD5 ハッシュよりもはるかに安全です。
次に、MD5ハッシュではなくSHA256ハッシュをssh-keygenに指定する必要があります。家庭用マシン(例ではリモート マシンから接続しようとしている):
for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file} -E sha256; done
答え2
使用されるコマンド
サーバーに保存されている公開ホスト キーの ASCII アートを表示します (ssh 経由で接続するサーバー側で実行します)。
ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
-l: 指定された公開鍵ファイルのフィンガープリントを表示します。
-v: ビジュアル(アスキーアート)
-E md5: フィンガープリントを計算するために使用されるハッシュ アルゴリズム ("md5" または "sha256")。(使用可能な場合は "sha256" が優先されます)。(ssh-keygen の古いバージョンでは使用できない可能性があります)
-f: ファイル
リモート サーバーの公開ホスト キーの ASCII アートを表示します (ssh 経由で接続するクライアント側で実行します)。
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-o: オプション
ビジュアルホストキー: ビジュアル(アスキーアート)
指紋ハッシュ: 使用するハッシュアルゴリズム(サーバーから取得したものと同じものを使用します: md5 または sha256)
ホスト/サーバーの信頼性を確認する手順
まず、1.これは、サーバー (ssh 経由で接続するサーバー) 上でローカルに実行します。最初の ASCII アートが表示されます。それを印刷するか、写真を撮ってください。
2番目、2。最初のSSH接続時に実行する必要があります。2番目のASCIIアートが表示されます。ASCIIアートが同じであれば、次のように答えることができます。はいに「信頼しますか?」質問(すなわち
Are you sure you want to continue connecting (yes/no)
)。
例
- 1. サーバー側
$ ssh-keygen -l -v -E md5 -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.. |
+-----------------+
- 2. クライアント側
$ 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アート(およびフィンガープリント自体)を表示します。入力として指定したファイルは、公開されているファイルです。ホストサーバーの公開ホストキー。クライアントが接続すると (初回だけでなく)、サーバーは公開ホストキーを送信します。この公開ホストキーは で検索されます~/.ssh/known_hosts
。公開キーがファイル内にある場合は問題ありません。ホスト (サーバー) はわかっているので、次の手順に進み、ユーザーを認証します (ユーザー認証についてはこの投稿では説明しません)。公開キーがファイル内にない場合、クライアントはハッシュ アルゴリズムを使用してこの公開ホストキーのフィンガープリントを計算します (ハッシュ アルゴリズムが異なると、フィンガープリントも異なります)。以前に計算されたこのフィンガープリントが表示され (対応するオプションが提供されている場合は ASCII アートとともに)、このフィンガープリントを認識しているかどうかに応じて、はいまたはいいえで答える必要があります (このフィンガープリントは、サーバーの公開ホストキーのイメージ/ハッシュです)。はいと答えると、サーバーの公開キー (フィンガープリントではありません) がファイル に追加されます~/.ssh/known_hosts
。
~/.ssh/known_hosts
下にあることがわかりますあなたのホーム(〜)ディレクトリ、なぜならあなたこのホスト (サーバー) を信頼しますが、別のユーザーは同じホスト (サーバー) を信頼しない可能性があります。また、サーバーのホスト公開鍵はユーザーに依存しないため、 に保存されます/etc/ssh/
。
2番目のコマンドは、受信した公開鍵の指紋とASCIIアートを表示します。接続するホストサーバー(オプションで指定されたハッシュ アルゴリズムに従って)。これは、ssh のみを実行するのと同じですが、視覚的なオプションがさらに追加されるため、接続は通常の ssh 接続と同じように継続されます。
答え3
サーバ
ssh-keygen -l -v -f /etc/ssh/ssh_host_ed25519_key
このディレクトリ内の他のファイルの 1 つを使用して、クライアントのアルゴリズムと一致させる必要がある場合があります。ファイルには適切な権限があるため、公開キーが使用されます。
例えば、次のように書く必要があるかもしれません
ssh-keygen -l -v -f /etc/ssh/ssh_host_rsa_key
クライアント
ssh -o visualhostkey=yes -o FingerprintHash=sha256