Ya sabréis que SSH es una potente aplicación para manejos remotos de los sistemas Linux. Con ella podemos conectarnos a un ordenador que este en otra parte del mundo de forma encriptada, de forma que podamos introducir comandos como si estuviéramos sentados delante.
SSH usa el puerto 22 TCP, consume muy poco ancho de banda. En linux se instala con tan solo:
$ sudo apt-get install ssh
Al ser una conexion encriptada, la primera vez que te conectas a un equipo, te indica su "firma" para que la aceptes. Esto impedirá que si en un futuro te conectas y esta firma no coincide (por que hay otro equipo enmedio haciendose pasar por el original,lo que se llama "man in the midle) no te permita conectar.
$ sudo apt-get install ssh
Al ser una conexion encriptada, la primera vez que te conectas a un equipo, te indica su "firma" para que la aceptes. Esto impedirá que si en un futuro te conectas y esta firma no coincide (por que hay otro equipo enmedio haciendose pasar por el original,lo que se llama "man in the midle) no te permita conectar.
Las posibilidades que permite son casi infinitas. Vamos a ver ejemplos:
1. Conectar dos equipos a traves de SSH
Como dije anteriormente, requiere del puerto 22 del equipo destino abierto, por que debe redirigirse ese puerto desde el router al ordenador. La conexión seria:
$ ssh usuario_remoto@ip_equipo_remoto
2. Conectar dos equipos a traves de un SSH remoto que corre en otro puerto distinto al 22
En ocasiones, resulta interesante cambiar el puerto que corre el SSH, para evitar ataques dirigidos especificamente contra este en el puerto 22. Si este es nuestro caso (recuerden, han de cambiar primero el puerto al que quieran), la conexión se realizaría asi:
$ ssh -p 2222 usuario_remoto@ip_equipo_remoto
Donde -p 2222 seria el puerto donde escucha el ssh del equipo destino
3. Conectar a traves de SSH con otra aplicacion corriendo en el equipo
Esta es muy interesante. Suponer que queremos conectarnos al entorno grafico. Lo mas recomendable en Linux es hacerlo a traves de VNC, pero esto es una conexión insegura, y que ademas requiere de otro puerto abierto. La solución es realizar un tunel seguro entre los SSH y ya en el equipo remoto, una conexion "interna" (que ya si puede ser insegura) entre SSH y VNC. Se realizaria asi:
$ ssh usuario_remoto@ip_equipo_remoto -L 5901:127.0.0.1:5900
Donde -L le indica que va a conectar el puerto 5900 del equipo con IP 127.0.0.1 (esto es el mismo equipo destino), con otro 5901 del equipo local, como si fueran el mismo.
Así, ahora si en nuestro cliente VNC realizamos la conexion 127.0.0.1:5901, nos conectaremos al VNC remoto... magico verdad?
4. Conectar a través de SSH con otra aplicación corriendo en otro equipo de la red remota
Esto es tan potente, que permite conectar puertos de la misma LAN a traves de SSH. Por ejemplo, supongan que queremos conectarnos al router remoto (que lógicamente estará en otra ip de la red remota) para realizar unas modificaciones, y además el servidor SSH del equipo remoto corre en el puerto 222. Esto lo podemos hacer así:
$ ssh -p 222 usuario_remoto@ip_equipo_remoto -L 81:192.168.1.1:80
Donde:
-p 222: ya lo hemos visto, es el puerto donde corre el SSH remoto
-L : indica que vamos a unir dos puertos
81:192.168.1.1:80 : uniremos el puerto 80 (servidor web) remoto de la IP 192.168.1.1 remota (usualmente es la direccion donde se encuentran los router domesticos), con el puerto 81 de nuestro equipo local.
Asi, si a continuacion escribimos en nuestro navegador la dirección: 127.0.0.1:81, nos conectaremos al servidor web del router remoto !!!!!Ejecutar una aplicación X a través de SSH
Se puede, aunque evidentemente la ejecución será muy lenta, incluso ejecutar aplicaciones gráficas remotas pero mostrandolas en nuestro equipo local, para ello, deberemos escribir el modificador -X:
$ ssh usuario_remoto@ip_equipo_remoto -X
Aunque Insisto en que no esperemos el mismo rendimiento como si se ejecutara en local. Solo debiera usarse para emergencias cuando no tengamos el VNC remoto funcionando.
5. Conectar por SSH con un equipo remoto que no tiene ningun puerto abierto
Esto es util para casos en los que el ordenador al que queremos acceder está en una red donde no podemos modificar nada (hoteles, puntos wifi libres, etc). Rizando el rizo, se puede realizar una conexion SSH inversa, en la que el puerto abierto tiene que estar en el equipo local.
En nuestro ejemplo, supongamos que tengo el puerto local del SSH en el 2222 y que esta correctamente abierto. Le tendremos que decir al usuario remoto que escriba (logicamente, debemos hacerle llegar nuestros datos de IP, usuario y password) :
$ ssh -p 2222 -R 9999:localhost:222 usuario_local@IP_equipo_local
Donde:
-p 2222 : es el puerto abierto de nuestro equipo local (remoto para el que realiza la conexion SSH, que recordemos, es el equipo al que queremos acceder y tiene los puertos bloqueados)
-R : conexión SSH inversa
9999:localhost:222 : 9999 será un puerto cualquiera de nuestro equipo local (insisto, puerto remoto para el que realiza la conexion SSH, que recordemos, es el equipo al que queremos acceder y tiene los puertos bloqueados), que usaremos como "puente".
localhost, para indicar que el puente será local (exactamente igual que si escribieramos 127.0.0.1)
222 el puerto donde corre el SSH remoto (local para el que hace la conexion, que insisto una vez mas, es el equipo al que queremos acceder y tiene los puertos bloqueados).
Una vez realizada la conexión inversa remota, ya solo falta, desde nuestro equipo local, completar la conexión con el equipo remoto:
$ ssh -p 9999 usuario_remoto@127.0.0.1
Donde:
- p 9999 : es el puerto elegido antes (que puede ser cualquiera no ocupado en el equipo local)
Saludos !!!!!!