domingo, 16 de junio de 2013

Creando túneles SSH con Putty

Para transferir archivos con un servidor del trabajo, me resulta muy cómodo usar WinSCP. El problema surge cuando me conecto desde mi piso, y he de entrar primero al servidor general de SSH y, una vez ahí, acceder al servidor en cuestión mediante su IP interna. En este caso no podía usar WinSCP y tenía que transferir los ficheros manualmente con scp… hasta ahora.

¿La solución? Accedemos al servidor en cuestión con un cliente SSH como Putty y establecemos un túnel SSH entre el servidor y nuestro PC. A continuación conectamos WinSCP al “lado” del túnel que se encuentra en nuestro PC, y de forma transparente la información llegará al otro “lado”, es decir, al servidor.

Para que se entienda mejor, he hecho un pequeño esquema:

image

Tenemos por un lado el PC de mi casa. Desde él, puedo hacer un SSH al servidor SSH a través de Internet, pero no al servidor destino, ya que éste no tiene su IP ni su puerto SSH conectado a Internet, sino a la red interna. Lo que queremos conseguir es algo parecido a la flecha verde de arriba: conectarnos al servidor destino de manera que el resto de aplicaciones crean que se trata de una conexión directa.

Hacer esto con Putty es muy sencillo. Comenzamos abriéndo Putty y estableciendo los datos generales de la conexión:

image

En “Host Name” he puesto la dirección del servidor SSH, desde el cual tengo que acceder a servidor destino. Podemos cambiar también la codificación de caracteres (en Window>Translation) y poner el nombre de usuario por defecto en Connection>Data. Pero vayamos a la parte interesante:

image

En Connection>SSH>Tunnels podemos establecer nuestro túnel. Para ello, en Source Port pondremos nuestro “lado” del túnel, es decir, el puerto de nuestro PC que vamos a conectar con el servidor destino. En Destination pondremos el otro “lado” del túnel, es decir, la dirección y el puerto del servidor destino una vez que hemos entrado en el servidor SSH. Por último pulsamos en Add y podemos ver que se ha añadido una línea como la que he tachado parcialmente en azul. Básicamente esto dice: “Cuando nos conectemos al puerto 2222 de nuestro PC, en realidad accederemos al servidor destino Y:22, que se encuentra dentro de la conexión SSH que hemos establecido previamente con el servidor SSH X:22. Si abrimos ahora la conexión, podemos comprobar cómo funciona perfectamente:

image

Como vemos, cuando accedemos al puerto 2222 de nuestra máquina, vemos el SSH del servidor destino. Ahora que vemos que el túnel funciona, sólo queda conectarnos con WinSCP directamente a localhost:2222, y podremos acceder directamente al servidor destino gracias al túnel SSH.

image