ForwardAgent が有効な状態で、ssh ログインしなおすと、環境変数SSH_AUTH_SOCK が新しいパスをさすようになる。ここで tmux attach すると、tmux セッション上のシェルは以前の SSH_AUTH_SOCK の値を保持し続けていて、別の所を指しているのでうまくいかない。
~/.bashrc に
agent="$HOME/.ssh/agent"
if [ -S "$SSH_AUTH_SOCK" ]; then
case $SSH_AUTH_SOCK in
/tmp/*/agent.[0-9]*)
ln -snf "$SSH_AUTH_SOCK" $agent && export SSH_AUTH_SOCK=$agent
esac
elif [ -S $agent ]; then
export SSH_AUTH_SOCK=$agent
else
echo "no ssh-agent"
fi
のようなものを追加しておくと、ログインするたびに $HOME/.ssh/agent
に symlink を貼るようになる。そして SSH_AUTH_SOCK
は常に $HOME/.ssh/agent
を見るようにしているので、古い tmux セッションでも最新の SSH_AUTH_SOCK
の場所を指せるようになる。
$HOME/.ssh
は通常 700 になっているので、他の人に盗まれることもなくて安心。