ssh-agentとは?秘密鍵のパスフレーズ入力を省略する仕組みを解説

ssh-agentとは?

ssh-agentを利用してSSH鍵認証を効率化しよう

SSH公開鍵認証では、秘密鍵にパスフレーズを設定することでセキュリティを高めることができます。

しかしパスフレーズを設定すると、SSH接続のたびに入力が必要になるため、複数のサーバを管理している環境では手間が増えてしまいます。

そこで利用されるのがssh-agentです。

ssh-agentを利用すると、一度パスフレーズを入力するだけで、その後は複数回のSSH接続やscp、sftpなどで再入力を省略できます。

実務ではLinuxサーバ管理やGitHub利用、Ansibleによる自動化などで広く利用されています。

本記事ではssh-agentの仕組みや使い方、実務での活用方法について詳しく解説します。

ssh-agentとは

ssh-agentはSSH秘密鍵をメモリ上に保持するためのプログラムです。

一度認証した秘密鍵を記憶し、SSHクライアントからの要求に応じて認証処理を代行します。

これにより秘密鍵のパスフレーズ入力を何度も繰り返す必要がなくなります。

なぜssh-agentが必要なのか

例えば以下のような環境を考えてみます。

  • Webサーバ
  • DNSサーバ
  • メールサーバ
  • 監視サーバ

すべて公開鍵認証を利用し、秘密鍵にはパスフレーズを設定しているとします。

ssh-agentがない場合は接続するたびにパスフレーズ入力が必要になります。

管理対象が増えるほど負担は大きくなります。

ssh-agentを利用すれば、一度だけ入力すれば済みます。

ssh-agentの仕組み

動作の流れは次のようになります。

  1. ssh-agentを起動する
  2. 秘密鍵を登録する
  3. パスフレーズを入力する
  4. 秘密鍵をメモリ上に保持する
  5. SSH接続時に認証を代行する

秘密鍵そのものを毎回読み込むのではなく、ssh-agentが認証を代行している点が特徴です。

ssh-agentを起動する

Linuxでは次のコマンドで起動できます。

$ eval $(ssh-agent)

実行例です。
Agent pid 12345

これでssh-agentが起動しました。

秘密鍵を登録する

起動後はssh-addコマンドで秘密鍵を登録します。

$ ssh-add ~/.ssh/id_ed25519

パスフレーズ入力を求められます。
Enter passphrase for ~/.ssh/id_ed25519:

正しく入力すると登録が完了します。

登録済み鍵を確認する

現在登録されている鍵を確認できます。

$ ssh-add -l

実行例です。
256 SHA256:xxxxxxxxxxxx

フィンガープリントが表示されます。

SSH接続してみる

登録後は通常通り接続します。

$ ssh user@server

パスフレーズ入力なしで接続できるようになります。

秘密鍵はssh-agentが管理しています。

複数の鍵を登録する

複数サーバを管理する場合は複数の秘密鍵を登録できます。

$ ssh-add ~/.ssh/web_key
$ ssh-add ~/.ssh/dns_key
$ ssh-add ~/.ssh/mail_key

用途ごとに鍵を分けて管理できます。

登録済み鍵を削除する

不要になった鍵は削除できます。

$ ssh-add -d ~/.ssh/id_ed25519

すべて削除する場合です。
$ssh-add -D

共有端末利用後には重要な操作です。

ssh-agentを終了する

エージェントを停止する場合は以下を実行します。

$ ssh-agent -k

登録済み鍵も利用できなくなります。

GitHubでも利用される

ssh-agentはGitHubやGitLabでも利用されています。

例えば以下のような操作です。

git clone
git pull
git push

毎回パスフレーズを入力する必要がなくなります。

scpやsftpでも利用可能

ssh-agentはSSHだけではありません。

以下のコマンドでも利用されます。

  • scp
  • sftp
  • rsync -e ssh
  • git

OpenSSHを利用する多くのツールで有効です。

SSH設定ファイルとの組み合わせ

configと組み合わせるとさらに便利です。

Host web01
    HostName 192.168.60.101
    User student
    IdentityFile ~/.ssh/id_ed25519

ssh-agentに登録しておけば以下だけで接続できます。

ssh web01

実務での利用例

  • 複数サーバ管理
  • クラウド環境運用
  • Ansible実行
  • GitHub利用
  • CI/CD環境
  • バックアップ処理

インフラエンジニアが日常的に利用する機能です。

セキュリティ上の注意点

便利な機能ですが注意も必要です。

  • 共有PCでは利用後に削除する
  • 離席時は画面ロックする
  • 不要な鍵を登録しない
  • 秘密鍵自体は安全に保管する

ssh-agentは秘密鍵をメモリ上に保持しているため、ログイン状態の管理が重要です。

よくあるトラブル

鍵が見つからない

Could not open a connection to your authentication agent

ssh-agentが起動していない可能性があります。

再度以下を実行します。

eval $(ssh-agent)

登録したのに認証されない

利用する秘密鍵が異なる可能性があります。

以下で確認しましょう。

$ ssh-add -l

まとめ

ssh-agentは秘密鍵をメモリ上に保持し、SSH認証を代行する便利な仕組みです。

パスフレーズ付き秘密鍵を安全かつ効率的に運用できるため、実務では広く利用されています。

SSHだけでなくscp、sftp、GitHubなどでも利用できるため、Linux管理者であればぜひ習得しておきたい機能です。

公開鍵認証を利用している環境では、ssh-agentを活用して安全性と利便性を両立しましょう。