Aprende a configurar VNC Server en Debian 8

 07/Sep/2017 -   Sistemas

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 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 su funcionamiento. Si estáis familiarizados con otro tipo de entorno, como Gnome o KDE, podéis hacer uso de él.

En los siguientes pasos, aprenderemos a configurar un servidor que 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 que hemos preparado, asegúrate de que cumples con todos estos 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.

Instalando VNC y XFCE

Para llevar a cabo la instalación de este software, lo primero será actualizar la lista de paquetes de nuestro servidor:

apt-get update

A continuación, realizaremos el upgrade de esos paquetes para tener acceso a las últimas versiones:

apt-get -y upgrade

Luego, instalaremos tightvncserver y XFCE4, con algunos add-ons y un tema:

apt-get install xfce4 xfce4-goodies gnome-icon-theme tightvncserver

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 desea acceder a la web desde su conexión VNC:

apt-get install iceweasel

Creando un usuario VNC

En este paso, veremos cómo crear un usuario para llevar a cabo las conexiones desde VNC en vez de utilizar el usuario root. De esta forma, estaremos mejorando la seguridad de nuestro servidor.

Crearemos un usuario de nombre vnc mediante la ejecución del siguiente comando:

adduser vnc

A continuación instalaremos sudo ejecutando la siguiente instrucción:

apt-get install sudo

Añadiremos nuestro nuevo usuario vnc al grupo sudo para que este nuevo usuario pueda ejecutar instrucciones de root:

gpasswd -a vnc sudo

Por último, empezamos a utilizar nuestro nuevo usuario creado:

su - vnc

Iniciando y parando 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, que será la que tendremos que utilizar cuando queramos conectarnos. También podemos crear otra contraseña de sólo visita, es decir, los usuarios podrán ver la pantalla del escritorio pero no podrán interactuar con ella.

Hecho esto, deberemos ver por 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 llevará a cabo mediante el puerto 5901. La segunda conexión será en el puerto 5902 y así sucesivamente.

Si queremos detener la conexión VNC, deberemos ejecutar la siguiente instrucción desde 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 detenga el servidor ahora, pero estamos incluyendo el comando stop para referencia.

Conectando desde un cliente VNC

Una vez realizado todos los pasos anteriores, podremos conectarnos a nuestro servidor VNC. Para ello, tendremos que abrir un cliente VNC que variará dependiendo del 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, debemos ingresar la dirección “vnc://ipservidor:5901”. A continuación, deberemos indicar la contraseña que acabamos de configurar para nuestra conexión VNC en un paso anterior.

Debian VNC

Desde este momento, ya puedes empezar a utilizar tu escritorio de forma remota.

Creando 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 puede ser de gran utilidad para iniciar y detener su servidor VNC. Para ello, lo primero será matar el proceso actual:

vncserver -kill :1

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, deberemos pegar el siguiente 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 servidor VNC 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 que debe hacer para iniciar, detener o reiniciar el servicio.

sudo nano /lib/systemd/system/myvncserver.service

Sobre ese fichero, debemos copiar el siguiente código que os dejamos a continuación:

[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. Utilice 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

Mejorando 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 conseguir esto, deberemos 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 servidor VNC 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.

putty tunnel

En el campo Source port tendremos que indicar el puerto de conexión, que como ya hemos comentado, será el 5901. En el campo Destination escribiremos localhost:5901. A continuación pulsaremos sobre el botón Add.

putty session

Después de esto, tendremos que irnos a la sección Session del menú de la izquierda. En el apartado Host Name (or IP address) indicaremos la dirección IP a la que nos conectaremos.

putty session

Por último, tendremos que pulsar sobre el botón Open para realizar la conexión. Por último, en nuestro VNC viewer tendremos que indicar localhost::5901 para mantener la conexión SSH viva en segundo plano.

vnc viewer

Sistema operativo OS X

En el caso de que utilicemos el sistema operativo de Apple, lo que tendremos que hacer será ejecutar la siguiente instrucción en el terminal.

ssh vnc@your_server_ip -L 5901:localhost:5901

Si hemos seguido todos los pasos de este artículo, ya podemos utilizar un escritorio remoto compartido en tu servidor con Debian 8.