Shell inversa con SSH

Las conexiones SSH, por norma general se realizan conectando un cliente contra un servidor remoto, para esto es necesario que el servidor tenga expuesto su puerto SSH esperando nuestra conexión. En el caso de no ser así necesitamos otro método para poder conectarnos a una máquina remota, en este caso es la inversa del proceso de conexión tradicional, en vez de conectarnos nosotros a a la máquina remota, la máquina remota se conecta a nosotros. De tal forma, tendremos que ser nosotros los que expongamos nuestro puerto SSH para que la máquina remota realice su conexión.

La shell inversa es usada en ámbitos donde tenemos la necesidad de conectar a una máquina la cual no podemos acceder a ella desde internet, es decir, no tiene un puerto abierto a internet o un firewall nos lo bloquea para poder entrar. Para estos casos podemos hacer que el servidor remoto se conecte a nosotros, así que la conexión realmente la establece la máquina remota, nosotros sólo tenemos que arrancar el ssh en nuestra máquina, para luego conectarnos a la máquina remota desde localhost.

Yo en este caso he usado dos máquinas virtuales con el puerto ssh por defecto, la máquina local por ahora sólo tiene que tener funcionando el servicio ssh.

Nos vamos a la máquina remota e introducimos el siguiente comando:

ssh -fN -R 7000:localhost:22 user@ip-remota

con -fN pasamos el proceso a segundo plano

-R indicamos la conexión inversa

7000:localhost indicamos el bind address y el puerto de escucha al que nos conectaremos

22 es el puerto del SSH de la máquina remota, con estos parámetros estamos indicando el acceso desde nuestro servidor.

Una vez ejecutado el comando nos vamos a nuestra máquina y comprobamos que podemos acceder desde localhost con el siguiente comando:

ssh -p 7000 user@localhost

A continuación dejo una captura de pantalla con el proceso:

post1