EDIT: Esta resposta está obsoleta agora que o suporte adequado foi implementado no OpenSSH, veja a resposta de Brian Minton.
O SSH só é capaz de encaminhar conexões tcp dentro do túnel.
Você pode, no entanto, usar um programa como socat
para retransmitir o soquete unix sobre TCP, com algo assim (você precisará de socat tanto no cliente quanto nos hosts do servidor):
# Get the path of gpg-agent socket:
GPG_SOCK=$(echo "$GPG_AGENT_INFO" | cut -d: -f1)
# Forward some local tcp socket to the agent
(while true; do
socat TCP-LISTEN:12345,bind=127.0.0.1 UNIX-CONNECT:$GPG_SOCK;
done) &
# Connect to the remote host via ssh, forwarding the TCP port
ssh -R12345:localhost:12345 host.example.com
# (On the remote host)
(while true; do
socat UNIX-LISTEN:$HOME/.gnupg/S.gpg-agent,unlink-close,unlink-early TCP4:localhost:12345;
done) &
Teste se funciona com gpg-connect-agent
. Certifique-se de que o GPG_AGENT_INFO esteja indefinido no host remoto, para que ele volte para o soquete $HOME/.gnupg/S.gpg-agent
.
Agora esperamos que tudo o que você precise seja uma maneira de executar tudo isso automaticamente!