Linuxのssh-agentを設定する入門・VPSやWSL2で秘密鍵のパスフレーズ入力を省略してGitHubやサーバーに快適につなぐ方法

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > 【Linux入門】初心者のための基礎知識・講座 > Linuxのssh-agentを設定する入門・VPSやWSL2で秘密鍵のパスフレーズ入力を省略してGitHubやサーバーに快適につなぐ方法
「SSHで接続するたびに、同じパスフレーズを何度も入力しなければならない」
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プロセスを再利用する設定が実用的


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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の接続情報を ~/.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-agentへの鍵の登録がうまくいっていない状態です。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)

エラー2:Warning: Identity file not accessible

ssh-addで指定した秘密鍵のパスが間違っています。鍵ファイルの場所を確認してください。

# .sshディレクトリのファイル一覧を確認する ls -la ~/.ssh/

エラー3:Permission denied (publickey)

接続先に公開鍵が登録されていない、または鍵が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)
SSH接続の基本が身についたら、次のステップとしてシェルスクリプトや実際のサーバー構築へ進んでみましょう。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
SSH接続やssh-agentの設定も含め、実務で必要な基礎知識を体系的に学べます。まずは無料マニュアルで基礎を固めてください。
無料マニュアルを受け取る >>

次に読む記事

SSH接続の設定が整ったら、次のステップとして各テーマの実践技術へ進んでみましょう。

・シェルスクリプト: getoptsコマンドでbashスクリプトの引数を処理する方法
・Linuxセキュリティ: fail2banでブルートフォース攻撃を自動ブロックする方法
・サーバー構築: ssh-keygenでSSH公開鍵認証を設定する方法
・トラブルシューティング: straceでプロセスのシステムコールを追跡する方法
・ネットワーク診断: nmapコマンドでポートスキャン・ネットワーク診断を行う方法
・ファイルシステム: mkfsコマンドでLinuxのファイルシステムを作成する方法
・現場コラム: Linuxパスワード設定の注意点|特殊文字・PAMルール・レスキュー環境の落とし穴

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。