~/.ssh/id_dsa
パスワードを忘れたため、私のファイル(DSAアルゴリズムのOpenSSH秘密鍵ファイル)にアクセスできません。
しかし、最初はそれをインポートし、gpg-agent
私が知っているgpg-agentパスワードで保護しました。今でも秘密鍵はまだうまく機能しますgpg-agent
。しかし今gpg-agent
。
このツールを使用すると、gpg-connect-agent
次の一連のコマンドを使用して秘密鍵(16進数/ ascii形式)を抽出できたようです。しかし、元のOpenSSH秘密鍵ファイル形式に再構成する方法はわかりません。
gpg-connect-agent
オプションから始めてください--hex
。>
プロンプトで、コマンドを使用してキーの16進IDを取得しますkeyinfo --ssh-list
(正確には、キーの16進IDを提供する3番目のフィールドです)。>
プロンプトでを実行しますkeywrap_key --export
。>
プロンプトでexport_key <enter hex ID from step 2>
またはを実行しますexport_key --openpgp <enter hex ID from step 2>
。
パスワードを入力するように求められ、それを受信して確認した後、gpg-connect-agent
ツールは数十行の16進数とASCIIコードを表示します。これは私が元々インポートしたssh秘密鍵である可能性が高いです。
OK
その後、ジョブが成功したことを示すが表示されます。
表示される内容が実際に私のSSH秘密鍵であると仮定すると(「help import_key」によると、画面ダンプはaeswrap-128で暗号化されたキーバージョンです。既知のgpg-agentパスワードを使用して暗号化されている可能性があります)、ヘルプがあります。その情報を伝統的なssh秘密鍵形式に変換していただきありがとうございます(これを行うperl / python / shell / Cプログラムはボーナスです!)。
答え1
お役に立てば幸いです。しかし、関係のない質問に直面して偶然にこの質問を見つけたので、トピックから少し外れました。 gpg 2.1.6-> 2.1.10アップグレード中にEd25519秘密鍵の解析に問題が発生しました。https://bugs.gnupg.org/gnupg/issue2096。私は私の問題を解決するスクリプトを書いていましたが、このスクリプトは16進数の編集と再暗号化を可能にする保護されていないS式キーをダンプします。
だからこの問題についてPythonスクリプト(https://gist.github.com/zougloub/3058d56857ba400b7ec3)gpg-agentを使用してlibassuanからエスケープされたキーラップキーを取得し、キーを暗号化して復号化し(libgcryptを使用)、保護されていないS-expression SSH秘密鍵を抽出します。 SSH形式でデータをダンプしないので、あなたの質問に完全に答えることはありません。
データは少なくとも少なくとも解析可能な状態になるので、このステップをさらに一歩進めることができることを願っています。
追加の指示:
libgcrypt には s-expression 解析ライブラリといくつかのドキュメントがあります。https://www.gnupg.org/documentation/manuals/gcrypt/Used-S_002dexpressions.html#Used-S_002dexpressions
gpgにはCコードがあります(たとえば
sexp_key_extract
、、、ssh_send_key_public
ssh_handler_request_identities
もっとできるかと思いますが、あちこちに迷いすぎて時間を無駄にしました...正気であればSSHキーを再生成します:D
挨拶、