SSH公開鍵認証でVPSやGitHubに接続できるようになると、パスワード認証よりは安全になります。ただし、秘密鍵にパスフレーズを設定している場合は、接続のたびに入力が必要です。複数のサーバーへアクセスしたり、gitコマンドを繰り返すたびに同じパスフレーズを入力するのは、実務では手間になってきます。
その問題を解決するのが ssh-agent(エスエスエイチ エージェント)です。一度パスフレーズを入力して秘密鍵を登録しておくと、ターミナルセッションが続いている間はパスフレーズなしで接続できるようになります。
この記事では、Ubuntu 24.04 LTS / WSL2・Rocky Linux 9系を想定環境として解説します。ssh-agentの起動から秘密鍵の登録、ターミナルを開くたびに自動で起動させる設定まで、初心者向けに手順で体験しましょう。
この記事のポイント
・ssh-agentを使うとパスフレーズの入力なしに接続できるようになる
・eval $(ssh-agent -s) でssh-agentを起動してssh-addで鍵を登録する
・.bashrcに設定を書くとターミナルを開くたびに自動で起動させられる
・WSL2では既存のssh-agentプロセスを再利用する設定が実用的
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
ssh-agentとは何か(なぜ使うのか)
SSH公開鍵認証では、秘密鍵を使って接続先に自分を証明します。その秘密鍵にパスフレーズを設定しておくと、鍵ファイルが盗まれた場合でも第三者に使われにくくなり、セキュリティが高まります。ただし、パスフレーズを設定すると接続のたびに入力が必要です。これを毎回手入力するのは、現場での作業効率を下げる原因になります。
ssh-agentは、一度入力したパスフレーズを一時的にメモリ上に保持するプログラムです。 秘密鍵をssh-agentに登録(ssh-add)しておくと、ssh-agentが代わりに認証処理を引き受けます。パスフレーズを繰り返し入力しなくて済むようになります。
・パスフレーズなし鍵 → もともと入力不要(鍵ファイルが盗まれたら即座に不正利用されるリスクがある)
・パスフレーズあり鍵 + ssh-agent → 一度登録すれば接続のたびの入力が不要
実務でサーバーを複数台管理する場合や、GitHubへのpush・pullを繰り返す場合に効果を感じられます。
ssh-agentの基本的な使い方
1. ssh-agentを起動する
ターミナルを開いて、以下のコマンドを実行します。# ssh-agentを起動して環境変数を設定する eval $(ssh-agent -s)
Agent pid 12345
eval $(ssh-agent -s) は、ssh-agentを起動して SSH_AUTH_SOCK(エスエスエイチ オース ソック)と SSH_AGENT_PID(プロセスID)の2つの環境変数を現在のシェルに設定します。この2つが設定されていないと、後でssh-addを実行しても「authentication agentに接続できない」というエラーになります。2. ssh-addで秘密鍵を登録する
ssh-agentを起動したら、使いたい秘密鍵を登録します。# ED25519形式の秘密鍵を登録する場合 ssh-add ~/.ssh/id_ed25519 # RSA形式の秘密鍵を登録する場合 ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/user/.ssh/id_ed25519: Identity added: /home/user/.ssh/id_ed25519 (user@hostname)
3. 登録済みの鍵を確認する
登録されている鍵の一覧は次のコマンドで確認できます。# 登録済みの鍵の一覧を表示する ssh-add -l
256 SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz... user@hostname (ED25519)
The agent has no identities. と表示されます。ターミナルを開くたびに自動起動させる設定
毎回eval $(ssh-agent -s) と ssh-add を実行するのは手間がかかります。.bashrc(バッシュアールシー)に設定を書いておくと、ターミナルを開くたびに自動で起動させられます。1. .bashrcにssh-agentの設定を書く
テキストエディタで~/.bashrc を開き、末尾に以下を追加します。# ssh-agentの自動起動設定(~/.bashrc に追加する) if [ -z "$SSH_AUTH_SOCK" ]; then eval $(ssh-agent -s) ssh-add ~/.ssh/id_ed25519 2>/dev/null fi
source ~/.bashrc
if [ -z "$SSH_AUTH_SOCK" ] は「SSH_AUTH_SOCKが未設定なら」という条件です。ssh-agentがすでに起動している場合は重複起動を防げます。2. WSL2で使う場合の注意点
WSL2では、ターミナルウィンドウを複数開いたり閉じたりすると、古いssh-agentプロセスが残ったまま新しいプロセスが起動することがあります。孤立したプロセスが増えると動作が不安定になるため、プロセスIDを保存・再利用する設定が実用的です。# WSL2向け: 既存のssh-agentを再利用する設定(~/.bashrc に追加する) SSH_ENV="$HOME/.ssh/agent-env" start_ssh_agent() { ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV" chmod 600 "$SSH_ENV" . "$SSH_ENV" ssh-add ~/.ssh/id_ed25519 2>/dev/null } if [ -f "$SSH_ENV" ]; then . "$SSH_ENV" > /dev/null ps -p "$SSH_AGENT_PID" > /dev/null 2>&1 || start_ssh_agent else start_ssh_agent fi
~/.ssh/agent-env に保存します。次回ターミナルを開いたとき、前回のssh-agentがまだ動いていればそちらを再利用します。停止していた場合だけ新しく起動します。【重要】
$SSH_ENV(~/.ssh/agent-env)のパーミッションは必ず chmod 600 にしてください。接続情報が含まれるファイルなので、自分だけが読み書きできる設定にする必要があります。GitHubへのSSH接続を確認する
1. GitHub SSHの接続テスト
GitHubに公開鍵を登録済みであれば、次のコマンドで接続できることを確認できます。# GitHubへのSSH接続テスト ssh -T git@github.com
Hi your-username! You've successfully authenticated, but GitHub does not provide shell access.
ssh-add -l で登録済みの鍵を確認してみてください。【注意】初回接続時は「Are you sure you want to continue connecting (yes/no)?」と表示されます。
yes と入力して接続を続けてください。「Could not open a connection」が出た時の対処法
ssh-agentに関連するよくあるエラーと対処法を整理します。エラー1:Could not open a connection to your authentication agent
ssh-agentが起動していない、または
SSH_AUTH_SOCK 環境変数が設定されていない状態です。# ssh-agentを起動して環境変数を設定する eval $(ssh-agent -s)
ssh-addで指定した秘密鍵のパスが間違っています。鍵ファイルの場所を確認してください。
# .sshディレクトリのファイル一覧を確認する ls -la ~/.ssh/
接続先に公開鍵が登録されていない、または鍵がssh-agentに登録されていない状態です。
ssh-add -l で登録状況を確認し、必要に応じてssh-addを実行してください。こうしたエラーに遭遇したときは、
-v オプションを付けて接続することでデバッグ情報が表示されます。どこで認証が失敗しているかが分かります。# 詳細なデバッグ情報を表示しながら接続する ssh -v user@hostname
本記事のまとめ
ssh-agentを使うと、パスフレーズを毎回入力せずにSSH接続できるようになります。.bashrcに設定を書いておけば、ターミナルを開くたびに自動で起動させられます。| やりたいこと | コマンド |
|---|---|
| ssh-agentを起動する | eval $(ssh-agent -s) |
| 秘密鍵を登録する | ssh-add ~/.ssh/id_ed25519 |
| 登録済みの鍵を確認する | ssh-add -l |
| すべての鍵を削除する | ssh-add -D |
| ssh-agentを停止する | eval $(ssh-agent -k) |
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
SSH接続やssh-agentの設定も含め、実務で必要な基礎知識を体系的に学べます。まずは無料マニュアルで基礎を固めてください。
無料マニュアルを受け取る >>
次に読む記事
SSH接続の設定が整ったら、次のステップとして各テーマの実践技術へ進んでみましょう。・シェルスクリプト: getoptsコマンドでbashスクリプトの引数を処理する方法
・Linuxセキュリティ: fail2banでブルートフォース攻撃を自動ブロックする方法
・サーバー構築: ssh-keygenでSSH公開鍵認証を設定する方法
・トラブルシューティング: straceでプロセスのシステムコールを追跡する方法
・ネットワーク診断: nmapコマンドでポートスキャン・ネットワーク診断を行う方法
・ファイルシステム: mkfsコマンドでLinuxのファイルシステムを作成する方法
・現場コラム: Linuxパスワード設定の注意点|特殊文字・PAMルール・レスキュー環境の落とし穴
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AIが書いたPythonコードをWSL2で実行する入門|ChatGPT・ClaudeのコードをLinuxターミナルから動かすまでの手順
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます