GPGエージェントはキーリングから私のSSHキーを削除しません。

GPGエージェントはキーリングから私のSSHキーを削除しません。

非常に迷惑な問題があります。gpg-agent複数回再起動した後もまだSSHキーが残っているため、キーリングからSSHキーを削除できません。

$ ssh-add -D
SSH_AGENT_FAILURE
Failed to remove all identities.

アイデンティティを削除しようとしても:

$ ssh-add -d /path/to/private/key
Identity removed: /path/to/private/key

だから私は見て

$ ssh-add -l
4096 1b:cb:52:a6:e5:13:e6:78:14:12:92:8f:34:8f:92:88 /path/to/private/key

まだそこにいます。

このキャッシュはどこにありますか?何らかの理由でディスクに書き込むようです。これはSSHエージェントにとって恐ろしいことです。開始するには、次のコマンドを実行していますgpg-agent

gpg-agent --enable-ssh-support --daemon 

他のすべてはうまく機能しますが、このファイルはどこかにキャッシュされているので削除する必要があります。

答え1

はい、ssh -dgpgのブローカーが壊れているようです。以下は、他のコマンドを使用する回避策です。

コマンドラインからコマンドを実行してgpg-connect-agentエージェントに接続します。その後、SSHキーをリストするように求められたら、このコマンドを入力してください。

KEYINFO --ssh-list --ssh-fpr

次のような内容が表示されます。

S KEYINFO 3365433C34421CC53B52C9A82169FD2328CF610B D - - - P df:a2:36:8d:ad:88:b3:cc:00:96:10:d4:c9:2c:e0:df - S
OK

プロキシから削除するには、次の手順を実行します。

DELETE_KEY 3365433C34421CC53B52C9A82169FD2328CF610B

それは言うでしょう:

OK

これで BYE コマンドを使用して終了します。

こんにちは、接続を閉じます。

今確認してssh-add -lみると、実際に消えたことを確認できます。

答え2

ほとんどのGPGと同様に、SSH資格情報はディレクトリ.gnupg、特に~/.gnupg/sshcontrol次の場所にキャッシュされます。

# List of allowed ssh keys.  Only keys present in this file are used
# in the SSH protocol.  The ssh-add tool may add new entries to this
# file to enable them; you may also add them manually.  Comment
# lines, like this one, as well as empty lines are ignored.  Lines do
# have a certain length limit but this is not serious limitation as
# the format of the entries is fixed and checked by gpg-agent. A
# non-comment line starts with optional white spaces, followed by the
# keygrip of the key given as 40 hex digits, optionally followed by a
# the caching TTL in seconds and another optional field for arbitrary
# flags.   Prepend the keygrip with an '!' mark to disable it.

# Key added on: 2013-09-19 22:15:50
# Fingerprint:  8b:56:b0:3f:c8...
681BF1EFF... 0
# Key added on: 2013-09-20 17:14:36
# Fingerprint:  4b:cb:7e:b0:d7...
F7BCEBD1C... 0

コメントが示すように、キーを削除するか、を使用して!キーを削除できます。

答え3

スクリプトが必要な場合:

keys=$(gpg-connect-agent 'keyinfo --list' /bye | awk '{print $3}' | head -n -1)
for key in $keys; do gpg-connect-agent "delete_key $key --force" /bye; done

私は専門家ではないので、私が使用する簡単なスクリプトを提供します。素晴らしいことはありません。深いことはありません。

関連情報