特定の秘密鍵が特定の公開鍵と一致することを確認する簡単な方法はありますか?いくつかの* .pubファイルといくつかの* .keyファイルがあり、どちらを使用するかを確認する必要があります。
繰り返しますが、これらはpub/keyファイル、DSAです。
私は本当にある種のワンライナーを好むでしょう...
私にとってはうまくいくと思われる方法を見つけました:
ssh-keygen -y -f <private key file>
このコマンドは、指定された秘密キーの公開キーを出力するため、出力を各* .pubファイルと比較するだけです。
これらのコマンドを使用して、モジュラスの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つのファイルは一緒になります。
DSAキーの場合、使用
openssl dsa -pubin -in dsa.pub -modulus -noout
公開鍵を印刷するには、
openssl dsa -in dsa.key -modulus -noout
秘密鍵に対応する公開鍵を表示し、それらを比較します。
X.509証明書内に公開鍵があり、それらがRSA鍵であると仮定して、各公開鍵に対して、
openssl x509 -in certfile -modulus -noout
秘密鍵ごとに、
openssl rsa -in keyfile -modulus -noout
次に、モジュラスでキーを一致させます。
Diffを使用すると、チェックが簡単になります。
diff <(ssh-keygen -y -f <private_key_file>) <public key file>
唯一の奇妙なことは、ファイルが同じ場合、diffは何も言わないため、パブリックとプライベートのdo n'tが一致する場合にのみ通知されることです。
公開鍵を削除し、秘密鍵から新しいものを生成します。それらを別々のディレクトリに保管するか、命名規則を使用してまっすぐに保管してください。
次のコマンドを入力して、秘密キーと公開キーが$ 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)
何も返されない場合、それらは一致します:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
公開キーで何かを暗号化し、どの秘密キーがそれを解読するかを確認します。
この コードプロジェクトの記事 ジェフアトウッドは、.NET暗号クラスの単純化されたラッパーを実装しています。これらのキーがRSAで使用するために作成されたと仮定して、非対称クラスを使用して公開キーを暗号化し、同じものを秘密キーで使用して復号化します。