Screenの再接続時にssh agent forwardingを有効にする

Updated:

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

参考: