ssh tunel inverso (o reverso)
método SSH
sean:
- A - ordenador al que me quiero conectar desde «donde sea»
- B - ordenador con acceso «pleno»
- C - cualquier ordenador
- A y C pueden estar sin acceso público SSH
el método sería:
- dejo la conexión abierta a A (conecto desde A a B):ssh -R 12345:localhost:22 usuario_B@B 
- alternativamente, usarssh reverseB- .ssh/config
- Host reverseB HostName B User usuario_B RemoteForward 12345 localhost:22 IdentityFile ~/.ssh/usuario_B@B
 
- conecto desde C a B con SSH (como siempre)ssh usuario_B@B 
- una vez en B, conecto con A con:ssh -p 12345 usuario_A@localhost 
- alternativamente a estos dos últimos pasos, usarssh test2-reverse- .ssh/config
- Host test2-reverse Hostname localhost User usuario_A ProxyCommand ssh computerB -W %h:12345 ForwardAgent yes IdentityFile ~/.ssh/usuario_A@A Host computerB Hostname B User usuario_B RemoteForward 12345 localhost:22 IdentityFile ~/.ssh/usuario_B@B
 
- desde A establezco una conexión SSH haciendo que B escuche en 12345 y se lo envíe a A
- desde C conecto a B en primera instancia y desde ahí conecto con A usando la conexión ya abierta
- puedo usarnohup ssh -N -f -R 12345:localhost:22 usuario_B@Bpara que quede la conexión «activa» aunque haga logout
- este método tiene la ventaja que si escanean connmap -p 12340-12350 -sV @Bno hay puertos en uso
método PORT_FORWARDING
sean:
- A - ordenador con página web tras firewall (en este caso)
- B - ordenador en internet
- C - ordenador que quiere acceder a página web en A
método:
- activar en B:
- /etc/ssh/sshd_config
- GatewayPorts clientspecified 
- Reiniciar el servicio SSH en B:service ssh reload
- Desde el A ejecutar el siguiente comando:ssh -N -f -R B:6677:localhost:80 user@B 
- Y una vez hecho esto ya estaría el túnel creado. Para conectarse desde el C habría que escribir lo siguiente en el navegador:http://<B>:6677