私は本当に厄介な問題を抱えています。 gpg-agent
でキーリングから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
それ以外はすべて正常に機能しますが、このファイルはどこかにキャッシュされているため、削除する必要があります。
ほとんどの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
コメントにあるように、キーを削除して削除したり、!
を使用してキーを無効にしたりできます。私はテストしていませんが、キーを「無効にする」とは、ファイルを編集せずに明示的に有効にしたり、追加したりできないことを意味すると思います。
はい、それはssh -d
はgpgのエージェントで壊れています。別のコマンドを使用した回避策を次に示します。
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コマンドで終了します。
BYE OK接続を閉じる
次に、ssh-add -l
そして、それは本当はなくなっていることがわかります。
このためのスクリプトが必要な場合:
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
私はここの専門家ではないので、使用する簡単なスクリプトを提供しています。派手なものは何もありません。何も深い。