OpenSSHツールだけでこれを行う方法はないかもしれません。
ただし、OpenSSLツールを使用すると非常に簡単に実行できます。実際、少なくとも2つの方法があります。以下の例で~/.ssh/id_rsa
は、は秘密鍵です。
1つの方法はdgstを使用することです:
openssl dgst -sign ~/.ssh/id_rsa some-file
もう1つはpkeyutlを使用しています。
openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file
どちらもバイナリ署名を標準出力に書き込みます。dgstは-hex
、署名の形式に関する詳細を含むテキスト表現を印刷するオプションを取ります。pkeyutl-hexdump
は、少し有用性の低いオプションを取ります。どちらもRSAキーとDSAキーの両方を受け入れます。出力の形式がわからない。2つのコマンドは異なる形式を生成します。私はという印象を得るpkeyutlはより現代的な考えられているDGSTを。
これらの署名を検証するには:
openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file
そして:
openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file
ここに問題があり$PUBLIC_KEY_FILE
ます。OpenSSLはOpenSSHの公開キー形式を読み取ることができないため、単に使用することはできませんid_rsa.pub
。いくつかのオプションがありますが、理想的なものはありません。
5.6以降のOpenSSHのバージョンを使用している場合、明らかにこれを行うことができます。
ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem
OpenSSLが読み取れるPEM形式で標準出力に公開キーを書き込みます。
秘密鍵があり、それがRSA鍵である場合、そこから公開鍵を抽出できます(公開鍵を導出することはできないため、PEMエンコードされた秘密鍵ファイルには公開鍵のコピーが含まれていると想定します秘密鍵自体から)、それを使用します:
openssl rsa -in ~/.ssh/id_rsa -pubout
DSAに相当するものがあるかどうかはわかりません。このアプローチでは、秘密鍵の所有者の協力が必要であることに注意してください。所有者は公開鍵を抽出し、検証者に送信する必要があります。
最後に、Larsという名前のチャップによって作成されたPythonプログラムを使用して、公開鍵をOpenSSHからOpenSSL形式に変換できます。