web-dev-qa-db-ja.com

ECDSAキーフィンガープリント-base64でエンコードされているように見えますが、文字が少なすぎます

GitLab VM をセットアップし、その上にプロジェクトを作成しました。今私は私のgitクライアントを使用して別のマシンからそれに接続しようとしています( Git for Windows v2.7.1 ...また、最新バージョン2.15.1にアップグレードしようとしましたが、変更はありませんでした)。

Windowsマシンでは、次のことを試みます。

git Push -u Origin --all
The authenticity of Host 'localgit.local (10.1.2.3)' can't be established.
ECDSA key fingerprint is SHA256:twmcV7LjBtI9vUsDeFEHeH0lUcBAihWtGye0K9vHCrk.
Are you sure you want to continue connecting (yes/no)? no

私が「いいえ」を選択したのは、VMでそれを再確認したところ、別のフィンガープリントが見つかったためです。

ssh-keygen -lf /etc/ssh/ssh_Host_ecdsa_key.pub
256 7e:e4:4e:7f:47:b0:41:75:2c:45:bd:be:f5:44:77:d7 /etc/ssh/ssh_Host_ecdsa_key.pub (ECDSA)

わかりました。16進数形式なので、base64に変換するだけですよね?

hex: 7ee44e7f47b041752c45bdbef54477d7
base64: fuROf0ewQXUsRb2+9UR31w==

それは一致しません...他の方法でbase64フィンガープリントを16進数に変換して、それがどのように見えるかを確認したらどうなるでしょうか。できません。43文字で、base64文字列の長さは4の倍数でなければなりません。

私がここで欠けているものについてのアイデアはありますか?

5
Anssssss

オクテット区切りのコロン形式は、MD5フィンガープリントであり、SHA256フィンガープリントではありません。一方を他方に直接変換することはできません(まあ、MD5フィンガープリントを逆にすると、たぶん可能性がありますが、それでもCPUパワーが少し必要になります)。

最近のデフォルトの出力形式はSHA256であるため、ssh-keygenがMD5フィンガープリントを出力していることは、そのマシンがかなり古いバージョンのOpenSSHを実行している可能性があることを示唆しています。 -E sha256ssh-keygenに渡して、SHA256ハッシュを出力できるようにすることができます。SHA256をサポートしているが、デフォルトでMD5になっているバージョンがあり、たまたまそれを実行しているのですが、私はしません。それは確かにうまくいくと言いたいです。

ssh-keygenのバージョンを取得してSHA256を出力できない場合、他のオプションは、SSHクライアントを「ダウングレード」して、接続時にMD5フィンガープリントを出力することです。そのためには、コマンドラインで-o FingerprintHash=md5(またはSSH構成のFingerprintHash md5)を設定する必要があります。 git経由でSSHを実行している場合、そのための最善の方法は、鋭敏な読者のための演習として残されています。 <ニヤリ>

補足:base64 SHA256ハッシュが「正しい」文字数ではない理由は、SHA256ハッシュが末尾の=記号なしでbase64文字列に適合する「正しい」文字数ではないためです。最後の数文字は「常に」=記号になるため、ドロップされるだけで、不要な文字をいくつか節約できます。

1
womble

同じ質問があったので、少し深く掘り下げました。

Linuxサーバーでは、次のコマンドを実行できます。

awk '{print $2}' /etc/ssh/ssh_Host_ecdsa_key.pub | base64 -d | sha256sum -b | sed 's/ .*$//' | xxd -r -p | base64

クライアントが接続しようとしたときに表示されるのと同じSHA256+Base64フィンガープリントを生成します。

ソース: https://www.lastbreach.com/blog/ssh-public-key-verification-with-fingerprinthash

0
HorstKevin