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"