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:
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:
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:
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:
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.