gpg-agent-connectツールを使用してssh秘密鍵ファイルを再構築します


8

~/.ssh/id_dsaパスフレーズを忘れたため、自分のファイル(DSAアルゴリズムのOpenSSH秘密鍵ファイル)にアクセスできなくなりました。

しかし、もともと私はgpg-agentそれをgpg-agentパスフレーズにインポートして保護しましたが、これは私が知っています。そして、私は今でもgpg-agentOpenSSH秘密鍵ファイルをに保存されているものを使用して再構築したいと思っていますが、秘密鍵は今でも問題なく機能していgpg-agentます。

gpg-connect-agent次の一連のコマンドを使用してツールを使用すると、秘密鍵を(16進数/ ASCII形式で)抽出できると思いますが、元のOpenSSH秘密鍵ファイル形式に再構築する方法がわかりません。

  1. 起動しgpg-connect-agent--hexオプション。
  2. >プロンプトで、keyinfo --ssh-listコマンドを使用してキーの16進IDを取得します(正確には、キーの16進IDを示す3番目のフィールドです)。
  3. >プロンプト、実行keywrap_key --export
  4. >プロンプトで、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 export_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 。私が書いたスクリプトは、自分のかゆみを掻くものです。保護されていないS式のキーをダンプして、hexeditして再暗号化することができました。

したがって、この質問に関して、libassuanエスケープされたキーラップキーを取得することにより、gpg-agentを使用して無保護のS式SSH秘密キーを抽出するPythonスクリプト(https://gist.github.com/zougloub/3058d56857ba400b7ec3)を書きました、暗号化されたキー、およびそれを復号化します(libgcryptを使用)。SSH形式でデータをダンプしないため、質問に完全に答えることはできません。

データが少なくとも解析可能な状態にあるため、うまくいけばさらにそれを得ることができます。

その他のポインタ:

もう1マイルできるかどうか知りたくてたまらなかったのですが、私はすでに多くの時間を無駄に失っています...

よろしく、

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