Screenの再接続時にssh agent forwardingを有効にする
screenコマンドをデタッチしてから、後ほど再ログインしてscreenに再接続すると、screen上で動いているシェルで、ssh agent forwardingが無効になってしまいます。
これは、agent forwardingに使われるソケットの名前が、sshでログインするたびに変わってしまうためです。実際にはソケット名は次のようになります。
/tmp/ssh-[ランダムな文字列]/agent.[sshdのPID]
これを解決するには、sshdが生成したソケットを指すようなシンボリックリンクを、決め打ちのパスで作るようにします。 そして、環境変数SSH_AUTH_SOCKがそのリンボリックを指すようにしてやります。
実際には、~/.bashrc
に次のコードを追加します。
# To enable agent forwarding when screen is reconnected.
# See http://mokokko.hatenablog.com/entry/2013/03/14/133850
AUTH_SOCK="$HOME/.ssh/.ssh-auth-sock"
if [ -S "$AUTH_SOCK" ]; then
export SSH_AUTH_SOCK=$AUTH_SOCK
elif [ ! -S "$SSH_AUTH_SOCK" ]; then
export SSH_AUTH_SOCK=$AUTH_SOCK
elif [ ! -L "$SSH_AUTH_SOCK" ]; then
ln -snf "$SSH_AUTH_SOCK" $AUTH_SOCK && export SSH_AUTH_SOCK=$AUTH_SOCK
fi
参考: