[Tools] Sticky ssh tunnel その2

先日(id:hcr:20050707),sshセッションを張りっぱなしにするスクリプトを書いてみたのですが,やっぱり空のパスフレーズは強度的に不安なので,ssh-agent対応してみました.(「ssh-agent で快適 ssh 生活 (.ja)」のスクリプトを参考にしています.)

スクリプトを起動した時に,ssh-agentが起動していない場合,ssh-agentを起動してパスフレーズを入力します.一度入力するか,ssh-agentが起動済みで秘密鍵を登録済みの場合は,パスフレーズの入力は不要です.これで,ssh tunnel生活も一安心です.

#!/bin/sh

startsshagent()
{
  echo -n "ssh-agent: checking..."
  if test -f ~/.ssh-agent; then
    source ~/.ssh-agent
  fi

  ssh-add -l >&/dev/null
  if [ $? -eq 2 ]; then
    echo -n "ssh-agent: restart...."
    ssh-agent >~/.ssh-agent
    source ~/.ssh-agent
  fi

  ssh-add -l >&/dev/null
  if [ $? -ne 0 ]; then
    echo "ssh-agent: Storing identity."
    ssh-add
  fi
}

stopsshagent(){
  echo -n "ssh-agent: stopping..."
  ssh-agent -k
  if test -f ~/.ssh-agent
  then
    rm -f ~/.ssh-agent
  fi
}

while :
do
  startsshagent
  ssh -Cg -D 1080 foo.bar
  sleep 5
done

ちなみに,このスクリプトのstartsshagentを.bashrc( or .zshrc)などでログイン時に呼んでおくようにすると,以後のssh/scpを使う時に一々パスフレーズを聞いてこないので,なかなか快適になります.(もっとも最初のログイン時にパスワードとパスフレーズの両方の入力が求められるようになりますが.)