Quiero poder conectarme directamente desde cualquier lugar a un Linux integrado (llamado C) que no tiene una dirección IP pública.
C puede configurar una conexión con el servidor (con SSH -R), y si ingreso por SSH al servidor, puedo ingresar por SSH al Linux integrado.
Sin embargo, me gustaría poder realizar SSH desde el cliente a C sin tener que realizar SSH primero en el servidor. (No puedo configurar una conexión con SSH -R desde C al cliente)
¿Es esto posible? Si es así, ¿cómo?
Respuesta1
Puedes hacer esto con bastante facilidad. Una forma es utilizar el reenvío de puerto remoto de SSH, mediante el cual C le dice al servidor que le reenvíe un puerto, algo como:
ssh -R 2222:localhost:22 server
Este comando, cuando se ejecuta desde C, le indicará al servidor que tome cualquier conexión al puerto 2222 y la reenvíe a C en el puerto 22.
Asimismo, puede configurar el reenvío de puertos en el servidor mediante reglas de firewall.
Respuesta2
Si desea poder conectarse al puerto reenviado, necesita cuatro cosas:
- Especifique la IP pública/el nombre de host del servidor como primer argumento
-R
; de lo contrario, escuchará solo enlocalhost
, al que obviamente no se puede acceder desde fuera del servidor. - Configure el servidor con
GatewayPorts
, lo que permitirá que los puertos reenviados sean accesibles desde el exterior. - Utilice el
-g
interruptor para permitir básicamente lo mismo desde el lado del cliente. - Abra el puerto
2222
en el firewall del servidor.
El comando puede verse así:
ssh -g -R server:2222:localhost:22 server