macOSのssh-agentでSSH鍵のパスワードを省略する

2022年7月30日

SSH

macOS に最初から入っている ssh-agent に SSH の秘密鍵を保持して、SSH 接続時に SSH 鍵のパスフレーズを求められないようにする設定の備忘録。

動作確認した OS は macOS Monterey (12.3)です。

目次

  1. 新しい SSH キーを生成する
  2. バックグラウンドで ssh-agent を起動する
  3. ~/.ssh/config に ssh-agent 用の設定をする
  4. ssh-agent に追加されている鍵を表示する
  5. ssh-agent から鍵を削除する
  6. 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.2man 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
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.

man ssh_config

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
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.

man ssh-add

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.

-技術ブログ
-