Le está pidiendo que escuche en su puerto local 22 y reenvíe las conexiones al puerto 8090 de un sistema remoto. No puede hacer eso, porque su puerto local 22 ya está ocupado por su servidor SSH local.
Creo que lo que estás buscando es el reenvío remoto. Reemplazar -L 22:localhost:8090
con -R 8090:localhost:22
le indicará al host remoto que escuche en el puerto 8090 y reenvíe las solicitudes a su servidor SSH.
Si deja la conexión en funcionamiento para poder ingresar más tarde desde un sitio remoto, entonces querrá asegurarse de que la conexión no se agote debido a la inactividad agregando las opciones relevantes ( -o TCPKeepAlive=yes
o -o ServerAliveInterval=30
)
Entonces terminarás con algo como:
ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30
Además, si uno de los saltos de red entre usted y el servidor está inactivo en algún momento, la conexión se cortará a pesar de las opciones de KeepAlive que especifique, por lo que es posible que desee agregar este comando a inittab, o buscar en el paquete daemontools o en su distribución equivalente, para que siempre se inicie en el arranque y se reinicie cuando salga por alguna razón que no sea el apagado del sistema (o podría ejecutarlo desde un script de shell que se repite infinitamente, pero init o daemontools son soluciones más limpias).
GatewayPorts Yes
a mi sshd_config me ayudó a abrir el puerto al público.La razón por la que no puede hacer esto es porque está intentando reenviar el puerto 22 en la computadora local al puerto 8090 en el servidor remoto y algo ya se está ejecutando en el puerto 22 en el servidor local. Lo más probable es que tenga un servidor SSH en ejecución. Puede solucionar esto cambiando el 22 a un valor diferente. Puede verificar si un puerto está libre ejecutando:
Esto enumera todos los enchufes de escucha, por lo que si el puerto no está en la lista, entonces es gratis.
fuente
Estoy usando el comando lsof -i: PortNumber para verificar si el puerto está libre:
Si el puerto está libre, no verá nada en la salida.
fuente