macOS に最初から入っている ssh-agent に SSH の秘密鍵を追加して、SSH 接続時に SSH 鍵のパスフレーズを求められないようにする設定の備忘録。
動作確認した OS は macOS Monterey (12.3)です。
目次
- 新しい SSH キーを生成する
- バックグラウンドで ssh-agent を起動する
- ~/.ssh/config に ssh-agent 用の設定をする
- ssh-agent に追加されている鍵を表示する
- ssh-agent から鍵を削除する
- SSH 接続をテストする
新しい SSH キーを生成する
検証用に SSH の鍵を生成します。
ssh-keygen -t ed25519 -C "your_email@example.com"
パスフレーズも設定しておきます。
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
バックグラウンドで ssh-agent を起動する
man ssh-agent
コマンドによると、ssh-agent を起動する方法は 2 つあるとのこと。2 番目の方法の「ログインセッションに使用される方法」を利用します。
The second method is used for a login session. When ssh-agent is started, it prints the shell commands required to set its environment variables, which in turn can be evaluated in the calling shell, for example eval `ssh-agent -s`.
man ssh-agent
以下のコマンドで ssh-agent をバックグラウンドで起動します。
eval `ssh-agent -s`
コマンドを実行するとプロセス番号が表示されます。
Agent pid 35612
~/.ssh/config に ssh-agent 用の設定をする
以下のように ~/.ssh/config
に書きます。ssh コマンドを実行したときに、ssh-agent にキーが追加され、キーチェーンに保存された SSH キーのパスフレーズが自動で ssh-agent に読み込まれます。
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
SSH の鍵をいくつも管理している場合は Host ごとに分けて設定すると良いでしょう。詳細は Technical Note TN2449: OpenSSH updates in macOS 10.12.2 と man ssh_config
コマンドを参照。
AddKeysToAgent
Specifies whether keys should be automatically added to a running ssh-agent(1). If this option is set to yes and a key is loaded from a file, the key and its passphrase are added to the agent with the default lifetime, as if by ssh-add(1).UseKeychain
man ssh_config
On macOS, specifies whether the system should search for passphrases in the user's keychain when attempting to use a particular key. When the passphrase is provided by the user, this option also specifies whether the passphrase should be stored into the keychain once it has been verified to be correct.
SSH キーを ssh-agent に追加する
SSH 秘密鍵を ssh-agent に追加します。
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
--apple-use-keychain
オプションは macOS の ssh-add で、SSH 鍵を ssh-agent に追加する際にパスフレーズをキーチェーンに保存するオプションです。少し前まで -K
オプションがこの役割だったのですが、macOS Monterey からは -K
オプションは WARNING が出るようになったようです。詳細は man ssh-add
コマンドを参照。
--apple-use-keychain
man ssh-add
When adding identities, each passphrase will also be stored in the user's keychain. When removing identities with -d, each passphrase will be removed from it.
ssh-agent に追加されている鍵を表示する
ssh-agent に追加されている鍵の確認は -L
オプションで。
ssh-add -L
ssh-agent から鍵を削除する
ssh-agent から鍵を削除する場合は -d
オプションで。--apple-use-keychain
オプションも併用するとキーチェーンからパスフレーズも削除されます。
ssh-add -d --apple-use-keychain ~/.ssh/id_ed25519
詳細は man ssh-add
コマンドを参照。
SSH 接続をテストする
どこかのサーバに SSH で接続をしてテストします。パスフレーズを求められずに接続ができれば OK です。
GitHub に鍵が設定済みの場合は以下のコマンドでテストできます。
ssh -T git@github.com
パスフレーズを求められずに成功メッセージが返ってくれば OK です。
Hi karakaram! You've successfully authenticated, but GitHub does not provide shell access.
ssh-agent に登録した鍵をサーバでも使う
今回のように ssh-agent に SSH の鍵を登録しているとき、そのクライアントから ssh コマンドでリモートのサーバにログインすると、サーバでもクライアントの ssh-agent が利用ができます。次の記事で紹介します。
-
SSHのForwardAgentでローカルPCの鍵をサーバで使う
前回は macOS の ssh-agent で SSH 鍵のパスフレーズの入力を省略する方法を解説しました。 今回はその ...
続きを見る