next up previous
Next: 2.5 リモートログイン Up: 2 ssh Previous: 2.3 公開鍵をリモートホストに登録

2.4 ssh-agent

秘密鍵は暗号化されて設定ファイルに記録されていて、 それを復号するためのフレーズが必要であるが、 何度もそれを入力するのは面倒であるから、 その入力を代行するために ssh-agent というプログラムを常駐させる。

 oyabun% ssh-agent /bin/tcsh
 oyabun% ssd-add
 Need passphrase for /home/mk/.ssh/identity
 Enter passphrase for mk@oyabun: 
 Identity added: /home/mk/.ssh/identity (mk@oyabun)

ssh-add は、 常駐している ssh-agent に復号用のフレーズを教えるためのものである。

以後はパスフレーズの入力なしに ssh, slogin, scp が使える。 起動するのはシェルに限らない。 例えば ``ssh-agent startx'' というのもアリである。

上のやり方は、シェルを新しく起動していて無駄がある。 余計なシェルを起動しない (今使っているシェルで ssh-agent を利用する) ためには、
C シェル系の場合 (-c をつける)
  oyabun% eval `ssh-agent -c`
  oyabun% ssh-add                 パスフレーズを入力
    ...
  oyabun% eval `ssh-agent -k`     最後は ssh-agent を止める

eval `ssh-agent -c` でしているのは、 ssh-agent を常駐することの他に、 環境変数 SSH_AUTH_SOCKSSH_AGENT_PID の値を セットしているだけである。 前者は ``/tmp/ssh-JwDmes2379/agent.2379'' のような ソケット・ファイルの名前。後者は ssh-agent のプロセスIDである。 それが分かれば (親子関係のないシェルに) 手動でも設定できる。
tcsh の場合はこんな感じ
  % setenv SSH_AUTH_SOCK /tmp/ssh-JwDmes2379/agent.2379
  % setenv SSH_AGENT_PID 2404

bash の場合は -c 抜きで単に eval `ssh-agent` でよい。
bash の場合はこんな感じ
  $ export SSH_AUTH_SOCK=/tmp/ssh-JwDmes2379/agent.2379
  $ export SSH_AGENT_PID=2404


next up previous
Next: 2.5 リモートログイン Up: 2 ssh Previous: 2.3 公開鍵をリモートホストに登録
Masashi Katsurada
平成19年9月30日