秘密鍵は暗号化されて設定ファイルに記録されていて、 それを復号するためのフレーズが必要であるが、 何度もそれを入力するのは面倒であるから、 その入力を代行するために 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_SOCK と SSH_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 |