「ssh-add -d」はIDの削除を拒否しました

「ssh-add -d」はIDの削除を拒否しました

秘密鍵のパスフレーズ (id_rsa) を忘れるには、通常次のコマンドを実行します。

ssh-add -D # to forget all loaded identities
ssh-add -d # to forget primary identity ($HOME/.ssh/id_rsa)

macOS Sierra v10.12.1 では次のエラーが発生します:

$ ssh-add -D
All identities removed.
$ ssh-add -d
Could not remove identity "/Users/user/.ssh/id_rsa": agent refused operation
Could not remove identity "/Users/user/.ssh/id_dsa": agent refused operation

Google で検索しましたが、見つかりません!

答え1

Sierraでも同じ問題がありました。削除しid_rsa$HOME/.ssh/再起動してみてください(私id_rsa.pubも削除しました - そのため2つのキーがプライベートそして公共)。問題は解決しました。

答え2

私の場合は、少し異なる問題がありました。ssh-add -Dエージェントを呼び出すと、成功したように見え、応答しましたが、All identities removed.実際には、エージェント キーを一覧表示したときにssh-add -l不要なキーが一覧表示されたままになり、もちろん、エージェントを使用してリモート ホストに認証しようとすると、エージェントは、構成済みの PIN プログラムを使用して不要なキーのパスフレーズを入力するように求めました。迷惑です。

問題の原因は、gpg-agent デーモンがパスのファイルにキーをキャッシュしていたことです~/.gnupg/sshcontrol

$ cat ~/.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
# caching TTL in seconds, and another optional field for arbitrary
# flags.   Prepend the keygrip with an '!' mark to disable it.

# RSA key added on: 2021-06-03 16:23:25
# Fingerprints:  MD5:c1:[elided]:24
#                SHA256:+Mj[elided]E4
21[elided]C9 0
# Ed25519 key added on: 2021-06-03 22:11:36
# Fingerprints:  MD5:[elided]:24:da
#                SHA256:EL[elided]Zs
E0[elided]47 0

これらのキーを削除すると、~/.gnupg/sshcontrol使用しなくなったキーのパスフレーズをエージェントが要求することなく、gpg-agent を使用してリモート ホストへの認証を再開できるようになりました。

答え3

このエラーは、参照されているアイデンティティが追加されたアイデンティティと異なる場合に発生しました。この-dオプションは特定のキーを削除します。そのキーがロードされていない場合は削除されません。ロードされたキーを確認しssh-add -l、キー署名を確認するには、ssh-keygen -lf <path-to-private-key>

答え4

Ubuntu 18.04 にはまだこのバグがあることがわかりました。

大きな労力をかけずに ssh-agent から不要なキーを削除する簡単な方法は次のとおりです。

  1. 削除したいキーを見つけます

    ssh-add -l
    2048 SHA256:qzJYF7AJAJsLsJn7ZFPcJ+w78ZJVoPZI9TzXCq2cf5 .ssh/bad-key.pem (RSA)
    
  2. ~/.sshディレクトリに移動し、たとえばdisabledというサブディレクトリを作成します。

    cd ~/.ssh
    mkdir disabled
    
  3. 無効にするキーをそのディレクトリに移動します。

    mv bad-key.pem disabled/
    

これで完了です。キーは ssh-agent では使用できなくなりますが、キーは保持しておき、必要に応じて再度追加することができます。

関連情報