公開/秘密DSA鍵ペアをどのようにテストしますか?


167

特定の秘密鍵が特定の公開鍵と一致することを確認する簡単な方法はありますか?私はいくつかの* .pubファイルといくつかの* .keyファイルを持っています。どちらが適切かを確認する必要があります。

ここでも、これらはpub / keyファイル、DSAです。

私は本当にある種のライナーを望んでいます...

回答:


259

私にはもっとうまくいくように見える方法を見つけました:

ssh-keygen -y -f <private key file>

このコマンドは、指定された秘密鍵の公開鍵を出力するため、出力を各* .pubファイルと比較するだけです。


2
これは正確に何をしますか?なぜsshなのか?
sammiwei

2
おそらく彼がssh認証にキーペアを使用しているためでしょう
etarion

2
私の場合、中央のワークサーバーには数十のid_rsa.pub.blahhostファイルがあり、どれが単一のid_rsa秘密キーに一致するかわからなかったので、古いWebサイトから移行できるようにパスワードなしのscpを設定しています。新しいキーペアを作成することはできません。私は自分の鍵をうまく設定していて、それを台無しにするつもりはありません。
Chris K

1
このソリューションは、すべてのタイプのSSHキーで機能するようです。私はこの方法で、見当違いの公開鍵をなんとか回復することさえできました。
Jari Turkia

53

私は常にこれらのコマンドを使用して係数のMD5ハッシュを比較します。

Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5

ハッシュが一致する場合、これらの2つのファイルは結合されます。


48

DSAキーの場合は、

 openssl dsa -pubin -in dsa.pub -modulus -noout

公開鍵を出力するには、

 openssl dsa -in dsa.key -modulus -noout

秘密鍵に対応する公開鍵を表示し、それらを比較します。


18

x.509証明書内に公開鍵があると想定し、それらがRSA鍵であると想定すると、公開鍵ごとに次のようにします。

    openssl x509 -in certfile -modulus -noout

秘密鍵ごとに、

    openssl rsa -in keyfile -modulus -noout

次に、モジュラスでキーを照合します。


17

チェックはdiffで簡単にできます:

diff <(ssh-keygen -y -f <private_key_file>) <public key file>

唯一奇妙なことは、ファイルが同じである場合、diffは何も言わないので、パブリックとプライベート一致しない場合にのみ通知されます。


3
ファイルが一致したときに出力を取得するには:diff -s
Roland

3
これは素晴らしい答えです。(1)はdiff -qs、単純な「同一/同一ではない答えを返します(2)あなたは差分を実行する前に、公開鍵ファイルのコメントを削除する必要があります。。
エモリー

7

公開鍵を削除し、秘密鍵から新しいものを生成します。それらを別々のディレクトリに保管するか、命名規則を使用してそれらをまっすぐに保ちます。


3
問題は、検証方法と、それを検証するデバイスに、新しいデバイスを生成する機能がない可能性があることです。
ArmenB

5

次のコマンドを入力して、秘密鍵と公開鍵が$ USER / .sshディレクトリ内の一致するセット(同一)であるか、一致しない(異なる)かを確認します。cutコマンドは、公開鍵の行末のコメントが比較されないようにし、鍵のみを比較できるようにします。

ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)

出力は次のいずれかの行のようになります。

Files - and /dev/fd/63 are identical

Files - and /dev/fd/63 differ

ユーザーが〜/ .ssh / filesと一致するキーセットのファイル権限をチェックするために使用するシェルスクリプトを書きました。sshを設定するユーザーインシデントで私の課題を解決します。それはあなたを助けるかもしれません。 https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh

注:私の以前の回答(2018年3月)は、opensshの最新リリースでは機能しません。以前の回答:diff -qs <(ssh-keygen -yf〜/ .ssh / id_rsa)<(cut -d '' -f 1,2〜/ .ssh / id_rsa.pub)


詳しく説明する必要があると思います。投稿は、stackoverflow.com
a / 22595408/3102264


4

WindowsでGUIを使用したい場合は、puttygenを使用して秘密鍵をインポートできます。

ここに画像の説明を入力してください

インポートしたら、その公開鍵を保存して自分のものと比較できます。


1

何かを公開鍵で暗号化し、どの秘密鍵がそれを復号化するかを確認します。

Jeff Atwoodによるこのコードプロジェクト記事は、.NET暗号クラスの簡略化されたラッパーを実装しています。これらの鍵がRSAで使用するために作成されたと仮定すると、非対称クラスを使用して公開鍵を暗号化し、秘密鍵を使用して復号化します。


もう少しシンプルなものを探しています。シェルワンライナーなどと言います。私はLinuxを使用しており、opensslなどの通常のものをインストールしています。
ロキ

3
これは、authorized_keysファイルに公開鍵を追加し、sshを使用してどの秘密鍵が機能するかを確認するのと同じくらい便利です。メソッドは機能しますが、それは苦痛です。
Bradley Kreider 2013年

0

それが何も返さない場合、それらは一致します:

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost

-2

puttygenを使用して秘密鍵をロードするだけです。対応する公開鍵のエクスポートなど、さまざまなオプションを提供します。


1
これは、秘密鍵と公開鍵のペアをテストすることを許可しません
MatFiz '29
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.