【linux】 screenデタッチした場合にもssh agent forwardingを有効にしたい

ssh agent forwarding を設定することで、ホストAからホストBへのssh接続の際に、ホストBからの鍵要求をホストAがログイン元へ転送してホストAのログインに使用した鍵ペアの利用を可能にしてくれます。

が、screen を使っている場合、よろしくないことが起こってしまう。。。。。。screen をdetachして別ソケットからattachした場合、agent forwardingがうまく効かないのです。

[原因]

OpenSSHの場合、ssh agent forwardingにおける情報のやりとりはunix domain socketを使って行っています。unix domain socketは、/tmp/ssh-[ランダムな文字列]/agent.[sshdのPID] という名前でsshdが用意して、環境変数SSH_AUTH_SOCKに格納されます。 screenは環境変数SSH_AUTH_SOCKをキャッシュしてしまい、SSH_AUTH_SOCKは以前のままで、unix domain socketだけが再作成された形になるのです。

[対策]

環境変数は固定のファイル名にして、そこから実際のunix domain socketへsymlinkを張る方針!!

.bashrcに

agent="$HOME/users/mydir/dotfile/.ssh-agent-`hostname`"
if [ -S "$agent" ]; then
  export SSH_AUTH_SOCK=$agent
elif [ ! -S "$SSH_AUTH_SOCK" ]; then
  export SSH_AUTH_SOCK=$agent
elif [ ! -L "$SSH_AUTH_SOCK" ]; then
  ln -snf "$SSH_AUTH_SOCK" $agent && export SSH_AUTH_SOCK=$agent
fi

でけたv( ̄Д ̄)v ♡