PEM sshキーの指紋


30

実行中のssh-agentに追加するPEMファイルがあります。

$ file query.pem
query.pem: PEM RSA private key

$ ssh-add ./query.pem
Identity added: ./query.pem (./query.pem)

$ ssh-add -l | grep query
2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA)

ファイルから直接キーの指紋(ssh-agentに表示されます)を取得するにはどうすればよいですか?ssh-keygen -l -f some_key「通常の」sshキーで機能することは知っていますが、PEMファイルでは機能しません。

.pemファイルでssh-keygenを試してみると、次のようになります。

$ ssh-keygen -l -f ./query.pem                                             
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem is not a public key file.

このキーは次で始まります:

-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.

「通常の」秘密鍵とは対照的に、次のようになります。

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.

なぜPEMファイルでは機能しないと思いますか?試したときにどのようなエラーが発生しますか?.ssh/id_rsaすべてのデフォルトを使用してOpenSSHによって生成されたファイルはPEMファイルです。秘密鍵はデフォルトでPEMエンコードされています。実際、OpenSSLで生成したRSAキーをOpenSSHで直接使用できます。
ゾレダチェ

.pemのssh-keygenからの出力で説明を更新
不明

(遅いが壊されている)@Zoredache:7.2より前(2016年、このQの後) ssh-keygen -lは、他のssh-keygen(およびssh*)操作は可能ですが、秘密鍵ファイルを読み取ることができません。しかし、時には、ssh-keygen 生成し、それはPrivateKeyのファイルなど、両方の書き込みをキーid_rsa して、対応する公開鍵ファイル.pub追加などをid_rsa.pub。古い方ssh-keygen -l .pub、指定したファイル名に追加して、その公開鍵ファイルを読み取ろうとします。
dave_thompson_085

回答:


34

紛失した公開鍵ファイルの指紋を取得したい場合は、秘密鍵ファイルから回復できます

$ ssh-keygen -yf path/to/private_key_file > path/to/store/public_key_file

次に、パブリックフィンガープリントを確認できます。

$ ssh-keygen -lf path/to/store/public_key_file
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@host (RSA)

一部の新しいシステムでは、これによりキーのSHA256フィンガープリントが出力されます。optionを使用して、キーのMD5フィンガープリント(コロン形式)を印刷できます-E

$ ssh-keygen -E md5 -lf path/to/store/public_key_file
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

または、1つのコマンドラインとして

$ ssh-keygen -yf /etc/ssh/ssh_host_ecdsa_key | ssh-keygen -E md5 -lf -
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

@MikeDの答えは、実際にはOPが探していたもの(および私が探していたもの)に対する「正しい」答えです。AWSは、コロンで区切られた数字のペアを使用して、彼が示した形式で指紋を提供します。彼のソリューション(提供されたAWSページから取得)もこの同じ方法で指紋を生成するため、正しく検証できます。
マイクウィリアムソン

50

AWSの「キーペアの指紋の検証」は、キーの作成方法に応じて、問題を解決する2つのワンライナーを提供します。

AWSを使用してキーペアを作成した場合:

$ openssl pkcs8 -in query.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

または、サードパーティのツールを使用してキーペアを作成した場合:

$ openssl rsa -in query.pem -pubout -outform DER | openssl md5 -c
writing RSA key
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

(上の出力で指紋が編集されています)


6

これは、公開キーファイルをローカルで作成することなく、必要な処理を実行する1つのライナーです。

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)

これは、<<<ファイルでのみ動作/dev/stdinするパイプではなく、通常のファイル()としてstdinを使用できるようにするために、bash here文字列を使用しssh-keygenます。

opensshリリース7.2では、ssh-keygen標準入力からのフィンガープリントをサポートしています。

  • ssh-keygen(1):標準入力からのフィンガープリントを許可します(例: "ssh-keygen -lf-")

このコマンドは、パスフレーズを使用し、エージェントを使用していない秘密鍵で中断することに注意してください。パスフレーズを使用しないAWSまたはOpenStackによって生成されたpemファイルで動作するはずです。

詳細については、https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdinを参照してください


リリースノートには書かれていませんでしたが、7.2のソースによるとprivatekeyファイルの-l読み取りもサポートしてます(stdinからではありません)。
dave_thompson_085

2

秘密鍵ファイルからではなく、公開鍵ファイルから指紋を取得します。

実際、ssh-keygenはすでにあなたにこう言っています:

./query.pemは公開鍵ファイルではありません。

キーの公開半分に対して実行すると、動作するはずです。

より一般的に言えば

考えてみてください。指紋が存在する理由は、公開鍵を特定できるからです。実際、秘密鍵のハッシュを取得することは、サーバーにとって役に立たないことに加えて、潜在的なセキュリティ問題です(問題の秘密鍵さえ持っていません)。

公開鍵を取得したら、プロセスは、クライアントが対応する秘密の半分を保持していることを確認することです。確認しようとしているキーが既にわかっているので、指紋は必要ありません。


問題は、私はこの秘密鍵の公開鍵を持っていないことです:(そして、別のことssh-keygenは、最初に追加情報を持っているRSA秘密鍵ファイルで動作します(私の最初の投稿を参照)が、これではありません。 。
未知の

それからあなたがそれについてできることは何もありません。秘密部分から公開キーの半分を取得することはできません。
ステファン

3
それは間違っています。@ominugが上で指摘したように、ssh-keygen -yfこれを行います。
スティーブベネット14年

4
@Stephane純粋なRSAレベルでは正しいものですが、実際には、PKCS仕様でのキーの保存方法には、プライベートキーの形式に実際には両方のキーが含まれます。以下のための比較スペック民間公共
ホーカンLindqvist

「秘密鍵から公開鍵の半分を取得することはできません...」-はい、おそらくできます。秘密鍵からモジュラスを取得し、公開指数として65537を使用します。公開鍵が見つかる可能性があります。
ジム・洪水
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.