2017年4月1日土曜日

macOS Sierra でキーチェーンに保存した ssh パスフレーズを削除する方法

macOS Sierra のキーチェーンに憶えさせた ssh のパスフレーズを忘れさせる方法がわからずに一週間ほどハマってたのだが、ようやく解決した。

手元の環境では、憶えさせている鍵はひとつだけなので

$ ssh-add -K -d

を実行。 これで、キーチェーンと ssh-agent に憶えさせたパスフレーズを忘れさせることができた。

複数の鍵を憶えさせている場合には、おそらく明示的に秘密鍵ファイルのパスを指定する必要がある。(未確認)



経緯的なもの

~/.ssh/config で

UseKeychain yes

を追記した状態で

$ ssh-add -K ~/.ssh.id_rsa

を実行し、キーチェーンと ssh-agent にパスフレーズを保存。

普段なら、このまま使い始めて疑問に思うこともなかったんだろうけど、そのときは何故か キーチェーンアクセス.app で ssh のパスフレーズを検索。 従来のバージョンでは、 キーチェーンアクセス.app 右上の検索窓に ssh と入力することで、 ssh のパスフレーズが見つかっていたのだが、今回はそれらしき項目が検出されなかった。

キーチェーンに憶えさせたパスフレーズを忘れさせるにはどうすればいいんだろう? というわけで、当初は

$ ssh-add -d
Identity removed: /Users/fudan10u/.ssh/id_rsa (fudan10u@nanashinonozomi.local)
$ ssh-add -L
The agent has no identities.

$ $ ssh-add -D
All identities removed.
$ ssh-add -L
The agent has no identities.

を試した。

しかし、これらの方法では ssh-agent は忘れてくれるけれども、キーチェーンが憶えたままで、 ~/.ssh/config で UseKeychain yes が指定されているため、パスフレーズの入力は求められない。 もちろん、 UseKeychain を no にすれば、パスワードを求められるようにはなるけれども、 yes に戻せば、当然、キーチェーンが覚えているパスワードが使われる。

どうすれば忘れてくれるの…という感じで、一週間ほどハマっていた。

そんなこんなで、ようやく見つけたのが以下の情報。

  • [macOS Sierra] ssh接続時のkeychain/agentへのパスフレーズ保存の挙動が変わった - DoRuby (2017-01-10)

    keychainに保存したパスフレーズは以下で削除できるようです。

    cd ~/Library/Keychains/<UUID>
    sqlite3 keychain-2.db 'delete from genp where agrp="com.apple.ssh.passphrases"'

    SQLite はよくわかっていないので、あまり触りたくないなぁ…と思いつつ、さらにこの SQL 式で Google 検索して見つけたのが次の情報。

  • How To Stop macOS Sierra From Remembering Your SSH Key Passphrase - TeckLyfe (2016-10-07)

    Once you have added your identity to ssh-agent you can use ssh-add -K -d to remove it from both ssh-agent and Keychain. If you want your identity to be added to ssh-agent every time you use ssh then add this line to your ~/.ssh/config file:

    AddKeysToAgent yes

    言われてみれば、当然の話だよな。 最初、 -K オプションを付加してキーチェーンにも憶えるように指示したんだから、 -d オプションで忘れさせるときにも -K を付加して、キーチェーンも忘れるように指示しなくちゃ、ということなのだった_| ̄|○

現在の設定

~/.ssh/config で

UseKeychain no
AddKeysToAgent yes

にしておいて、ログイン後の最初の1回だけ、パスフレーズを入力するようにした。

0 件のコメント:

コメントを投稿