O endereço especificado em -L
é usado pelo host remoto (B). Portanto, não é de admirar que você realmente tenha um túnel entre A e B por -L 5000:127.0.0.1:5000
. Quando você está se conectando à porta TCP 5000 em A, a conexão é encaminhada para 127.0.0.1:5000
em B.
Por outro lado -R 5001:127.0.0.1:5001
seria bom porque o endereço é resolvido pelo host local (A) e seu destino é A. Quando você está se conectando à porta TCP 5001 em B, a conexão é encaminhada para 127.0.0.1:5001
em A.
Observe que as duas portas de escuta -L
/ -R
estão vinculadas a localhost
por padrão, portanto, elas estão disponíveis somente em A e B, respectivamente. Se você quiser permitir que outros hosts se conectem, adicione a parte bind_address
em -L
/ -R
. Apenas adicionar um :
à esquerda seria suficiente:
ssh -L :5000:IP_of_C:5000 -R :5001:127.0.0.1:5001 IP_of_B
com essa configuração A conecta-se a 127.0.0.1:5000
e C conecta IP_of_B:5001
.
Se você preferir usar 127.0.0.1
em A e C, será necessário estabelecer uma conexão SSH (praticamente) direta entre A e C, o que é possível com o SSH sobre o tunelamento SSH por ProxyCommand
. Coloque o seguinte em ~/.ssh/config
:
Host C
ProxyCommand ssh -q -W IP_of_C:22 IP_of_B
Em seguida, conecte-se a C de A com 1-hop ssh
:
ssh -L 5000:127.0.0.1:5000 -R 5001:127.0.0.1:5001 C
Desta vez, você não precisa adicionar bind_address
part porque 127.0.0.1
é usado para a conexão de túnel em ambas as extremidades.