Revista Informática

Cómo hacer X11 forwarding con ssh en Linux

Publicado el 02 febrero 2016 por Drassill
Hoy quiero veniros con un breve pero útil articulo relacionado con un servicio que ya he mencionado con anterioridad: ssh.  Este gran servicio de acceso remoto permite el control remoto de otra máquina, tiene por defecto un breve defecto y es que no es capaz de ejecutar servicios gráficos (como por ejemplo Firefox o Libreoffice) remotamente. Esto es debido a que la consola no es capaz de mostrar aquello que está diseñado para mostrarse en el entorno gráfico. Aún así, en caso de estar ejecutando accediendo desde un equipo Linux con entorno gráfico a otro con las mismas características, es posible exportar el display a nuestro escritorio. Esto se logra mediante una técnica muy útil y sencilla llamada X11 ForwardingX11_ForwardingGracias a que ambas máquinas están unidas mediante el protocolo seguro SSH y a que ambas comparten el mismo servidor gráfico (X11), puede transferirse el display de un servidor X11 a otro mediante red, lo cual puede sernos realmente útil en algunas ocasiones. Es importante ser conscientes de que todo lo ejecutado y exportado a nuestro escritorio, consumirá los recursos de la máquina remota, con lo que es importante intentar no abusar en demasía de esta funcionalidad con el fin de no dejar el equipo remoto sin recursos. 
Para ello es necesario modificar la configuración del servidor ssh para que sea capaz de transferir el display del servidor X11. Esto puede parecer complicado, pero en realidad es tan sencillo como acceder al fichero de configuración de SSH /etc/ssh/sshd_config. En él habría que modificar el parámetro X11Forwarding  (cuyo valor por defecto es no) a yes:
X11Forwarding yes
Aplicando el cambio es necesario reiniciar el servidor ssh:
/etc/init.d/ssh restart
Ahora es necesario conectarnos pos SSH al servidor remoto, pero en este caso es necesario añadir un ligero parámetro para poder realizar el forwarding del servidor gráfico. Este parámetro es -X, con lo que si deseásemos establecer una conexión con dicha posibilidad con un equipo que tuviese la ip 192.168.1.3 (por ejemplo), habría que escribir:
ssh-X ivan@192.168.1.3
Ahora podríamos ejecutar una aplicación gráfica sin problema alguno, tal y como podríamos hacer en el entorno remoto. Es decir que podríamos ejecutar libreoffice de forma remota sin impedimento alguno y disfrutando con la misma maniobrabilidad que si lo ejecutásemos localmente:
/usr/bin/libreoffice
Esta es la forma más segura de hacer un X11 forwarding ya que no solo exporta el display, sino que lo hace de forma segura. El problema es que a veces la velocidad de conexión no es la idónea; ya sea debido a una mala configuración de red, o a que ésta se encuentra saturada. En estos casos tenemos la posibilidad de que los paquetes que viajan de un lado a otro estén comprimidos, "aligerando" el peso de la conexión y haciéndola más veloz. Esto se logra mediante el parámetro -C (compressed) con lo que para realizar la misma conexión que antes tendríamos que escribir:
ssh-X-C ivan@192.168.1.3
Aún con los paquetes comprimidos, la mejora no siempre es palpable, y ahí uno tiene que valorar si es recomendable mejorar la velocidad de la red en general o si quiere aligerar todavía más la conexión. Existe la posibilidad de hacer que la conexión sea menos segura, con la ventaja de que ésta sea más rápida. Esto no es recomendable, pero a veces puede ser nuestra única opción, con lo que es recomendable tener consciencia de ésta. El servidor SSH tiene la posibilidad de habilitar exportaciones del servidor X11 de confianza, saltándose algunos protocolos de seguridad y aligerando significativamente la conexión a expensas de la seguridad de ésta. 
Esto se consigue volviendo al fichero de configuración /etc/ssh/sshd_config del servidor y añadiendo esta línea al fichero:
ForwardX11Trusted yes
Obviamente sería necesario reiniciar el servicio ssh para aplicar el cambio, pero tras dicho cambio ya tendríamos la posibilidad de conectarnos de forma "insegura". Esto lo lograríamos mediante el parámetro -Y en vez del parámetro -X, con lo que para tener la conexión más rápida (e insegura) de todas usaríamos el siguiente comando:
ssh-Y-C ivan@192.168.1.3
Espero que os haya resultado útil; yo personalmente la he encontrado especialmente valioso en numerosas ocasiones en las que he querido ejecutar cierto servicios, como Firefox, remotamente.
Saludos.

Volver a la Portada de Logo Paperblog