VNC (Virtual Network Computing) es un sistema que permite a los usuarios conectarse de forma remota a equipos e interactuar con su escritorio gráfico. Por medio del VNC, se puede interactuar con los elementos gráficos del escritorio, ya sea por medio del teclado o del ratón. VNC Server es de gran utilidad cuando es necesario disponer de un entorno gráfico instalado en el servidor.
A lo largo de este tutorial, utilizaremos XFCE, ya que se trata de un escritorio ligero que no requiere de muchos requisitos para funcionar. Si estás familiarizado con otro tipo de entorno, como Gnome o KDE, también puedes usarlo. En los siguientes pasos aprenderemos a configurar un servidor de correo bajo Debian 8, instalar el entorno de escritorio XFCE y conectarlo por medio de VNC. Además, crearemos un guión de inicio para VNC Server y lo protegeremos a través de SSH.
Prerrequisitos
Antes de seguir leyendo este tutorial, asegúrate de que cumples con los siguientes requisitos. De no ser así, puede que tengas problemas a la hora de ejecutar todos y cada uno de los pasos:
- Servidor con Debian 8 instalado y acceso root.
- Disponer de al menos 512 MB de RAM para la ejecución de VNC y XFCE.
- Cliente VNC instalado para poder conectarse al servidor.
- SSH para establecer una conexión segura. En nuestro caso, utilizaremos PuTTY para Windows.
Instalar VNC y XFCE
Para llevar a cabo la instalación de este software, lo primero que tenemos que hacer es actualizar la lista de paquetes de nuestro servidor:
apt-get update
Después realizaremos el upgrade de esos paquetes para tener acceso a las últimas versiones:
apt-get -y upgrade
Instalaremos tightvncserver y XFCE4, con algunos add-ons y un tema:
apt-get install xfce4 xfce4-goodies gnome-icon-theme tightvncserver
Luego, como por defecto no dispone de ningún navegador instalado, podemos llevar a cabo la instalación de iceweasel —que es una versión de Mozilla Firefox para Debian— si deseamos acceder a la web desde la conexión VNC:
apt-get install iceweasel
Crear un usuario VNC
En este apartado explicaremos cómo crear un usuario para llevar a cabo las conexiones desde VNC en vez de utilizar el usuario root. De esta forma mejoraremos la seguridad de nuestro servidor. Para empezar, crearemos un usuario de nombre «vnc» mediante la ejecución del siguiente comando:
adduser vnc
Una vez creado el usuario, instalamos «sudo» ejecutando la siguiente instrucción:
apt-get install sudo
Después añadimos nuestro nuevo usuario vnc al grupo sudo para que este nuevo usuario pueda ejecutar instrucciones de root:
gpasswd -a vnc sudo
Por último, empezaremos a utilizar nuestro nuevo usuario creado:
su - vnc
Iniciar y parar el servidor VNC
Por medio de nuestro nuevo usuario vnc podemos iniciar nuestro servidor VNC y probar nuestra conexión. Para iniciar el servidor ejecutaremos lo siguiente:
vncserver
Al ser la primera vez que ejecutamos el servidor, se nos pedirá que establezcamos una contraseña. Esta será la que tendremos que utilizar cuando queramos conectarnos. También podemos crear otra contraseña para invitados. De modo que los usuarios puedan ver la pantalla del escritorio pero no puedan interactuar con ella. Hecho esto, debemos ver en la pantalla algo parecido a lo que os dejamos a continuación:
xauth: file /home/vnc/.Xauthority does not exist New 'X' desktop is vnc:1 Creating default startup script /home/vnc/.vnc/xstartup Starting applications specified in /home/vnc/.vnc/xstartup Log file is /home/vnc/.vnc/vnc:1.log
Por defecto la primera conexión VNC se realiza mediante el puerto 5901. La segunda conexión, en el puerto 5902 y así sucesivamente. Si queremos detener la conexión VNC, tenemos que ejecutar la siguiente instrucción desde la línea de comandos:
vncserver -kill :1
El número «1» hace referencia a la conexión que queremos cerrar en caso de tener varias conexiones abiertas. De forma predeterminada, las conexiones VNC se sirven en puertos que comienzan en 5901 para la primera pantalla. Su segunda pantalla será servida en el puerto 5902, etc. No detengas el servidor ahora, solo incluimos el comando stop a modo de referencia.
Conectarse desde un cliente VNC
Una vez realizados todos los pasos anteriores, ya podremos conectarnos a nuestro servidor VNC. Para hacerlo, tenemos que abrir un cliente VNC, que variará según el sistema operativo que utilicemos. En el caso de Windows, podemos utilizar UltraVNC. En OS X, se puede utilizar la aplicación integrada de «Compartir pantalla» o acceder a esta aplicación por medio de Safari. Para ello hay que ingresar la dirección «vnc://ipservidor:5901». A continuación, hay que indicar la contraseña que acabamos de configurar para nuestra conexión VNC.
Desde este momento ya podemos empezar a utilizar nuestro escritorio de forma remota.
Crear un servicio Systemd para iniciar el servidor VNC automáticamente
En este apartado veremos cómo agregar nuestro VNC Server a Systemd. El uso de un servicio Systemd puede ser de gran utilidad para iniciar y detener el servidor VNC. Para ello, lo primero será matar el proceso actual:
vncserver -kill :1
Luego crearemos un sencillo script para gestionar y configurar nuestro servidor VNC de forma sencilla. Para crear este script utilizaremos nuestro editor de texto favorito.
sudo nano /usr/local/bin/myvncserver
En ese fichero que hemos creado hay que pegar el contenido que os dejamos a continuación. Ahí indicamos algunos parámetros de inicio.
#!/bin/bashPATH="$PATH:/usr/bin/"DISPLAY="1"DEPTH="16"GEOMETRY="1024x768"OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}" case "$1" instart)/usr/bin/vncserver ${OPTIONS};; stop)/usr/bin/vncserver -kill :${DISPLAY};; restart)$0 stop$0 start;;esacexit 0
Una vez guardado, debemos hacer que el script sea ejecutable:
sudo chmod +x /usr/local/bin/myvncserver
Gracias a este script podremos realizar las tareas de parada e inicio del VNC Server de forma sencilla mediante la ejecución de las siguientes instrucciones:
- Iniciar:
sudo /usr/local/bin/myvncserver
- Detener:
sudo /usr/local/bin/myvncserver stop
- Reiniciar:
sudo /usr/local/bin/myvncserver restart
Ahora podemos crear un archivo unitario para nuestro servicio. Estos archivos se utilizan para describir los servicios y decirle al equipo qué debe hacer para iniciar, detener o reiniciar el servicio.
sudo nano /lib/systemd/system/myvncserver.service
Sobre ese fichero hay que copiar el siguiente código:
[Unit]Description=Manage VNC Server on this droplet [Service]Type=forkingExecStart=/usr/local/bin/myvncserver startExecStop=/usr/local/bin/myvncserver stopExecReload=/usr/local/bin/myvncserver restartUser=vnc [Install]WantedBy=multi-user.target
Ahora podemos recargar «systemctl» y habilitar nuestro servicio:
sudo systemctl daemon-reloadsudo systemctl enable myvncserver.service
Con todo esto ya hemos habilitado nuestro nuevo servicio. Utiliza los siguientes comandos para iniciar, detener o reiniciar el servicio mediante el comando «systemctl»:
sudo systemctl start myvncserver.servicesudo systemctl stop myvncserver.servicesudo systemctl restart myvncserver.service
Mejorar la seguridad del servidor VNC con SSH Tunneling
De forma predeterminada las conexiones VNC no están cifradas. Por lo que es recomendable utilizar SSH Tunneling para proteger la sesión. Para conseguir esto tendremos que configurarlo de tal forma que únicamente responda a localhost. Para ello tenemos que añadir –localhost a la línea OPTIONS en el script de inicio que hemos creado en el paso anterior. En este caso, lo primero será detener el servicio VNC:
sudo systemctl stop myvncserver.service
Editaremos el archivo de configuración:
sudo nano /usr/local/bin/myvncserver
Cambiaremos esta línea:
. . . OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}" . . .
Y la reemplazaremos por esta otra:
. . . OPTIONS="-depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY} -localhost" . . .
Por último, reiniciaremos el servicio VNC:
sudo systemctl start myvncserver.service
Una vez hecho esto, ya podremos conectarnos a nuestro VNC Server de forma remota. Como ya comentamos al principio del artículo, dependiendo del sistema operativo que utilicemos lo haremos de una forma u otra.
Windows
En el caso de Windows, podemos utilizar PuTTY para realizar esta conexión. Para ello abriremos esta aplicación y en el menú de la izquierda iremos a la sección Connection -> SSH -> SSH -> Tunnels.
En el campo Source port tenemos que indicar el puerto de conexión, que como ya hemos comentado, será el 5901. En el campo Destination escribimos localhost:5901. Después pulsamos el botón Add.
Después de esto, nos vamos a la sección Session del menú de la izquierda. En el apartado Host Name (or IP address) indicamos la dirección IP a la que nos conectaremos.
Por último, tenemos que pulsar sobre el botón Open para realizar la conexión. En nuestro VNC viewer hay que indicar localhost::5901 para mantener la conexión SSH viva en segundo plano.
Sistema operativo OS X
En el caso de que utilicemos el sistema operativo de Apple, lo que tendremos que hacer es ejecutar la siguiente instrucción en el terminal.
ssh vnc@your_server_ip -L 5901:localhost:5901
Si has seguido todos los pasos de este artículo, ya podrás utilizar un escritorio remoto compartido en tu servidor con Debian 8.