Antes de montar un tunel SSH tenemos que recordar que en la máquina local donde establecemos el puerto sobre el que se monta el forward tendremos que ser root para poder usar los puertos por debajo de 1024.

Para establecer un tunel SSH usaremos la opción -L de éste. Las opciones interesantes a conocer de ssh relacionados con port-forwarding y que más he visto en scripts son:

  • -g: permite hosts remotos conectar a los puertos de esta máquina que estan en forward. Los ejemplos posteriores se ejecutan en máquina local con Cygwin, por ejemplo, lo que no requiere dicha opción, y además no nos interesa que otros usen el puerto creado en nuestro PC para acceder a través de nuestra máquina a sitios “delicados”. En caso de no ser ese el caso quizás nos pueda interesar poner esta opción.
  • -f: el proceso queda en background como un proceso
  • -N: garantiza que no se podran ejecutar comandos remotos, se suele poner cuando se trata únicamente de port-forwarding.

Ejemplos simples para ver como funciona:

  • ssh -L80:localhost:80 root@192.168.120.130
    Establece una conexión de SSH con root@192.168.120.130, y una vez autenticado el usuario crea el puerto local 80 y lo forwardea contra el puerto 80 de lo que el servidor remoto entiende como localhost, que es su propio puerto 80.

  • ssh -L80:192.168.120.130:80 root@192.168.120.130
    Igual que el caso anterior pero la conexión se realiza sobre la IP 192.168.120.130 que en realidad coincide con el mismo servidor contra el que hacemos la conexión.
  • ssh -L81:192.168.120.183:80 -f -N root@192.168.120.130
    Una vez introducida la contraseña, -f deja el proceso ssh en background en el servidor remoto 192.168.120.130. Con -N nos aseguramos que no se lanza ningún comando remoto.