Escritorio remoto sobre túnel inverso SSH para reemplazar TeamViewer

14

Quiero abrir una sesión de escritorio remoto desde mi computadora portátil al escritorio sobre mi túnel SSH (inverso). Eso debería ser simple (o al menos factible), ¿verdad? Hasta ahora he estado usando Team Viewer para iniciar sesión en el escritorio remoto. Me gustaría lograr resultados similares sin Team Viewer.

Así es como se ve mi túnel SSH:

laptop--->nat--->middleman<--nat<--desktop

Todas las máquinas ejecutan Linux (principalmente Kubuntu 12.04 u OpenSuse 12.3). No puedo cambiar ningún puerto ni hacer ningún cambio de configuración en los enrutadores nat.

Describiré mi túnel SSH porque entender eso parece ser necesario para resolver el problema de VNC / escritorio remoto que es el corazón de mi pregunta. Con respecto a esta pierna:

middleman<--nat<--desktop

... así es como se establece:

autossh -M 5234 -N -f -R 1234:localhost:22 [email protected]

Con respecto a esta pierna:

laptop--->nat--->middleman

Puedo conectarme a un intermediario de la siguiente manera:

me@laptop:~$ ssh -i ~/.ssh/id_rsa admin@middleman  

Sin embargo, lo que realmente necesito hacer es conectarme directamente al escritorio, no al intermediario. Para hacer eso uso netcat ("nc") en el intermediario. En base a esto , parece que se requiere nc. Así que edito mi archivo de configuración SSH en la computadora portátil para usar ProxyCommand y nc:

me@laptop:~/.ssh$ nano config

Los contenidos son:

Host family_desktops
  ProxyCommand ssh middleman_fqdn nc localhost %p
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

Donde middleman_fqdnes como "middleman.com"

Luego solo me conecto al "escritorio" en un solo paso:

me@laptop:~$ ssh family_desktops -p 1234

(Obtuve este trabajo basado en la ayuda aquí y aquí y otras preguntas relacionadas que hice. He hecho un montón de preguntas sobre este tema porque he estado luchando con él durante muchas semanas).

Con esta conexión SSH alcanzo un shell completamente funcional en mi computadora con la etiqueta desktop. Perfecto.

Ahora solo necesito una solución de escritorio remoto tipo VNC (o TeamViewer) sobre este túnel SSH. ¿Cómo?

Esto es lo que he intentado hasta ahora:

intermediario <- nat <- escritorio

autossh -M 5235 -N -f -R 1235:localhost:5901 [email protected]

con esa conexión establecida:

x11vnc -autoport 5901 

Observo para asegurarme de que se conecta al puerto 5901, lo que hace.

laptop ---> nat ---> intermediario <- nat <- escritorio

laptop ~ / .ssh / config:

Host family_desktops
  ProxyCommand ssh -NL 5901:localhost:1235 middleman.com nc localhost 1235
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

Configuración del túnel:

me@laptop:~$ sudo ssh family_desktops

Cliente VNC:

connect to localhost:5901

Esto da un error de "servidor no encontrado"

He intentado una serie de variaciones en ProxyCommand, ninguna de ellas exitosa. Obviamente, estoy adivinando qué parámetros deberían estar en ProxyCommand y cuáles deberían estar en la línea de comando ssh. Puedo ver algunos problemas potenciales con mi configuración, pero no he podido averiguar qué hará que todo funcione.

PD Como se mencionó, he hecho varias preguntas sobre esto. Algunos de ellos me llevaron más cerca de la solución y forman la base de mi pregunta actual. Otras de mis preguntas anteriores sobre este tema solo muestran mi ignorancia e incapacidad para hacer la pregunta en la forma correcta. En este punto, esta pregunta actual representa mi mejor capacidad para indicar cuál es mi problema y cuál es mi solución deseada, pero algunas de mis otras preguntas todavía están abiertas. Aquí hay uno que es relevante.

MountainX
fuente
1
Nota al margen: no utilice los enlaces "aquí" o "esto" . Proporcione un nombre significativo para sus enlaces, por ejemplo, el título de la pregunta o la página web a la que se vincula.
Marco
¿No hiciste esta pregunta antes? unix.stackexchange.com/questions/82255/…
slm
@slm: vea algunos de los enlaces en mi pregunta. Son algunas de mis preguntas relacionadas. Todavía estoy tratando de lograr una solución y cada pregunta parece estar acercándome ...
MountainX
Esto parece increíblemente complicado. Utilizo el escritorio remoto de mi máquina con Windows 8 enviando SSH a una máquina también en la misma red que tiene un puerto abierto en el firewall.
Tim
@Tim este es un túnel SSH inverso y se requiere porque desktopestá detrás de un enrutador NAT y laptopestá detrás de un enrutador NAT.
MountainX

Respuestas:

3

¿Puedes intentar hacer el segundo paso sin hacer el nc? Es decir, haga el VNC solo con -L y -R. Creo que el problema es que su sesión de netcat se está conectando de nuevo a una ya abierta. Entonces, al hacer cosas de VNC, no use netcat.

prateek61
fuente
1

En lugar de ProxyCommand, debe establecer "gatewayports yes" para su intermediario sshd.conf.

  1. Luego tome el túnel remoto del escritorio al intermediario y abra el puerto tcp x en el intermediario y vnc en local.
  2. Luego tome el túnel local de la computadora portátil al intermediario abriendo el puerto vnc a su host local y tuneándolo a x.
  3. Luego, conéctese a localhost: vnc, por lo que irá a través del túnel local al intermediario y el túnel remoto a las computadoras portátiles vnc.

Después de hacerlo funcionar, obtenga más información sobre configuraciones más seguras de puertas de enlace.

Limalski
fuente