La idea de un túnel ssh es que si, por ejemplo, tenemos permitido el accesso desde máquina A a máquina B, pero no desde máquina B a máquina A (imaginemos que hay una máquina de login C en el medio que por lo que sea está rota) podamos todavía acceder a máquina A.
Es decir, para acceder a máquina B desde máquina A, podemos simplemente hacer
~$ ssh b_machine
Pero sin embargo, para acceder a máquina A
~$ ssh c_login_machine
<login in c_login_machine>
Welcome to Login Machine C!
you@login_c:~$ ssh a_machine
Queremos pues una manera de saltarnos ese paso si, por ejemplo, c_login_machine
está caída.
Esto es realmente fácil y de hecho he ya preparado varios scripts para activar túneles allá donde el pybliotecario está corriendo.
La idea es abrir un tunel ssh inverso con el siguiente comando en machine a!
you@machine_a:~$ ssh -R 41234:localhost:22 b_machine -Nf
Donde -R
le dice que es un puerto inverso, Nf
nos devuelve a la shell (no es necesario, pero es útil para scripting), el puerto 41234 es el que usarás luego desde machine_b
para conectarte y el puerto 22 es el puerto que se usa para conectarse en machine_a
.
Una vez hecho esto, nos volvemos a machine b y podemos hacer:
you@machine_b:~$ ssh localhost -p 41234
Easy peasy!
Obviamente si para entrar en machine_a
tienes "necesidades especiales" siempre puedes añadir una entrada a tu ~/.ssh/config
, por ejemplo:
Host tunnelToA
Hostname localhost
User specialUser
Port 41234
StrictHostKeyChecking False