GNU screenからssh-agentを使う
GNU screenからssh-agentを使う場合、エージェントソケットのシンボリックリンクを張るのが常道のようなのだが、WSL環境でホームディレクトリをdrvfsにしているとunix domain socketとシンボリックリンクの相性が悪いようでどうにもうまく動かなかった。
そこで思い切ってRubyでunix domain socketをトンネルするツールを作ることにした。
ツールを使って.bashrc
に次のように設定。
ssh-agentはログイン時に起動済みの想定。
# ssh-agent forwarding in GNU Screen session if [ -n "$PS1" ]; then # for interactive shell saved_ssh_agent_sock="${HOME}/.ssh/agent_sock" unix_socket_tunnel="${HOME}/git_work/unix_socket_tunnel/unix_socket_tunnel" if [ -n "${SCREEN_SESSION}" ]; then # add to .screenrc: setenv SCREEN_SESSION 1 export SSH_AUTH_SOCK="${saved_ssh_agent_sock}" elif shopt -q login_shell && [ -n "${SSH_AUTH_SOCK}" ] && [ -S "${SSH_AUTH_SOCK}" ]; then rm -f "${saved_ssh_agent_sock}" "${unix_socket_tunnel}" "${SSH_AUTH_SOCK}" "${saved_ssh_agent_sock}" & fi fi
.screenrc
にも忘れずに設定追加。
setenv SCREEN_SESSION 1
これで常に最新のssh-agentソケットをGNU screenの中から使えるようになった。