web-dev-qa-db-ja.com

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

2つのファイル、id_rsaおよびid_rsa.pubvalidペアであるかどうかを検証するために使用できるコマンドは何ですか?

86
Ryan

ssh-keygen -y -e -f <private key>Stack/Overflowで公開/秘密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" )
107
Michuelnik

テストしている公開鍵ファイルをどこで取得するかによって、受け入れられた回答が誤った結果をもたらす可能性があります。これは、@ drewbennによるコメントで説明されている動作によるものです。具体的には、秘密鍵ファイルを-fオプションパラメータとして-eオプションを使用すると、関連する公開鍵ファイルの内容が単にオロットされます(ただし再フォーマットされます)。

言い換えると、

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)

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

41
twildfarmer

ローカルシステム上にある場合は、id_rsa.pubキーを使用して、$HOME/.ssh/authorized_keysid_rsasshlocalhostに固定します。それが機能する場合、それらは一致します。

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