Solución 1:
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. Reemplazando -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 ejecución para poder ingresar más tarde desde un sitio remoto, 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 [email protected]_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 interrumpirá 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 el de su distribución. equivalente, de modo que siempre se inicia en el arranque y se reinicia cuando sale por algún motivo que no sea el apagado del sistema (o puede ejecutarlo desde un script de shell que se repite infinitamente, pero init o daemontools son soluciones más limpias).
Solución 2:
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 arreglar esto cambiando el 22 a un valor diferente. Puede verificar si un puerto está libre ejecutando:
# netstat -lep --tcp
Esto enumera todos los enchufes de escucha, por lo que si el puerto no está en la lista, entonces es gratis.
Solución 3:
Estoy usando el comando lsof -i :PortNumber para verificar si el puerto está libre:
# lsof -i :2272
si el puerto está libre, no verá nada en la salida.