ssh-agentでスマートにsshする

いちいちパスフレーズを入力しなくてもsshできるようにする

複数のサーバに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 <使用したいシェル名>

しかし, これだけでは別プロセスとしてバックグラウンド生成されてしまいスマートではありません.
そこで, evalexecコマンドを使います.

$ 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 # 接続してもパスフレーズは求められない