
Me cuesta entender si es posible lo siguiente y cómo.
Digamos que tengo una máquina T
(destino) a la que quiero acceder desde forma remota (idealmente a través de ssh
).
T
está detrás de un enrutador/firewall R
y no puedo reenviar el puerto (por ejemplo) 22
de R
al puerto 22
de T
. En una palabra, no es posible ssh
un acceso directo T
.
Ahora di eso
Tengo una máquina
A
sobre la que tengo control total.Puedo hacer ssh desde
T
hastaA
, es decirT: ssh user@A
tiene éxito.
P1:¿Puedo usar esto para acceder al shell T
de A
? Es decir, ¿puedo usar la conexión creada desde T
a A
, para usar T
desde A
?
T ---> ssh ----> A # this is possible
T <--- ? shell ? <---- A # is this possible?
P2:SiQ1es posible:
Digamos que tengo una tercera máquina L
(por ejemplo, mi computadora portátil) y mi objetivo es tener acceso al shell de T
from L
. ¿Puedo A
acceder al túnel ssh L
?
T ----> ssh ----> A <---- ssh < ---- L
T <------- ?? %&£€ ?? <------- L # is this possible?
cualquier ayuda apreciada.
Respuesta1
Por supuesto, esto es posible.
Q1: ¿Es posible hacer un túnel inverso sobre ssh?
Sí. Aquí hay algunas respuestas sobre los túneles de reserva:
Q2: ¿Es posible hacer un túnel en un túnel reservado?
Sí, esto es básicamente un túnel ssh sobre un túnel. Aquí hay algunas respuestas sobre un túnel dentro de un túnel:
Respuesta2
Hago esto todo el tiempo, en la otra dirección. Primero, establezca un túnel SSH inverso desde T al host local en A, luego haga un túnel desde L hasta el lado A del túnel AT, luego use ssh para conectarse a la parte local del túnel LA y se conectará de forma remota a través de LAT.
En mi ejemplo, A está escuchando conexiones ssh en el puerto 22123.
Localmente uso el nombre de usuario usuario, de forma remota es nombre.usuario.
Tengo claves llamadas localmente ~/.ssh/A_id_rsa y ~/.ssh/T_id_rsa para conectarme a las 2 máquinas A y T respectivamente como nombre de usuario.
Aquí hay un script para conectar el túnel TA, que debe ejecutarse en T.
#!/bin/bash SSH_KEY="-i /home/user.name/.ssh/A_id_rsa" REMOTE_USER="usuario.nombre" GATEWAY_MACHINE="A.dominio.com" GATEWAY_SSH_PORT="22123" ssh -N -R2201:127.0.0.1:22 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}
Aquí hay un script para conectar el túnel de Los Ángeles, que debe ejecutarse en L.
#!/bin/bash SSH_KEY="-i /home/user/.ssh/A_id_rsa" REMOTE_USER="usuario.nombre" GATEWAY_MACHINE="A.dominio.com" GATEWAY_SSH_PORT="22123" ssh -N -L2201:127.0.0.1:2201 -p ${GATEWAY_SSH_PORT} ${SSH_KEY} ${REMOTE_USER}@${GATEWAY_MACHINE}
Luego agrego lo siguiente al archivo /etc/hosts de mi host local, para poder referirme al lado local del túnel como T:-
127.0.0.1T
Luego tengo este script, en nuestro ejemplo llamado /usr/local/bin/T para conectarme a él.
#!/bin/bash SSH_KEY="-i /home/user/.ssh/T_id_rsa" REMOTE_USER="usuario.nombre" ssh -p 2201 ${SSH_KEY} ${REMOTE_USER}@T
El túnel TA es inverso, entonces -R, el túnel LA es local, entonces -L. El -N en los scripts les impide iniciar un shell en A, por lo que normalmente lo ejecuto, ya sea con & para ejecutarlo en segundo plano o presiono ctrl+Z y ejecuto bg para hacerlo, después de haber ingresado la contraseña para Desbloquea A_id_rsa si aún no lo tengo cargado en mi llavero.