使用するコマンド
-
サーバーに保存されている公開ホスト キーのアスキー アートを表示します (ssh 経由で接続するサーバー側で行います):
ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
-l :指定された公開鍵ファイルのフィンガープリントを表示します。
-v :ビジュアル (アスキーアート)
-f :ファイル
-
リモート サーバーの公開ホスト キーのアスキー アートを表示します (ssh 経由で接続するクライアント側で行います):
ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
-o :オプション
visualhostkey :ビジュアル (アスキーアート)
指紋ハッシュ :使用するハッシュアルゴリズム
ホスト/サーバーの信頼性を確認する方法
まず、1. はサーバー ( ssh 経由で接続するサーバー) でローカルに実行されます。最初の ascii-art が表示されます。印刷するか、写真を撮ってください。
次に、2. は最初の SSH 接続で実行されます。 2 番目の ascii-art が表示されます。 ascii-art が同じであれば、yes と答えることができます 「信頼できますか?」 質問 (例: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 を表示します。入力として指定したファイルは、パブリック ホスト です サーバーのキー。クライアントが接続するとき (初回だけでなく)、サーバーは公開ホスト キーを送信します。この公開ホスト鍵は ~/.ssh/known_hosts
で検索されます .公開鍵がファイルにある場合は問題ありません。ホスト (サーバー) はわかっているので、次のステップに進んでユーザーを認証します (ユーザー認証については、この投稿では説明しません)。公開鍵がファイルにない場合、クライアントはハッシュ アルゴリズムを使用してこの公開ホスト キーのフィンガープリントを計算します (別のハッシュ アルゴリズムは別のフィンガープリントを提供します)。以前に計算されたこのフィンガープリントが (対応するオプションが提供されている場合は ascii-art と共に) 表示され、このフィンガープリントを認識するか認識しないかに応じて、「はい」または「いいえ」と答える必要があります (このフィンガープリントは、ホストの公開鍵のイメージ/ハッシュです)。サーバ)。 「はい」と答えた場合、サーバーのパブリック キー (フィンガープリントではありません) がファイル ~/.ssh/known_hosts
に追加されます。 .
~/.ssh/known_hosts
であることがわかります あなたのため、あなたのホーム (~) ディレクトリの下にあります。 このホスト (サーバー) を信頼しますが、別のユーザーはあなたと同じものを信頼しない可能性があります。また、サーバーのホスト公開鍵はユーザー依存ではないため、/etc/ssh/
に格納されています。 .
2 番目のコマンドは、host_server_to_connect から受け取った公開鍵のフィンガープリントとアスキー アートを表示します。 (オプションで指定されたハッシュアルゴリズムによる)。これは ssh のみを行うのと同じですが、より視覚的なオプションがあるため、接続は通常の ssh 接続と同じ方法で続行されます。
私のシステムでは、デフォルトの SHA256 の代わりに MD5 キーを指定する必要があります:
ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
これにより、クライアントで見たエラーと一致する形式で文字列が出力されます。
待って、見つけた。コマンドを実行します:
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
最近の ssh (OpenSSH_6.0p1、OpenSSL 1.0.0j 2012 年 5 月 10 日) で、次のようにスクリプトを作成しました:
ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=
注:
- sshd がカスタム ポートで実行されている場合は、'
-p portNumber
を追加します 'ssh-keyscan
に コマンド) ssh-keyscan
stderr
に書き込みます 、stdout
ではありません (!)、したがってbash
リダイレクト '2>&1
' (シェルによって異なる場合があります)
それが ~/.ssh/known_hosts
に追加した行です テスト用に localhost からの ssh リクエストを承認するためのファイル (主に、ssh を使用する gitolite 用)。
Daniel Böhmer がコメントで確認しています:
ssh-keyscan
SSH サーバーの完全な公開鍵を提供しますssh-keygen
の出力 公開鍵ファイルの形式とほぼ同じです。
最初の列 (IP アドレスまたはホスト名) を削除して保存するか、ssh-keygen -l
にパイプします。 指紋を提示します。
ダニエルは次のように付け加えます:
<ブロック引用>
~/.ssh/know_hosts
に保存されているすべてのサーバー公開鍵のフィンガープリントを表示します :
cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done