4 votos

Túnel SSH con dos saltos

Me gustaría construir un túnel ssh desde mi dispositivo Android (llamémoslo A) en el puerto MMM a una máquina C en el puerto NNN. SIN EMBARGO, A y C no están conectados directamente. Solo están conectados a través de la máquina B (que también está ejecutando un servidor ssh). Por último, el puerto NNN solo está abierto localmente en la máquina C (que también está ejecutando un servidor ssh).

Entonces, con openssh en Unix, puedo usar la línea de comandos de ssh o el argumento ProxyCommand en .ssh/config para lograr esto:

Host C-tunnel
   HostName C
   Port 22
   Use username
   IdentityFile ~/.ssh/myidentityfileforC.pem
   ProxyCommand ssh -e none -i /.ssh/myidentityfileforB.pem username@B nc -w 120 %h %p 2> /dev/null

Luego puedo configurar un túnel directo desde mi localhost a C:NNN (a través de la conexión anterior).

¿Hay alguna aplicación para Android que admita algo similar? Probé connectbot y ssh autotunnel. Este último estuvo cerca, ya que pude configurar un túnel de A a B y luego otro de A a C (a través de la conexión tunelizada A->B), pero al iniciar este último, ambos se cayeron. Configurar solo el primer túnel y luego usar connectbot me permite conectarme a C a través de ssh, pero no puedo configurar un reenvío de puerto directamente a C:NNN.

¿Alguna sugerencia? ¿Hay una adaptación directa de openssh que me haya perdido?

0 votos

Quizás esto esté totalmente equivocado, ¿pero podrías usar una máquina virtual en la máquina B y crear un túnel desde allí hasta A?

0 votos

Si estuviera en control de la máquina B, eso podría ser posible. Sin embargo, no puedo abrir puertos en la máquina B (o si lo hiciera, no serían accesibles). Gracias.

0 votos

Oh, entiendo. ¡Buenas suerte! Tal vez alguien más experto pasará por aquí.

2voto

lurenzu Puntos 11

Me gustaría compartir información de que JuiceSSH tiene la función que estás intentando lograr con solo un clic. Estoy hablando de su función "conectar 'via' otras conexiones SSH." Incluso el reenvío de puertos local desde el segundo servidor a través de la primera conexión ssh también funciona.

1voto

cshelton Puntos 21

Fuera de Stack Exchange, también consulté a algunos colegas. Una sugerencia que tuvieron funcionó. En particular, en lugar de usar autotunnel de ssh para los túneles, utilicé connectbot para conectar y crear túneles. Se pueden superponer. La única desventaja es que dejo una terminal abierta.

Más específicamente:

  1. Utilizo connectbot para conectar con B (ssh, puerto 22) y luego añado un reenvío desde un puerto 2222 en A al puerto 22 en C. Dejo esta terminal abierta.
  2. Después hago una nueva conexión diferente al puerto 2222 en A (lo que abre una terminal en C) y añado reenvío de puerto desde el puerto 2NNN a "localhost:NNN" (que en realidad es C:NNN).

Ahora puedo conectarme a A:2NNN (mi localhost, puerto 2NNN) y llegar a C:NNN como si fuera local. Tengo que dejar las terminales abiertas, pero funciona lo suficientemente bien.

0voto

Tiago Puntos 101

Esto se basa en los comentarios de Shelton pero me confundieron, así que aquí te explicamos cómo hacer un salto "-J" usando ConnectBot, por ejemplo a través de algo como serveo:

  • Agrega una conexión al host de salto (por ejemplo serveo). Esto es simplemente un "hombre en el medio", y se usará para redirigir al host real. Por ejemplo: "usuario@serveo.net". Puedes desactivar "Iniciar sesión de shell".

    • Guarda la conexión a serveo.
    • "Mantén" la conexión a serveo en tu lista de hosts y elige editar reenvíos de puerto.
    • Agrega un nuevo reenvío de puerto. Tipo: "Local", puerto fuente: "2222", destino "alias:22". Esto abre localhost:2222 cuando se hace esta conexión a serveo, lo que reenviará/hará un salto a tu conexión al host de destino.
  • Agrega un nuevo host, que coincida con el reenvío de puerto. Por ejemplo "usuario@localhost:2222".

El flujo de trabajo de uso normal será ahora:

  • Conéctate al host de serveo. Esto iniciará el túnel. Ciérralo (pero no te desconectes) para que el túnel permanezca activo.
  • Conéctate al segundo host (localhost:2222). Esto pasará a través del túnel hasta tu host remoto. ¡Autentícate como de costumbre y listo!

0 votos

Gracias. Terminé usando ConnectBot como sugeriste. La necesidad de "hacer clic dos veces" es molesta, pero definitivamente funciona.

0 votos

¡Ah, acabo de darme cuenta de que tu respuesta era en realidad para tu propia pregunta! Terminé luchando un poco con esto, tu respuesta me ayudó a que el 90% funcionara, pero las últimas partes me confundieron un poco, así que pensé en agregar una respuesta en caso de que alguien más se encuentre con la misma confusión.

0 votos

Es un poco molesto, pero súper genial que esto funcione desde mi teléfono. ¡Ahora puedo activar alguna automatización mientras estoy en movimiento, fácil y rápido! :)

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X