La redirección de puertos nos permite tanto encriptar comunicaciones, que de otra manera se realizarían en texto claro, como acceder a servicios que sólo están disponibles de manera local al servidor.
Si observamos las opciones avanzadas del comando ssh:
ssh [-afgknqstvxACNTX1246] [-b bind_address] [-c cipher_spec] [-e escape_char] [-i identity_file] [-l login_name] [-m mac_spec] [-o option] [-p port] [-F configfile] [-L port:host:hostport] [-R port:host:hostport] [-D port] hostname | user@hostname [command] |
Vamos a ver un ejemplo útil para cada tipo de redirección.
El uso típico de esta redirección es la de tener acceso a servicios que sólo están disponibles desde la máquina remota.
Podemos realizar una conexión ssh a la máquina remota y redirigir este servicio para utilizarlo de manera local.
La sintaxis es:
ssh [-L port:host:hostport] hostname | user@hostname |
port: será el puerto local que queremos utilizar para acceder al servicio
host: máquina que ofrece el servicio
hostport: puerto en que host ofrece el servicio
hostname: máquina a la que nos conectamos, puede ser la misma que host
Se entenderá mejor con un ejemplo.
Voy a utilizar el servicio de proxy que se sirve en el puerto 81 de la máquina proxy.dominio.es y que sólo está disponible desde servidor.dominio.es, mediante el puerto local 8080.
[usuario1@localhost usuario1]$ ssh -L 8080:proxy.dominio.es:81 \ usuario1@servidor.dominio.es [usuario1@servidor usuario1]$ |
[usuario1@localhost usuario1]$ ssh -fN -L 8080:proxy.dominio.es:81 \ usuario1@servidor.dominio.es [usuario1@localhost usuario1]$ netstat -lnp|grep 8080 tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 6417/ssh [usuario1@localhost usuario1]$ ps -fp 6417 UID PID PPID C STIME TTY TIME CMD usuario1 6417 1 0 19:24 ? 00:00:00 ssh -fN -L 8080:proxy.dominio.es:81 usuario1@servidor.dominio.es [usuario1@localhost usuario1]$ |
En el ejemplo el servicio redirigido sólo puede usarse localmente. Si quieres que tu máquina acepte conexiones remotas en este puerto deberás añadir al comando la opción -g. |
Esta redirección se realiza en sentido inverso a la anterior y se utiliza para hacer accesible remotamente un puerto local o accesible localmente.
La sintaxis es:
ssh [-R port:host:hostport] hostname | user@hostname |
port: puerto remoto donde se ofrecerá el servicio
host: máquina que ofrece el servicio, la local o una a la que tengamos acceso
hostport: puerto en que host ofrece el servicio
hostname: máquina a la que nos conectamos, puede ser la misma que host
Por ejemplo, este comando conseguirá que en la máquina remota se sirva en el puerto 8001, el servidor de streaming que se está sirviendo en la máquina local en el puerto 8000.
ssh -fN -R 8000:localhost:8001 usuario1@servidor.dominio.es |