Quantumleap
501 words
3 minutes
SSH接続時に毎回パスフレーズを入力するのを省略する
2023-11-16

背景#

SSH の秘密鍵作成時にパスフレーズを設定していると、ありとあらゆる入力のタイミングでパスフレーズを要求されます。

これが地味にめんどくさかったので信頼しているデバイスからはパスフレーズを自動で入力してくれるようにする設定を入れます。正確にはパスフレーズを Keychain から読み出しているみたいなので自動入力しているわけではないです。

技術#

必要な処理は以下の二つ。

  1. Keychain にパスフレーズを保存する
  2. パスフレーズ要求時に Keychain から自動で読み出す

それについてはmacOS で再起動しても ssh agent に秘密鍵を保持させ続ける二つの方法で簡単に紹介されていて大体これで間違っていないのですが少し補足説明を入れます。

まず、-K-Aのオプションは既に非推奨となっており、入力すると以下のように警告が表示されます。

WARNING: The -K and -A flags are deprecated and have been replaced
         by the --apple-use-keychain and --apple-load-keychain
         flags, respectively.  To suppress this warning, set the
         environment variable APPLE_SSH_ADD_BEHAVIOR as described in
         the ssh-add(1) manual page.

なので、本来入力すべきコマンドは、

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

となります。これをすると~/.ssh/id_ed25519のパスフレーズが Keychain に追加されます。今日のご時世に ED25519 以外のデジタル署名アルゴリズムを使っている人はいないと思うのでこれで大丈夫です。

パスフレーズを Keychain に登録したあとはこれを SSH 接続時に読み込むようにします。

なので~/.ssh/configを編集します。

Host GitHub
  HostName github.com
  User XXXXXXXX
  IdentityFile ~/.ssh/id_ed25519

Host *
  UseKeychain yes
  AddKeysToAgent yes

のようにすれば任意の接続先に対して Keychain に保存されているパスフレーズを利用し、GitHub への SSH 接続に対してid_ed25519を利用するように設定できます。

記事は以上。

SSH接続時に毎回パスフレーズを入力するのを省略する
https://fuwari.vercel.app/posts/2023/11/keychain/
Author
tkgling
Published at
2023-11-16