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-agent
pinentry
使用するように構成されているプログラムのフレーバーを呼び出します。例えば参照してください...コンソールモードのpinentryを使用するためにGPGを強制する方法。
gpg-2.1.11
Ubuntu 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