Tener un túnel ssh para acceso remoto desde una tercera máquina

Tener un túnel ssh para acceso remoto desde una tercera máquina

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

Testá detrás de un enrutador/firewall Ry no puedo reenviar el puerto (por ejemplo) 22de Ral puerto 22 de T. En una palabra, no es posible sshun acceso directo T.

Ahora di eso

  • Tengo una máquina Asobre la que tengo control total.

  • Puedo hacer ssh desde Thasta A, es decir

      T:  ssh user@A
    

    tiene éxito.

P1:¿Puedo usar esto para acceder al shell Tde A? Es decir, ¿puedo usar la conexión creada desde Ta A, para usar Tdesde 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 Tfrom L. ¿Puedo Aacceder 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?

. Aquí hay algunas respuestas sobre los túneles de reserva:

Q2: ¿Es posible hacer un túnel en un túnel reservado?

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

información relacionada