こんにちは、だいちゃんです。
先日から会社のPCが新しくなり、RAM 64GBの超絶気持ちのいい環境でコーディングをしていると、Gitでpushとかpullとかリモートと通信するシチュエーションになると毎回SSHキーのパスフレーズを訊かれるようになっていて超絶 うっせーわ って感じでした。
旧PCでパスフレーズ訊かれなかったのは何かしら設定したからだと思うのですが、数年前に設定したことなど覚えてるはずもなく、再度調べ直したので記事に残しておこうと思います。
結論から書いておくと、~/.ssh/ 配下に config という名前のファイルを作成して、中身を下記にしたらイケました🎉
Host *
UseKeychain yes
原因としては、そもそもパスフレーズを省略するには、ssh-agentにsshキーを覚えておいてもらう必要があるようです。でもssh-agentはターミナルを再起動してしまうと記憶がぶっ飛ぶらしく、それを防ぐためにキーチェーンに覚えておいてもらう必要があるので -K
オプションを付けて、 ssh-add -K sshキーへのパス
とやってあげると、ターミナル閉じてもパスフレーズ訊かれなくなりました。
しかし、この状態だと、PCを再起動してしまうとやっぱり記憶がぶっ飛ぶみたい。
そこで、~/.ssh/config を作ってから、ssh-addしたら再起動しても、パスフレーズを訊かれることはなくなりました。
原理としては、ssh接続する必要が出てきたときにconfigファイルを読みに行くので、そこに「パスフレーズを訊く前にキーチェーンの中を一回探してね」って命令を書いるんだと思います。多分そう。僕はそう理解した。
関連して、「AddKeysToAgent yes」という設定も出来るようです。
これをすることによって、新しいsshキーを使うときに自動でssh-agentと、(UseKeychain yesの時は)キーチェーンにパスフレーズの追加をしてくれるらしいです(もちろん初回はパスフレーズ入力必要で、それを記憶しておくための ssh-add -K
を代わりにやってくれるイメージ)。
ただ僕の場合、そもそも会社のPCだし、ssh認証が必要なのもgitlabくらいなので、今後sshキーが増えることも無いだろうから、AddKeysToAgentは特に設定しませんでした(デフォルト値はno)。yesにしてても弊害はないと思うので、ssh認証するサービスが今後増える可能性があるのであれば、yesを記述していてもいいかもしれません。
という感じで、MacにおけるSSHパスフレーズの取り扱い方みたいなところを自分なりに調べて解釈してみました。