リモートのMacにSSH接続するたびに、毎回パスフレーズを入力していませんか?
macOSのKeychainにSSH鍵を登録し、~/.ssh/config を正しく設定することで、パスフレーズ入力なしでSSH接続できるようになります。
ただし、ここにひとつ落とし穴がありました。エイリアスの書き方によっては、せっかくの設定が効かないんです。
この記事では、実際にハマったポイントも含めて、解決までの手順をお伝えします。
毎回パスフレーズを入力するストレス
リモートのMac mini に SSH接続するたびに毎回パスフレーズを聞かれるわけです。
1日に何回もSSHするので、これが地味にストレス。「もう覚えてくれよ…」という感じですよね。
解決の3ステップ
じゃ、どうすれば、いいのか?
やることは3つです。
ssh-addでKeychainにSSH鍵を登録~/.ssh/configに設定を追加- エイリアスの修正(←ここが落とし穴)
順番に説明していきます。
ステップ1:ssh-addコマンドでKeychainに鍵を登録する
ターミナルで以下のコマンドを実行します。
ssh-add --apple-use-keychain ~/.ssh/secret_key
ポイントは --apple-use-keychain というオプション。これを付けることで、macOSのKeychainにパスフレーズが保存されます。
実行するとパスフレーズを1回だけ聞かれるので、入力します。
Identity added: /Users/xxxxxx/.ssh/secret_key
こう表示されれば、ほっ。登録完了です。
ここで注意。 鍵ファイルが secret_key はサンプルです、ご自身のファイル名に読み替えてください。
ステップ2:~/.ssh/config に設定を追加する
次に、~/.ssh/config ファイルを編集します。
接続先のHost設定に、以下の2行を追加します。
Host remote-mac
HostName 192.168.x.x
User xxxxxxxxx
IdentityFile ~/.ssh/secret_key
AddKeysToAgent yes
UseKeychain yes
AddKeysToAgent yes→ ssh-agent に鍵を自動追加UseKeychain yes→ macOSのKeychainからパスフレーズを自動読み込み
この2つの設定で、再起動後もパスフレーズなしで接続できるようになります。
ステップ3:エイリアスの落とし穴に注意
で、ここからが今回一番ハマったポイントです。
ここでハマりました。
僕は .zshrc にこんなエイリアスを設定していました。
alias aimac="ssh [email protected]"
IPアドレス直指定でSSH接続するエイリアスです。
これ、一見よさそうなんですが、~/.ssh/config の Host remote-mac の設定が一切適用されないんです。
ここにハマりました。
理由はシンプルで、ssh [email protected] と直接IPを指定すると、SSHクライアントは ~/.ssh/config のHostマッチングをスキップしてしまうんです。
せっかく UseKeychain yes を設定しても、そこを通らないから意味がないという…。
修正方法
エイリアスを、SSH config の Host名を使う形に変更します。
# Before(IPアドレス直指定 → configの設定が効かない)
alias aimac="ssh [email protected]"
# After(Host名指定 → configの設定が効く!)
alias remote-mac="ssh remote-mac"
たったこれだけ。
ssh remote-mac とすることで、~/.ssh/config の Host remote-mac セクションが読み込まれ、UseKeychain yes も AddKeysToAgent yes もちゃんと適用されます。
ふぅ。これで解決です。
1Passwordを使っている場合の補足
もうひとつ補足です。
1Passwordの SSH Agent を使っている場合、~/.ssh/config にこんな設定が入っていることがあります。
Host *
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
Host * は全ホストに適用されるので、特定のホストでは1PasswordのAgentを使いたくない場合、そのHostの設定に IdentityAgent none を追加しておくと安心です。
Host remote-mac
HostName 192.168.x.x
User xxxxx
IdentityFile ~/.ssh/secret_key
AddKeysToAgent yes
UseKeychain yes
IdentityAgent none
これで、remote-mac への接続はシステム標準の ssh-agent + Keychain を使い、それ以外は1Passwordという使い分けができます。
まとめ
macOSでSSH接続時にパスフレーズを毎回聞かれる問題の解決ポイントは3つ。
ssh-add --apple-use-keychainでKeychainに鍵を登録する~/.ssh/configにAddKeysToAgent yesとUseKeychain yesを追加する- エイリアスはIPアドレス直指定ではなく、SSH configのHost名を使う(←これ大事)
特に3つ目、エイリアスでIP直指定していると ~/.ssh/config の設定が効かないという点は、見落としやすいポイントかなと思います。






