質問: 新しいバージョンのopensshでssh鍵のフィンガープリントを(古い)hex形式で取得する opensshが主要な指紋の表示方法を変更したようです。私はクライアントマシンからサーバーへsshしようとしています。 クライアント:openssh 6.6.1を実行しているubuntu 14.04 サーバー:openssh 7.2p2を実行しているfreebsd。 クライアントは、サーバーのキーのmd5ハッシュを16対の16進数のシーケンスとして報告します。 a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a サーバーはデフォルトでsha256ハッシュを使用するようになっていますが、 この答えのおかげで sha1ハッシュを与えるように強制することができます [root@host /etc/ssh]# ssh-keygen -l -e sha1 -f ssh_host_ecdsa_key.pub 結果を次のようにします。 a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a しかし、代わりに私はこれを得ます: 256 sha1:kih0ejr4o+rqrsq7jdgaasddrfi root@host.local (ecdsa) 私には、base64でエンコードされたフィンガープリントが16進数ではなく表示されているように見えます。同じものであることを確認するために、(古い)クライアントが報告したものと同じ形式(コロンで区切られた16進数、sha1ハッシュ)でサーバーのキーのチェックサムを取得する方法は?編集:古いバージョンのsshは md5 checksumを与え、 not sha1チェックサムを与えます。私が誤って考えたように。 -eオプションでそのチェックサムを使用すると(現在受け入れられている回答では記述されているはずです)、望ましい出力が得られます。
回答: 結局のところ、 sshクックブック には、古い16進形式のキーを手動で生成する方法があります。私はfreebsdサーバーでこれを使いました。 awk '{print $ 2}' key.pub | base64 -d | md5 | sedの/../&:/ g; s /:。* $ // ' これを分解する: awk '{print $ 2}' key.pub キーそのものである "key.pub"の2番目の(スペースで区切られた)列を印刷する base64 -d キーはbase64エンコードです。これはキーの実際のバイト数を出力します md5 これは、sshクックブックページのレシピで指定されている 'md5sum -b'に相当するfreebsdのものです。 sedの/../&:/ g; s /:。* $ // ' ここには2つのsedコマンドがあります。 s /../&:/ g; 行末のすべての文字のペアを(末尾の 'g'フラグのおかげで)同じペアの後にコロンを続けたものに置き換えます。 s /:。* $ // ' 末尾のコロンを削除します(コロンの後にスペースを置き、その後に行末までを空白で置き換えます)。