18 votos

¿Cómo configurar ssh túnel ssh reenviar?

Tengo ordenador con Ubuntu detrás de router que no puedo configurar. Sin embargo quiero tener ssh acceso a ese equipo. Creo que es posible con ssh tunneling, pero no sé cómo hacerlo. Tengo otro servidor al que me gustaría configurar túneles. ¿Cómo hacerlo? ¿O tal vez tienes alguna otra idea como solucionar este problema?

He intentado:

ssh -N user@my_server -L 22/localhost/8090

pero me dice:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.

21voto

David Spillett Puntos 18934

Usted está pidiendo a escuchar en el puerto local 22 y conexiones hacia adelante a un sistema remoto del puerto 8090. Usted no puede hacer que la medida de su local de el puerto 22 es ya tomadas por su servidor SSH.

Creo que lo que se busca es remoto de reenvío. Reemplazando -L 22:localhost:8090 con -R 8090:localhost:22 dirá que el host remoto para escuchar en el puerto 8090 y reenviar solicitudes al servidor SSH.

Si usted está dejando la conexión a correr, así que usted puede conseguir más tarde desde un sitio remoto, entonces usted va a querer asegurarse de que la conexión no de tiempo debido a la inactividad mediante la adición de las opciones relevantes (-o TCPKeepAlive=yes o -o ServerAliveInterval=30)

Así que usted va a terminar con algo como:

ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30

También, si uno de los saltos de red entre usted y el servidor está abajo en cualquier momento, la conexión va a caer a pesar de cualquier KeepAlive opciones que especifique, por lo que es posible que desee agregar este comando para inittab, o mirar en el daemontools o paquete de su distribución equivalente , por lo que siempre se inicia en el arranque y se reinicia cuando sale por otro motivo, a continuación, cierre del sistema (o puede ejecutar desde un script de shell que se repite infinitamente, pero init o daemontools son limpiador de soluciones).

8voto

David Pashley Puntos 17011

La razón que no puede hacer esto es porque estás intentando reenviar el puerto 22 en el equipo local al puerto 8090 en el servidor remoto y algo ya se está ejecutando en el puerto 22 en el servidor local. Probablemente usted tiene un servidor SSH. Usted puede solucionar este problema cambiando el 22 a un valor diferente. Usted puede comprobar si un puerto está libre ejecutando:

# netstat -lep --tcp

Esta lista la escucha sockets, por lo que si no aparece el puerto, es gratis.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: