27 de Abril, 2005

Migrar una aplicación X11 por una sesión SSH

El otro día me lo comentaba Josefu, cómo encapsular X11 en una sesión SSH. Sabía que era fácil, pero no tanto :).

No obstante voy a puntualizar un pequeño detalle extra.

En mi caso, por ejemplo, mi desktop se encuentra detrás de un cortafuegos, así que tendré que hacer un túnel a ese servicio SSH dentro de la red local.

Migrar una aplicación a otro X11 es muy fácil. Ya expliqué como llevarse una aplicación gracias a la variable de entorno DISPLAY.

Recordemos que aquel método tenía un pequeño problema: la seguridad. Cualquier atacante con suficiente interés podría capturar el flujo de datos y ver también la salida de la aplicación que estábamos migrando, o peor aún: hacer un ataque de cubetas (man in the middle dicen por ahí).

Afortunadamente SSH nos permite encapsular ese flujo en una sesión, de forma que la información viaja cifrada de un extremo a otro y no nos tenemos que preocupar por la hipotética (y en realidad poco probable) posibilidad de un ataque.

La única condición es que el servicio SSH al que conectamos permita encapsular las aplicaciones X11. Para ello miramos que /etc/ssh/sshd_config tenga:

...
X11Forwarding yes
X11DisplayOffset 10
...

En realidad solo es importante la primera linea, ya que la segunda es para especifiar un DISPLAY con número alto que no interfiera con otros existentes.

Ahora el cliente donde queremos ver la aplicación remota tendrá que que conectar con la opción -X:

$ ssh -X usuario@host.remoto.dom

Podemos emplear -C para habilitar la compresión (un extra de OpenSSH).

Ahora ejecutamos la aplicación X11 remota en ese shell abierto, sin tocar la variable de entorno DISPLAY ni dar permisos como hacíamos antes, y la aplicación aparecerá en nuestro X11 local.

Pero como he comentado, mi estación de trabajo se encuentra detrás de blackshell, así que la conexión directa con SSH no es posible.

Para solucionarlo vamos a hacer un túnel del cliente a la estación de trabajo empleando el cortafuegos, que también tiene servicio de SSH:

$ ssh -L 10000:192.168.0.1:22 -N usr@blackshell.usebox.net

En el ejemplo intento hacer un túnel con el usuario usr en blackshell.usebox.net desde mi posición actual hasta 192.168.0.1 (que es mi estación en la red local, a la que tiene acceso blackshell).

Nunca he explicado túneles SSH, pero es bastante sencillo. Un extremo queda en la máquina local, en 127.0.0.1, en el puerto indicado (10000), y el otro en la máquina remota (192.168.0.1) en el puerto al que queremos conectar (22; que es SSH). El tráfico de la máquina local a blackshell.usebox.net estará cifrado, y el resto del trayecto hasta la máquina de la red local será como si estuviéramos nosotros situados en el cortafuegos (sin cifrar, pero veremos que en este caso no importa).

Entonces queda claro como sería la conexión con el desktop realmente:

$ ssh -C -X usuario@127.0.0.1 -p 10000

Es tan excitante para la administración como los agujeros de gusano para la CF, ¿no?

De esta forma, conectando localmente, esa conexión se transporta cifrada hasta el SSH de mi escritorio, que al ser una sesión secure shell, a su vez estará cifrada dejando cubierto el tramo en la red local que no quedaba asegurado.

El protocolo de X11 es más pesado que otros diseñados específicamente para conexiones de poca calidad, como VNC o NX, pero tiene la ventaja de que siempre que usamos X11 ya lo tenemos disponible, con lo que es realmente sencillo de utilizar sin tener que instalar nada específico.

Anotación por Juan J. Martínez.

Hay 2 comentarios

Gravatar

Si no recuerdo mal, y perdona por no comprobarlo antes, esos tuneles tienen la pega de que se queda activa una sesion ssh con shell en pantalla. Si se sale de la shell se cierra el tunel.

por QuasaR, en 2005-04-28 00:47:34

Gravatar

Si se encapsula X11 sobre la sesión SSH, tendrás que mantener dicha sesión abierta. Pero tampoco puedo asegurarlo al 100% (por si hay una forma de evitar ese comportamiento).

por Juanjo, en 2005-04-28 01:07:45

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.