ssh a un servidor sin IP pública desde un servidor sin IP pública que está oculto detrás de un servidor con IP pública

ssh a un servidor sin IP pública desde un servidor sin IP pública que está oculto detrás de un servidor con IP pública

Tengo la siguiente configuración: Me gustaría acceder a la máquina A desde la máquina C, pero ninguna de ellas tiene una dirección IP pública. Sin embargo, la máquina C está en la misma red que la máquina B, que tiene acceso a una IP pública, por lo que puedo acceder a la máquina C desde cualquier lugar ingresando primero a la máquina B y desde allí a la máquina C. No tengo acceso root en la máquina B, mientras que tanto en A como en CI lo hacen. Consulte el siguiente diagrama para mayor claridad:

machine A          machine B      machine C
no public IP       public IP      no public IP
root access        no root access root access     
how to access?    '---------------------------'
                           same network
                       hence both accessible

Una solución tonta sería hacer que la máquina A husmee regularmente un archivo en la máquina C (mediante el acceso ssh de 2 pasos descrito anteriormente) y cada vez que aparezca un comando en ese archivo, ejecútelo y escriba las salidas a través de ssh en algún lugar de la máquina C. Sin embargo, me pregunto, ¿puede ssh de alguna manera "invertir" la conexión, de modo que la máquina A se conecte en 2 pasos a la máquina C, y luego la conexión se "invierte" de modo que la máquina C realmente tenga el shell remoto de la máquina A? Y si es así, ¿cómo lo hago?

Respuesta1

Es posible que tengas que machineAabrir un túnel SSH hacia machineB, con una opción de reenvío remoto, lo que te permitiría ingresar por SSH machineAdesde machineB.

Si tiene acceso root activado machineB, configure la GatewayPortsopción de configuración en yesin /etc/ssh/sshd_configy luego emita este comando en machineA:

ssh -N -R 0.0.0.0:2222:127.0.0.1:22 the_public_ip_of_machine_B

Esto abrirá el puerto 2222 en machineB, y reenviará cualquier tráfico en ese puerto hacia sí mismo, al puerto 22. Tenga en cuenta que esto escuchará en todas las interfaces, incluida la pública, por lo que es posible que desee proteger el puerto número 2222 (pero probablemente tenga un firewall activado machineBde todos modos). Mientras este túnel esté activo, puede conectarse mediante SSH machineBal puerto 2222, y esto lo llevará a machineA. Dado que machineBy machineCestán en la misma subred, puede iniciar sesión machineAen machineCun solo paso.

Si no tiene acceso root en machineB, entonces el proceso es el mismo, con la excepción de la dirección de escucha. Si GatewayPortsse establece en no(que es el valor predeterminado), entonces el primer argumento ( 0.0.0.0) simplemente se ignorará y la dirección de escucha estará vinculada a 127.0.0.1. En este caso, aún puede usar el comando anterior y el reenvío funcionará igual, pero el puerto abierto no estará disponible desde ningún otro lugar que no sea machineB. Por lo tanto, debe ingresar SSH machineBy luego SSH al localhostpuerto 2222, que lo llevará a machineA.

Sin embargo, es posible que desees considerar el uso de algo más sólido, como una VPN.

información relacionada