Cómo asignar un nombre de host al túnel SSH

16

Estoy usando ssh [email protected] -g -L 4321:localhost:28017 para establecer un túnel desde mi MacBook a mi servidor dedicado en mi proveedor de alojamiento. Funciona bien. Ahora quiero acceder a varios sitios de administración en el servidor remoto (una página de estado de MongoDB, una página de RabbitMQ, etc., todos en diferentes puertos). Todos ellos están vinculados a 127.0.0.1 en la máquina remota. ¿Cómo puedo modificar este comando ssh para

  • asignar un nombre al túnel y usar, por ejemplo, "my.tunnel.name" en mi navegador
  • para poder definir el puerto remoto en mi navegador; Me gustaría conectarme a my.tunnel.name:port, para poder llamar a los diferentes sitios

¿Es esto posible con ssh? He leído las páginas de manual y busqué en Google por dos días, pero parece que no funciona.

--editar 2012-06-01 23: 36-- Gracias a las respuestas y comentarios proporcionados, el reenvío de puertos ahora funciona

ssh [email protected] -D 4321

Puedo configurar esto como un proxy en mi navegador y el navegador tratará cualquier solicitud a localhost: anyport como si se hubiera realizado en el servidor remoto. Ahora no es necesario usar un nombre, ya que el navegador es solo para sitios de servidores remotos.

cerebro_en_trabajo
fuente

Respuestas:

12

Lo que describe no es posible. Pero todavía hay buenas noticias:

Sin embargo, lo que es posible es establecer una conexión dinámica con el servidor SSH. Esto abrirá un puerto en su computadora local al que puede apuntar la configuración de Proxy de su navegador y le permitirá usar el túnel como un servidor proxy. Pero debe escribir un nombre de host / ip y un puerto en el navegador como si el navegador se estuviera ejecutando en la máquina en la que se encuentra el servidor SSH.

El comando se ve así: ssh [email protected] -D 1234
Luego, apunta el proxy de tu navegador localhost:1234.

Entonces, si hace un túnel en el Servidor A y desea conectarse al servidor B, escriba en su navegador cualquier dirección que escriba en un Navegador que se ejecuta en el Servidor A. Si un navegador que se ejecuta en el servidor A no podría conectarse al Servidor B (si el el proceso en el Servidor B solo escucha en 127.0.0.1), entonces aún no pudo conectarse. Parece que solo tienes un servidor, pero quería estar seguro de que esto estaba claro.

Si solo tiene un servidor, haga un túnel con la conexión dinámica, configure su proxy. Entonces podrá escribir "localhost: 1234" (por ejemplo) en el navegador y se conectará al servicio que se ejecuta en el servidor remoto en el puerto 1234.

Nota al margen de seguridad: ¡Nunca, nunca, nunca configure un servidor donde la raíz pueda SSH! Grave falla de seguridad. Cree una cuenta de usuario normal (quién tiene permiso para su o sudo) y SSH como ese usuario.

Chris S
fuente
2
Está utilizando -L 1234 (reenvío de puerto local) cuando debería usar -D 1234 (reenvío de puerto dinámico). Y quizás también evite usar -g, -g significa que los hosts remotos pueden conectarse a su reenvío, que no es lo que desea si lo hace desde su estación de trabajo.
Mattias Ahnberg
Gracias Chris Ya lo intenté. No puedo usar el comando ssh con solo un puerto especificado. Devuelve un error: "Especificación de reenvío local incorrecta '1234'"
brains_at_work
@ matthias-ahnberg: Genial, eso funcionó. Con el reenvío dinámico, ahora puedo usar el puerto como proxy y host local: algunas llamadas de puerto se dirigen al servidor remoto.
brains_at_work
@MattiasAhnberg Wow, qué pelea mental. Gracias por la corrección.
Chris S
Seguí este proceso pero recibí el error "La conexión se restableció" en firefox.
rivu
23

Puede asignar un nombre utilizando el hecho de que su adaptador de bucle invertido básicamente responderá a cualquier dirección en la red 127.0.0.0/8.

Entonces, en lugar de vincular al puerto 4321, podría vincular a 127.1.2.3:4321. Luego, simplemente configure una entrada de host que asigne un nombre a la dirección de bucle invertido que utilizó para que mapee foo.bar 127.1.2.3.

En mi configuración SSH en mi estación de trabajo de administración, tengo muchos túneles configurados para que se unan a alguna dirección en el rango de bucle invertido, y tengo entradas en mi archivo host, por lo que abro muchos túneles en paralelo usando el mismo puerto y distingo entre ellos a través de nombre.

Entonces, si te conectas así

ssh [email protected] -g -L 127.1.2.3:4321:localhost:28017

Y su archivo de hosts tiene una línea como esta.

127.1.2.3 my.tunnel.name

Entonces debería poder conectarse a my.tunnel.name:4321 desde su máquina local.

Si tiene espacio adicional para direcciones IP en la red a la que está conectado su cliente ssh, puede incluso asignar una dirección secundaria a su interfaz Ethernet y usar una de sus IP reales, y luego configurar entradas en su DNS si desea que otros sistemas puedan para usar tu túnel SSH.

La opción -L -L [bind_address:]port:host:hostportle permitirá usar cualquier dirección IP válida en el sistema local para vincularse. También debe incluir la -gopción si desea que otros hosts puedan conectarse a través de su túnel ssh.

Zoredache
fuente
Tuve que agregar las ip a mi loopback en osx. ifconfig l0 alias 127.0.1.1 255.255.255.0De lo contrario, un gran consejo!
Desviados
1
Si no desea que se cree un shell, ejecute -Nal final del comando. De esta manera, es más fácil recordar que es un túnel, no cualquier conexión SSH.
mlissner
Al usarlo 127.1.2.3, tuve que hacer esto en mi macbook: ifconfig lo0 alias 127.1.2.3 255.255.255.0que se agrega 127.1.2.3como una nueva dirección en la interfaz lo0.
Donn Lee
5

Cree un reenvío de puerto dinámico a nivel de aplicación (básicamente el proxy de calcetines) con su túnel SSH, y luego dirija sus aplicaciones a través de este. Para crear un túnel dinámico, conéctese de la siguiente manera:

ssh [email protected] -D 127.0.0.1:31337

Luego configure su aplicación para usar esto como un proxy SOCKSv5.

Si desea un nombre de host vinculado a esto, simplemente agregue /etc/hostsentradas que apunten a 127.0.0.1, pero una forma más bonita podría ser agregar 127.0.0.2 para el primer túnel, y una entrada de hosts para este, 127.0.0.3 para el segundo túnel y una entrada de host separada para este, etc. Si agrega alias para 127.0.0.1, ¡a veces este alias aparecerá en otras búsquedas de comandos de localhost que pueden ser confusos!

Para usar esto sin problemas en un navegador web, puede usar un complemento proxy, como ejemplo, estoy a favor del navegador web Chrome y para este uso un complemento llamado Proxy Switchy!. Puede descargarlo aquí:
https://chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

En la configuración de este complemento, puedo definir varios proxies separados, y luego vincular expresiones regulares de hosts / URL para usar ciertos proxies, de esta manera siempre se me redirigirá correctamente a través de los túneles correctos sin tener que cambiar manualmente. ¡Avíseme si necesita más aclaraciones sobre alguno de los pasos!

Mattias Ahnberg
fuente
Gracias por el consejo adicional. Como también uso Chrome, no tengo que mantener FireFox abierto también.
brains_at_work