月別アーカイブ: 2018年5月

tmux に接続し直した時に ssh-agent につなぎ直す方法

調べると色々出ては来るけど、環境変数 SSH_AUTH_SOCK の中身を有効な内容に上書きすれば OK。

自分の .bashrc には以下のように記述した。

### SSH AGENT SETTINGS ###
if [ -z "$SSH_CONNECTION" ]; then
  SSH_AGENT_FILE=$HOME/.ssh-agent
  [ -f $SSH_AGENT_FILE ] && source $SSH_AGENT_FILE
  ssh-add -l > /dev/null 2>&1
  if [ $? != 0 ]; then
    ssh-agent > $SSH_AGENT_FILE
    source $SSH_AGENT_FILE
    DIR="$HOME/.ssh/"
    for KEY in `find $DIR -name 'id_rsa*' -not -name '*.pub'`
    do
      ssh-add $KEY
    done
  fi
  unset SSH_AGENT_FILE
  unset DIR
  unset KEY
else
  SSH_AGENT_LINK=$HOME/.ssh/agent
  if [ -S $SSH_AUTH_SOCK ]; then
    case $SSH_AUTH_SOCK in
      /tmp/ssh-*/agent.[0-9]*)
        ln -sf $SSH_AUTH_SOCK $SSH_AGENT_LINK;
        ;;
    esac
  fi
  if [ -S $SSH_AGENT_LINK ]; then
    export SSH_AUTH_SOCK=$SSH_AGENT_LINK
  fi
  unset SSH_AGENT_LINK
fi

ポイントは以下。

  • $SSH_CONNECTION の中身を見て、 SSH 接続されたシェルかどうかをチェック。
    • $SSH_CONNECTION が空の場合、クライアントであるとみなして、ssh-agent を起動する。
      • 起動時に、PID 等の設定をファイルにリダイレクトして、シェルを複数起動した場合に一つの ssh-agent を共有可能にする。
      • ssh-agent 起動後、$HOME/.ssh/ 内の鍵を ssh-add して追加する。
    • $SSH_CONNECTION が空でない場合、サーバであるとみなして、ssh-agent をシェルから利用できるようにする。
      • $SSH_AUTH_SOCK の値自体は固定したいので、$HOME/.ssh/agent としておき、実体へのシンボリックリンクとする。
      • こうしておくと、tmux に対して別の SSH セッションで接続し直した場合でも、$SSH_AUTH_SOCK の参照先を差し替えることができ、ssh agent を利用することが可能。