Last Modified:

ssh-addで特定のエントリを削除する方法Shell

ssh-addで特定のエントリを削除しようとしたら

$ ssh-add ./foo.pem
Identity added: ./foo.pem (./foo.pem)

$ ssh-add -d ./foo.pem
Bad key file ./foo.pem: No such file or directory

ファイルはあるのに…(・ω・`)

解決

フォーマットがダメらしい。公開鍵を取り出してファイルとして渡せばいける。

$ ssh-add -d <(ssh-keygen -y -f ./foo.pem)
Identity removed: /dev/fd/63 (./foo.pem)

なんで勝手に公開鍵取り出してやってくれないのか分からんけど。 追加と削除が非対称なのがちょっと嫌ですね。

もっと

同じファイル名で複数の鍵が登録されている場合(あんまり無いと思うけど)、 ssh-add -Lで登録されている公開鍵一覧が出せるのでこうすればガッと消せる。

# IdentityFile=./foo.pem

ssh-add -L | grep -- "$IdentityFile"'$' | \
  while read -r pubkey
  do
    ssh-add -d -- <(printf '%s' "$pubkey")
  done
ssh-add -- "$IdentityFile"