ssh-add -lで追加されたすべてのssh-keyを表示しますssh-add ~/.ssh/id_yourkey。gpgとgpg-agentで同様のことを行うには、つまり、キャッシュされたキーのリストを表示するように依頼するにはどうすればよいですか?
ssh-add -lで追加されたすべてのssh-keyを表示しますssh-add ~/.ssh/id_yourkey。gpgとgpg-agentで同様のことを行うには、つまり、キャッシュされたキーのリストを表示するように依頼するにはどうすればよいですか?
回答:
少なくともまだ、または少なくとも一般的なケースでは、これを行うことができない場合があります。しかし、私が学んだことを共有し、やがてこの回答を更新することを楽しみにしています。
まず、ssh-agent秘密キーを実際にキャッシュする機能とは異なり、gpg-agentキーまたはパスフレーズのいずれかをキャッシュできます。キャッシュするのは各クライアント次第で、パスフレーズのキャッシュにgpgのみ使用gpg-agentします。
ユーティリティをgpg-agent使用して対話できgpg-connect-agentます。次の例では、STDINを介してコマンドを1つずつ渡します。
$ CACHEID="ThisIsTheTrickyPart"
$ ERRSTR="Error+string+goes+here"
$ PMTSTR="Prompt"
$ DESSTR="Description+string+goes+here"
$ echo "GET_PASSPHRASE --data $CACHEID $ERRSTR $PMTSTR $DESSTR" | gpg-connect-agent
D MyPassPhrase
OK
gpg-connect-agentこのコマンドを呼び出して渡すとpinentry、システムで設定されたコマンドはエラー、プロンプト、説明の文字列を使用してパスフレーズの入力を求めます。この場合、「MyPassPhrase」と入力しました。これは、構造化された出力で返されます(下の画像を参照)。同じを使っGET_PASSPHRASEてgpg-agent再度送信すると$CACHEID、キャッシュパスフレーズを使用する代わりに返しますpinentry。

GET_PASSPHRASEまた--no-ask、キャッシュミス時にエラーを返すオプションを受け入れます。ここでは、キャッシュIDとして「NotCachedID」を使用し、使用しgpg-agentない必須引数にはダミー文字列を使用します。
$ echo "GET_PASSPHRASE --no-ask NotCachedID Err Pmt Des" | gpg-connect-agent
ERR 67108922 No data <GPG Agent>
原則として、キャッシュされる可能性のある各パスフレーズをエージェントに順番に尋ね、出力を確認するOKかERR、出力を確認することができます。質問は次のようになります。キャッシュIDを生成する方法を教えてください。上記の例でわかるようにgpg-agent、キャッシュIDとして受け入れるものは自由です。gpg公開キーのフィンガープリントを計算し、キャッシュIDとして16進コード化された文字列表現を使用していることが判明しましたが、問題は、このフィンガープリントが経由で学習できるフィンガープリントと同じではないことですgpg --fingerprint --list-secret-keys。このダイジェストはキーグリップと呼ばれます(指紋はキーマテリアルと作成タイムスタンプで計算されるのに対して、生のキーマテリアルでのみ計算されるため)。本当にこの道を続けたいのであれば、チェックしたいキーごとに正しいフィンガープリントを生成する方法を見つける必要があります(これは、オプションのGnuPGの次世代バージョン2.1を使用すると簡単になります--with-keygrip)。
警告:からの出力GET_PASSPHRASEには、実際にクリアなパスフレーズが含まれています。--dataオプションを省略した場合でも、パスフレーズは16進コードの文字列として明確に表示されます。あなたが何をしているのかを知らない限り、これをいじくり回し、適切な予防策を講じることはおそらく非常に悪い考えです。
gpg-agentしますか?
gpg-agentpinentry使用するように構成されているプログラムのフレーバーを呼び出します。例えば参照してください...コンソールモードのpinentryを使用するためにGPGを強制する方法。
gpg-2.1.11Ubuntu 14.04のソースからコンパイルしたものを使用すると、gpg-agentキャッシュIDが何なのかわかりませんgpg --fingerprint --with-keygrip <user>。どれも機能せず、gpg-connect-agent常に報告しERR 67108922 No data <GPG Agent>ます。GPG_TTY= gpg --decrypt <file>さまざまなキャッシュIDを試した後、正常に実行することにより、エージェントがまだパスフレーズを持っていることを再確認しました。(不明な場合GPG_TTY、設定解除により、パスフレーズが既にキャッシュされている場合にのみ復号化が成功しgpg-agentます。)
GnuPGの新しいバージョン(2.2.9でテスト済み)では、でコマンドkeyinfo --listを使用して、エージェントによって現在キャッシュされているキーグリップをリストすることもできgpg-connect-agentます。
$ gpg-connect-agent 'keyinfo --list' /bye
S KEYINFO 866C3DE249CF81E31A3691845DBADE2809487FF5 D - - 1 P - - -
S KEYINFO 04278155E72CAE8FF1548FE161F1B8F7673824F4 D - - - P - - -
OK
1第7列にはkeygripがキャッシュされていることを示しています。キーグリップとそれが表すキーの間の関連付けは、で取得できますgpg --list-secret-keys --with-keygrip。
ソース:https : //demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-cache/
cacheidを取得するには--fingerprint、たとえば、2回言及する必要があります。
$ gpg --fingerprint --fingerprint ftpadmin@kernel.org
pub 1024D/517D0F0E 2000-10-10
Key fingerprint = C75D C40A 11D7 AF88 9981 ED5B C86B A06A 517D 0F0E
uid Linux Kernel Archives Verification Key <ftpadmin@kernel.org>
sub 4096g/E50A8F2A 2000-10-10
Key fingerprint = E851 4C25 10C6 0291 0D47 A008 7C8B 4360 E50A 8F2A
この場合のcacheidはになりますE8514C2510C602910D47A0087C8B4360E50A8F2A。
--fingerprint対2は--fingerprint --fingerprint両方ともまったく同じ出力を返します。@BenCreasyが書いているように、キーグリップを使用した上記の答えは機能します。
http://lists.gnupg.org/pipermail/gnupg-users/2010-January/037876.html
cacheidは、キーの完全なフィンガープリントです。
gpg --fingerprint user@foo.bar