RSA公開/秘密キーペアが一致するかどうかを確認する方法


71

2つのファイルがid_rsaありid_rsa.pubます。それらが有効なペアであるかどうかを検証するには、どのコマンドを使用できますか?


ミシェルニックの答えを確認します。おかげで、新しいキーペアを作成する必要がなくなりました。ssh -vとても役立ちます。
クリスK

回答:


92

私が好むssh-keygen -y -e -f <private key>方法の代わりの受け入れ答えパブリック/プライベートDSA鍵ペアをテストするにはどうすればよいですか?スタックオーバーフロー。

ssh-keygen -y -e -f <private key>秘密鍵を取得し、対応する公開鍵を出力します。公開鍵は、使用可能な公開鍵と直接比較できます。(ヒント:コメントまたはキーオプションに注意してください。)

(一体どうやってそんなことをしているのでしょうか?公開鍵が直接または間接的に秘密鍵にエンコードされることを望みます...)

私はこれを自分で必要とし、次のBashワンライナーを使用しました。キーが一緒に属する場合、何も出力されません。-qスクリプトのdiffに少し適用すると、diffは戻りコードを適切に設定するだけです。

PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )

1
@MichaelHampton:、あなたのコメントを理解しました。「受け入れ答えは、」stackoverflowの上の問題ではありませんを参照してください、この質問...
Michuelnik

1
@Sirch:2つのキーが等しいため、どのキーがプライベートで、どれがパブリックであるかの決定は純粋にランダムだと思いました。1つのキーが暗号化するものは、他のキーでのみ解読できます。そして、1つのキーを他のキーから取得できる場合、これはすべて機能しません。
ミシェルニック

1
@Michuelnik秘密鍵から公開鍵を導出できます。公開鍵から秘密鍵を導出することはできません。暗号化する素材については話していませんでした。
サーチ

1
@Michuelnik imho、質問はSOのトピックから外れており、ここ(および/またはスーパーユーザー)でオントピックです。私見、それは重複としてマークされるべきではなく、代わりに移行のためにそこでフラグを立てられるべきではありません。しかし、両方に対応しているため、より完全な情報共有が好きです。
クリスK

10
id_rsa.pubが存在する限り、ssh-keygen -y -e -f id_rsaid_rsaをまったくチェックせず、id_rsa.pubから値を返します。たとえばecho 5 > id_rsa、秘密鍵を消去してからdiffを実行すると、diffはパスします!また、ssh-keygen -yef foofooが有効なキーではない(および対応するfoo.pubがない)ところで実行すると、ユーザー入力の待機がブロックされるため、スクリプトでこれを使用する場合は注意してください。

32

テストしている公開鍵ファイルの入手先によっては、受け入れられた回答が偽陽性の結果になる場合があります。これは、@ drewbennによるコメントで説明されている動作のためです。具体的には、秘密キーファイルで-eオプションを-fオプションパラメータとして使用すると、関連する公開キーファイルの内容を単純にオウムします(ただし、再フォーマットします)。

言い換えると、

ssh-keygen -y -f id_rsa

(明らかに)公開鍵の値を生成し

ssh-keygen -y -e -f id_rsa

単に出力(および再フォーマット)でキーの既存 id_rsa.pub それが何であれ

私の場合、ペアが破損していないことを確認する必要があります。そこで、私は以下を比較することにしました。

ssh-keygen -y -f id_rsa | cut -d' ' -f 2

cut -d' ' -f 2 id_rsa.pub

したがって:

diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)

おそらくこれはそれほど柔軟ではありませんが、私のニーズには適しています。たぶんそれは他の誰かを助ける。


5
これは、受け入れられた答えを本当に置き換えるか、少なくとも賛成票の点でそれを上回るはずです。
トーマンスキー

ありがとうございました!このコマンドはパスフレーズ付きのキーでは機能せず、対話的に要求しません。2つのコマンドの内容をファイルに抽出し、それらを差分しましたが、動作します。
ヤロスラフ・ニキテンコ

5

彼らは、ローカルシステムにしている場合は、スティックid_rsa.pubあなたに$HOME/.ssh/authorized_keyssshlocalhost使用してid_rsaキーを。それが機能する場合、それらは一致します。

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.