ssh-add -l
追加されたすべてのSSHキーを表示しますssh-add ~/.ssh/id_yourkey
。 gpgとgpg-agentを使用して同様の操作、つまりキャッシュされたキーのリストを表示するように要求するにはどうすればよいですか?
答え1
少なくとも、まだそれを行うことができないか、少なくとも一般的にはそうすることはできません。しかし、私が学んだことを共有し、適切なタイミングでこの回答を更新できることを期待しています。
まず、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>
原則として、キャッシュに潜在的にキャッシュされた各パスワードを順番にプロキシに要求し、出力でORを確認できますOK
。ERR
もしそうなら、質問はキャッシュIDを生成する方法です。上記の例で見たように、gpg-agent
許可されたキャッシュIDは無料です。公開鍵の指紋を計算し、16進数でエンコードされた文字列表現をキャッシュIDとして使用することが判明しましたが、gpg
問題は指紋が渡すことができる指紋とは異なることですgpg --fingerprint --list-secret-keys
。ダイジェストをキーグリップといいます。計算された元のキーデータのみに基づいていますが、指紋はキーデータと生成タイムスタンプに基づいて計算されます。このパスを続行するには、確認したい各キーに対して正しい指紋を生成する方法を理解する必要があります(次世代のGnuPG 2.1とオプションを使用すると簡単になります--with-keygrip
)。
警告する:GET_PASSPHRASE
実際、出力には次のものが含まれます。プレーンテキストパスワード。このオプションを選択しなくても、--data
パスワードは16進数でエンコードされた文字列で明確に表示されます。自分が何をしているのかを知り、適切な予防措置を講じない限り、これを乱すことはおそらく非常に悪い考えでしょう。
答え2
以降のバージョンの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
7番目の列のエントリは、1
キーグリップがキャッシュされたことを示します。キークリップとそれが表すキーとの関連付けを検索するために使用できますgpg --list-secret-keys --with-keygrip
。
源泉:https://demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-cache/
答え3
将来のバージョンのgnupg(2.1.18でテスト済み)では、次のものを使用します。
gpg --fingerprint --with-keygrip <email>
キークリップを入手してから
echo "KEYINFO --no-ask <keygrip> Err Pmt Des" | gpg-connect-agent
キャッシュされていることを確認してください。
答え4
Windowsでは(gpg4winを使用)、次のようにキーを一覧表示できます。
gpg-connect-agent "KEYINFO --ssh-list --ssh-fpr" /bye
SHA1指紋が必要な場合は、以下を使用してください。
gpg-connect-agent "KEYINFO --ssh-list --ssh-fpr=sha1" /bye
キーの説明を一覧表示する方法はわかりませんが、保存されたキーに表示されます。%APPDATA%\gnupg\private-keys-v1.d\