ssh-agent は、SSHの秘密鍵をメモリ上で安全に保持し、パスフレーズの再入力なしで署名(認証)を行うエージェントです。
実務では「Git操作のたびにパスフレーズを入力しないようにする」「複数サーバーへのSSH接続を効率化したい」場合に使われます。
構文(Syntax)
# ssh-agent を起動し、必要な環境変数を出力
ssh-agent
# 明示的にシェルに環境変数をロード
eval "$(ssh-agent)"
# 指定したシェルのみで起動
ssh-agent /bin/bash
# カスタムソケットで起動
ssh-agent -a SOCKET
ssh-add コマンドと併用して秘密鍵をエージェントに登録します。
ssh-add ~/.ssh/id_rsa
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | エージェントを起動し、環境変数セット用のスクリプトを出力 | ssh-agent |
-a SOCKET | ソケットファイルの位置を指定 | ssh-agent -a /tmp/ssh-agent.sock |
-c | C-shell 用の環境変数形式で出力 | ssh-agent -c |
-s | Bourne-shell 用の環境変数形式で出力(デフォルト) | ssh-agent -s |
-k | 既存のエージェントを停止(終了) | ssh-agent -k |
-d | デバッグモードで動作を表示 | ssh-agent -d |
実行例
例1: SSH エージェントを起動して環境変数をシェルに設定する
eval "$(ssh-agent)"
出力例
Agent pid 1234
例2: エージェントに秘密鍵を登録する
ssh-add ~/.ssh/id_ed25519
出力例
Enter passphrase for /home/user/.ssh/id_ed25519:
Identity added: /home/user/.ssh/id_ed25519
例3: 登録されている鍵を確認する
ssh-add -l
出力例
256 SHA256:xxxx... /home/user/.ssh/id_ed25519 (ED25519)
例4: エージェントを終了する(環境変数の解除)
ssh-agent -k
出力例
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 1234 killed;
例5(エラー例): エージェント未起動で鍵を追加しようとする
ssh-add ~/.ssh/id_rsa
出力例(例)
Could not open a connection to your authentication agent.
→ eval "$(ssh-agent)" を先に実行する必要があります。
関連コマンド
ssh-add
秘密鍵を ssh-agent に追加・削除するコマンド。ssh
リモートサーバーへ接続するコマンド。agent があるとパスフレーズ入力が不要になる。ssh-keygen
SSH 認証鍵を作成・管理するためのコマンド。gpg-agent
GPG鍵とSSH代理機能を兼ねる場合がある SSH Agent の代替。
備考
ssh-agentは常にメモリ上に秘密鍵を保持し、ディスクに保存しないため安全性が高い。- ただしログインセッションや tmux/screen の切り替えで環境変数が消える場合があるため注意。
- Desktop環境(GNOME Keyring, KDE Wallet など)では GUI のエージェントが既に稼働している場合がある。
- macOS では
ssh-agentが OS に統合され、一部挙動が異なる(自動鍵読み込みなど)。
参考
- manページ
https://man7.org/linux/man-pages/man1/ssh-agent.1.html - OpenSSH 公式ドキュメント
https://www.openssh.com/

コメント