Túnel de puerto seguro a través del host intermedio

23

Estoy buscando enrutar un puerto para VNC de regreso a mi casa aquí. Tengo que saltar sobre un único host para luego saltar a mi máquina de trabajo real.

  • sittinghere será mi máquina local
  • hopper será por el salto intermedio que necesito hacer
  • overthere será la máquina de trabajo remota

Puedo hacer esto a SSH en mi máquina de trabajo:

ssh -t hopper "ssh -t overthere"

Me gustaría utilizar el reenvío de puertos para reenviar el puerto remoto 5900 overthereal puerto local 5900 sittinghere. Sin embargo, preferiría poder hacerlo sin vincular abiertamente un puerto hopperya que cualquiera en esa máquina podría conectarse a mi conexión VNC.

¿Hay alguna forma de reenviar ese puerto a mi máquina local de forma segura sin que nadie pueda acceder a él hopper?

Naftuli Kay
fuente
¿Qué cliente VNC estás usando?
slm

Respuestas:

18

Uso de la capacidad nativa de SSH para reenviar puertos. De sittinghereejecutar:

 ssh -v -N -L 5900:overthere:5900 user@hopper

Apunte a su cliente VNC localhost:5900y el tráfico se canalizará a overthere:5900través de la conexión SSH establecida enhopper

Arroyo
fuente
1
AFAIK, esta solución no lo ayudará si 5900 solo está vinculado a la interfaz local (127.0.0.1), como sucede con el túnel hopper, y luego hopperreenvía todo el tráfico overthere:5900. Si overthere:5900está escuchando 0.0.0.0o la interfaz dada, entonces funcionará, pero no si está escuchando 127.0.0.1.
Naftuli Kay
18

Terminé usando algunos ~/.ssh/confighacks SSH para que esto suceda:

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

Lo que esto hace es que cuando intento conectarme ssh overtheredesde sittinghere, se conecta hoppery luego conecta la conexión SSH al puerto 22 overthere(es decir: SSH encendido overthere).

Esto tiene algunos efectos secundarios increíbles:

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

Todo funciona de maravilla y, por lo que puedo decir, 5900 no está abierto hopper, solo se reenvía directamente de overtherea sittinghere.

Naftuli Kay
fuente
Por cierto, debería haberlo preguntado antes en los comentarios, pero la solución con la que tropezaste salió directamente de la página de manual de x11nvc 8-). Lo siento, no pensé en preguntar qué servidor VNC estaba usando.
slm
Esto me asusta mucho, ¡pero definitivamente funciona!
Dale Anderson el
1
En algunas distribuciones de Linux (por ejemplo, Ubuntu 14.04), netcat-openbsd está instalado de forma predeterminada. En este caso, este truco puede no funcionar. Para solucionar este problema, primero debe instalar el paquete netcat-traditional ( apt-get install netcat-traditional -y). Luego, debe especificar explícitamente el nctipo en el archivo de configuración (reemplazándolo nccon nc.traditional).
VeLKerr
@ Naftuli: ¡Genial!
desapareció
1
@AlexanderPozdneev netcat .
taylorthurlow
1

Puede reenviar un puerto desde el sittinghereque overthere's puerto SSH a través hopper. Entonces puede usar ese puerto para llegar overtheredirectamente desde sittinghere. En esta segunda sesión SSH, puede reenviar VNC o cualquier otro puerto que desee mientras hopperve solo una sesión SSH cifrada.

Primera sesión SSH:

ssh -f -N -L 7022:overthere:22 hopper

Ahora dígale al cliente SSH cómo puede llegar overthereagregando esta configuración a ~/.ssh/configonsittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

Segunda sesión de SSH:

ssh -f -N -L 5900:localhost:5900 overthere

O simplemente una sesión SSH interactiva regular sin el túnel de puerto VNC:

ssh overthere

Si no desea molestarse en agregar líneas ~/.ssh/config, puede decirle cómo conectarse overtheredesde la línea de comandos:

ssh -p 7022 hopper

... pero sin el HostKeyAliasSSH no verificará overtherela huella digital de la llave correctamente.

Todas las líneas de comando deben ejecutarse desde sittinghere.

Por cierto, creo que probablemente no necesites usar sshla -topción.

Celada
fuente
1

Primero conecte la tolva mientras hace un túnel entre el trabajador y la computadora personal.

ssh -f ismail@hopper -L 2222:overthere:22 -N

luego haga ssh ro por allí con el túnel vnc

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

Ahora puedes conectarte con vnc. Por cierto, cambie la configuración de vnc para escuchar localhost

ibaydan
fuente
0

Si está utilizando el cliente VNC vncviewerdesde la línea de comando, puede usar el -viaconmutador para indicarle que haga un túnel user@hostantes de conectarse al servidor VNC de otro host.

Ejemplo

$ vncviewer -via user@host localhost:0

También puede usar vinagrepara conectarse a través de un túnel SSH, así a través de la GUI. Para hacerlo, configure su conexión de manera similar a través del diálogo de conexión en vinagre:

              ss # 1

Lo que resultará en su conexión, tunelizada a través del host del túnel SSH.

    ss # 2

Referencias

slm
fuente
0

El siguiente comando también debería funcionar perfectamente

ssh -f -N -J hopper overthere -L 5900:localhost:5900

Se probó con parámetros adicionales para conectar el servidor PostgreSQL en postgres-serverun puerto personalizado ( -pconmutador) y también con el uso de un nombre de usuario personalizado.

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

Como puede ver, la solución es simple y no requiere ningún cambio de configuración de ssh ni pasos intermedios.

SimonB
fuente