複数のサーバにsshしたり, 短時間に何回もsshする際,
パスフレーズをいちいち入力するのは面倒.
そこで, ssh-agentを使うことでセッション中は一回の入力で何度でもSSH接続を行えます.
ssh-agent
コマンドは多くの環境で既にインストールされていると思います.
TL;DR
$ exec ssh-agent $SHELL # 起動
$ ssh-add <秘密鍵のパス> # 鍵追加
$ ssh-add -d <秘密鍵のパス> # 鍵削除
$ ssh-add -l # 追加した秘密鍵一覧
$ ssh-add -k # 明示的にssh-agentを終了
起動方法
使用する際, 少しシェルやプロセスに関する知識が必要となります.
基本的には起動方法は三通り
- 現在のシェルの子プロセスとして生成
- 現在のシェルとして生成
- 独立したプロセスとして生成
最も簡単な使い方は次の通りです.
$ ssh-agent <使用したいシェル名>
しかし, これだけでは別プロセスとしてバックグラウンド生成されてしまいスマートではありません.
そこで, eval
やexec
コマンドを使います.
$ eval $(ssh-agent) # 独立したプロセスとして実行
もしくは
$ exec ssh-agent <任意のシェル名> # 現在のシェルに置換し実行
eval
は使用中のシェルを終了後も残るため, セキュリティ上あまり良くないようです.exec
を使ったほうが良さそうですね.
鍵の管理
鍵の管理は専用のコマンドssh-add
があるのでそれを使います.
- 鍵の追加
現在の
ssh-agent
セッションに鍵情報を追加.
ここでパスフレーズを入力することで, セッション中は入力しなくて済みます.
$ ssh-add <秘密鍵のパス>
- 鍵の削除 現在のセッションから追加済みの秘密鍵の情報を削除.
$ ssh-add -d <秘密鍵のパス>
- 鍵の一覧を表示 追加済みの全秘密鍵のフィンガープリントを表示.
$ ssh-add -l
- 追加済みの全秘密鍵を削除.
$ ssh-add -D
- ssh-agentを明示的に終了
$ ssh-agent -k
基本的な使い方は以上です.
あとは普通にssh
すれば, パスフレーズなしで接続できます.
例
$ exec ssh-agent $SHELL
$ ssh-add ~/.ssh/hogehoge # 秘密鍵のパス
$ ssh-add -l # 確認
************************ hoge@fuga
$ ssh piyo # 接続してもパスフレーズは求められない