web-dev-qa-db-ja.com

PEM sshキーのフィンガープリント

実行中の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.
34
Unknown

失った公開鍵ファイルのフィンガープリントを取得したい場合は、 秘密鍵ファイルからそれを回復する

$ 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フィンガープリントを出力します。オプション-Eを使用して、キーのMD5フィンガープリント(コロン形式)を印刷できます。

$ 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)
38
ominug

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

(上記の出力で編集された指紋)

52
Mike D

ローカルに公開鍵ファイルを作成せずに、必要なことを実行できる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)

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

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

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

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

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

6
htaccess

秘密鍵ファイルからではなく、公開鍵ファイルからフィンガープリントを取得します。

実際、ssh-keygenはすでに次のように言っています。

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

公開鍵の半分に対してそれを実行すると、動作するはずです。

より一般的に言えば

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

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

2
Stephane