Administración remota de un escritorio GNU/Linux

Hace mucho tiempo que conozco la aplicación VNC y sus variantes (TightVNC), te permiten acceder al escritorio de otro ordenador a través de cualquier red. Algo bastante similar a lo que se consigue nativamente con el servidor/cliente XFree86 o X.Org.

En el caso de VNC para MS Windows, accedes al escritorio en el que se encuentra el usuario actualmente, por tanto te permite mover su raton, configurarle lo que sea necesario, etc… Una herramienta perfecta para la administración remota y para solucionar problemas a los usuarios sin tener que desplazarse físicamente.

En el caso de VNC para GNU/Linux, no se accede directamente al escritorio del usuario que este en dicha máquina, sinó que se accede a un escritorio aparte. Esto implica que si un usuario te llama indicandote que tiene problemas por ejemplo con su fondo de pantalla, no puedes usar VNC para ver su pantalla e intentar arreglar el problema. Para aquellos que entiendan el funcionamiento de las X, si tenemos un usuario utilizando el escritorio y un servidor VNC en la misma máquina cada uno escucharia por un puerto diferente:

  • Escritorio del usuario – localhost:0
  • VNC Server – localhost:1

Por tanto, en este caso no puede utilizarse esta aplicación de la misma forma que si trabajasemos con MS Windows, una verdadera lástima… hasta que apareció gemsvnc!!

Gemsvnc es un servidor VNC que utiliza el escritorio en el cual ha sido ejecutado el programa para permitir el acceso remoto, de forma que basta con entrar en nuestro escritorio (no importa si es GNOME, KDE…) abrir una consola y ejecutar gemsvnc. Desde otro ordenador conectado en red ejecutariamos “vncviewer servidor:0” y se nos abriria una ventana mostrandonos el escritorio remoto, podriamos controlar el puntero del ratón y escribir lo que sea necesario (curiosamente he podido comprobar que a mi no me funciona el $ remotamente, si pulso shift+4 me escribe un 4 y no un $).

Os voy a explicar como podemos configurarlo en Gentoo para que gemsvnc este siempre en marcha y pida password para poder establecer la conexión. Vamos a instalar gemsvnc y tightvnc en el sistema con ’emerge gemsvnc tightvnc’, gemsvn nos servirá como servidor y tightvnc como cliente y para crear el password del servidor.

Una vez instalado vamos a crear el password para permitir el acceso:

# vncpasswd /etc/gemsvnc.passwd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

Esto nos creará el archivo ‘/etc/gemsvnc.passwd’ con el password que hayamos indicado encriptado, respecto al password para “view-only” no es necesario indicarlo ya que gemsvnc lo ignora y no permite esa funcionalidad.

A continuación haremos que en el gestor de login GDM se arranque automáticamente gemsvnc, editamos el archivo ‘/etc/X11/gdm/Init/Default’ y añadimos al final del mismo:

...
killall gemsvnc
/usr/bin/gemsvnc -runforever -quiet -rfbauth /etc/gemsvnc.passwd &
exit 0

Yo utilizo GDM, los que utiliceis otros como KDM tendreis que averiguar que fichero cambiar o donde especificar lo que querais que se ejecute antes de iniciar la sesión. La ventaja de hacer que en este punto se arranque gemsvnc es que podremos acceder remotamente al login y entrar nosotros mismos en la sesión del usuario, no es necesario esperar a que el usuario del PC lo haga.

Si mientras realizabamos la configuración estabamos logeados en el escritorio del PC que queremos activar el servidor, tendremos que terminar la sesión y volver a entrar. A malas también podeis probar a reiniciar, aunque en principio no es necesario.

Ahora podemos irnos al segundo PC conectado en red, instalar tightvnc (emerge tightvnc) e intentar conectarnos al escritorio remoto con:

vncviewer 192.168.0.3:0

La IP es de ejemplo, puede ser también un nombre. Después de aparecer una ventana preguntando el password, se mostrará una nueva ventana desde la cual tendremos acceso al escritorio remoto.

Tened cuidado porque nada viaja encriptado, si estais en una red insegura cualquiera podria ver vuestro password. Una alternativa es utilizar los tuneles SSH para que los datos viajen encriptados, para esto es necesario tener un servidor SSH configurado en la máquina que tiene instalado gemsvnc. Desde el otro PC ejecutariamos en una consola:

$ ssh -L 2000:servidor:5900 user@servidor -N

Y en otra:

$ vncviewer localhost:2000

El primer comando crea un tunel encriptado entre nuestra máquina y el servidor, los datos que enviemos a nuestro puerto 2000 irán a parar al puerto 5900 del ‘servidor’ (tb podria ser una IP) y para esto utilizaremos nuestro usuario “user” del servidor “servidor” (el mismo que el anterior). Por ese motivo despues nos conectamos al puerto 2000 de localhost. El resto del funcionamiento es exactamente igual, la única pega es que al añadir encriptación es necesario más ancho de banda y por tanto es posible que vaya más lento.

He probado todo lo aqui expuesto en una red local ethernet 100Mbps y funciona de maravilla tanto de forma encriptada con SSH como de forma directa, evidentemente no es lo mismo que estar en la escritorio real pero para tareas puntuales de administración puede ser muy útil. También lo he testeado entre dos ordenadores conectados con un ADSL 256 Kbps de bajada y 128 Kbps de subida, de forma encriptada con SSH es tremendamente lento y prácticamente inusable, en cambio sin encriptación a pesar de la lentitud puede ser útil también. Para esta aplicación lo que se necesita es tener una buena subida y en nuestro caso solo es de 128 Kbps.

Actualización He descubierto que es posible conectarse a escritorios remotos regulando la calidad de la imagen y por tanto optimizando el uso del ancho de banda, por ejemplo la peor calidad y el menor consumo de ancho de banda se consigue con:

vncviewer -encodings Tight -compresslevel 9 -quality 0 servidor:0

Es posible regular la calidad modificando los valores de los parámetros y así adaptarlos a nuestras necesidades.

Como he observado que gemsvnc peta de vez en cuando, no podemos fiarnos simplemente de que se ejecute automáticamente con el GDM así que lo mejor es tener un sencillo script en el sistema que también facilitará la vida a los usuarios más noveles:

#!/bin/bash

CHECK=`ps aux|grep gemsvnc |grep runforever`

if [ $? -eq 0 ]; then
   echo "ERROR: Ya hay un escritorio remoto en ejecución."
   echo "Si desea pararlo ejecute 'killall gemsvnc' como root."
   exit
fi

export DISPLAY=:0
killall gemsvnc &> /dev/null
echo "Escritorio remoto (VNC) en marcha!"
echo "Pulsar CTRL+C para terminar..."
/usr/bin/gemsvnc -runforever -quiet -rfbauth /etc/gemsvnc.passwd

Guardar este script en “/usr/local/bin/escritorio-remoto” y darle permisos de ejecución “chmod 755 /usr/local/bin/escritorio-remoto”. Tened en cuenta que quien ejecute este script también debe tener permisos para acceder al fichero /etc/gemsvnc.passwd.

2 thoughts on “Administración remota de un escritorio GNU/Linux

Leave a Reply

Your email address will not be published. Required fields are marked *