Cómo instalar y configurar VNC en Ubuntu 20.04

Introducción

Virtual Network Computing, o VNC, es un sistema de conexión remoto. Te permite usar tu teclado y mouse para interactuar con un entorno de escritorio gráfico en un servidor remoto.

Facilita la administración de archivos, software y configuraciones en un servidor remoto. También es más fácil para los usuarios que aún no se sienten cómodos con la línea de comandos.

En esta guía, configurarás un servidor VNC con TightVNC en un servidor Ubuntu 20.04 y te conectarás de forma segura a través de un túnel SSH. Luego, usarás un programa cliente VNC en tu máquina local para interactuar con tu servidor a través de un entorno de escritorio gráfico.

Prerrequisitos

Para completar este tutorial, necesitarás:

  • Un servidor Ubuntu 20.04 con un usuario administrativo no root y un firewall configurado con UFW. Para configurar esto, debes seguir nuestra guía de configuración básica de un servidor con Ubuntu 20.04
  • Una computadora local con un cliente VNC instalado. El cliente VNC que uses debe admitir conexiones a través de túneles SSH:
    • En Windows, puedes usar TightVNC, RealVNC o UltraVNC.
    • Para macOS, puedes usar el programa incorporado para compartir pantalla, o puedes usar una aplicación multiplataforma como RealVNC.
    • En Linux, se puede elegir entre muchas opciones, incluyendo vinagrekrdc, RealVNC o TightVNC.

Paso 1 – Instalación del entorno de escritorio y el servidor VNC

Por defecto, un servidor Ubuntu 20.04 no viene con un entorno de escritorio gráfico o un servidor VNC instalado, por lo que comenzarás por instalarlos.

Tienes muchas opciones cuando se trata del servidor VNC y el entorno de escritorio que elijas. En este tutorial, instalarás paquetes para el último entorno de escritorio Xfce y el paquete TightVNC disponible en el repositorio oficial de Ubuntu.

Tanto Xfce como TightVNC son conocidos por ser ligeros y rápidos. Esto ayudará a garantizar que la conexión VNC sea suave y estable incluso en conexiones de Internet más lentas.

Después de conectarte a tu servidor con SSH, debes actualizar tu lista de paquetes:

Ahora debes instalar Xfce junto con el paquete xfce4-goodies, que contiene algunas mejoras para el entorno de escritorio:

Durante la instalación, es posible que se te solicite que elijas un administrador de pantalla predeterminado para Xfce. Un administrador de pantalla es un programa que te permite seleccionar e iniciar sesión en un entorno de escritorio a través de una interfaz gráfica.

Solo usarás Xfce cuando te conectes con un cliente VNC, y en estas sesiones de Xfce ya habrás iniciado sesión como tu usuario Ubuntu no root. Entonces, para los propósitos de este tutorial, tu elección del administrador de visualización no es pertinente. Selecciona uno y presiona ENTER.

Una vez que se complete la instalación, debes instalar el servidor TightVNC:

Acceso VNC

A continuación, ejecuta el comando vncserver para establecer una contraseña de acceso VNC. Debes crear los archivos de configuración iniciales e iniciar una instancia del servidor VNC:

Se te pedirá que ingreses y verifiques una contraseña para acceder a tu máquina de forma remota:

La contraseña debe tener entre seis y ocho caracteres de longitud. Las contraseñas de más de 8 caracteres se truncarán automáticamente.

Una vez que verifiques la contraseña, tendrás la opción de crear una contraseña de solo lectura. Los usuarios que inicien sesión con la contraseña de solo lectura no podrán controlar la instancia de VNC con su mouse o teclado.

Esta es una opción útil si deseas demostrar algo a otras personas que usan tu servidor VNC, pero esto no es obligatorio.

El proceso crea los archivos de configuración predeterminados necesarios y la información de conexión para el servidor. Además, inicia una instancia de servidor predeterminada en el puerto 5901.

Este puerto se denomina puerto de pantalla y VNC lo denomina como :1. VNC puede iniciar varias instancias en otros puertos de pantalla, con :2 referencia al puerto 5902, :3 referencia a 5903, etc:

Ten en cuenta que, si alguna vez deseas cambiar tu contraseña o agregar una contraseña de solo lectura, puedes hacerlo con el comando vncpasswd:

En este punto, el servidor VNC está instalado y ejecutándose. Ahora configurémoslo para iniciar Xfce y darnos acceso al servidor a través de una interfaz gráfica.

Paso 2 – Configuración del servidor VNC

El servidor VNC necesita saber qué comandos ejecutar cuando se inicia. Específicamente, VNC necesita saber a qué entorno de escritorio gráfico debe conectarse.

Los comandos que ejecuta el servidor VNC al inicio se encuentran en un archivo de configuración llamado xstartup. Este se encuentra en la carpeta .vnc dentro de tu directorio de inicio. El script de inicio se creó cuando ejecutaste el comando vncserver en el paso anterior, pero creará el suyo propio para iniciar el escritorio Xfce.

Debido a que va a cambiar la configuración del servidor VNC, primero detén la instancia del servidor VNC que se ejecuta en el puerto 5901. Debes hacerlo con el siguiente comando:

La salida se verá así, aunque verás un PID diferente:

Antes de modificar el archivo xstartup, haz una copia de seguridad del original:

Ahora debes crear un nuevo archivo xstartup y ábrelo en un editor de texto, como nano:

Luego agrega las siguientes líneas al archivo:

La primera línea es un shebang. En archivos ejecutables de texto plano en plataformas *nix, un shebang le dice al sistema a qué intérprete pasar ese archivo para su ejecución. En este caso, estás pasando el archivo al intérprete de Bash. Esto permitirá que cada línea sucesiva se ejecute como comandos, en orden.

El primer comando en el archivo, xrdb $HOME/.Xresources le dice al framework de GUI de VNC que lea el archivo .Xresources del usuario del servidor. .Xresources es donde un usuario puede realizar cambios en ciertas configuraciones del escritorio gráfico, como colores de terminal, temas de cursor y representación de fuentes.

Iniciar Xfce

El segundo comando le dice al servidor que inicies Xfce. Cada vez que inicies o reinicies el servidor VNC, estos comandos se ejecutarán automáticamente.

Debes guardar y cerrar el archivo después de agregar estas líneas. Si usaste nano, hazlo presionando CTRL + X, Y y luego ENTER.

Para asegurarte de que el servidor VNC podrá usar este nuevo archivo de inicio correctamente, deberás hacerlo ejecutable:

Luego debes reiniciar el servidor VNC:

Ten en cuenta que esta vez el comando incluye la opción –localhost, que une el servidor VNC a la interfaz loopback de tu servidor. Esto hará que VNC solo permita conexiones que se originen en el servidor en el que está instalado.

En el siguiente paso, establecerás un túnel SSH entre tu máquina local y tu servidor, esencialmente engañando a VNC para que piense que la conexión de tu máquina local se originó en tu servidor. Esta estrategia agregará una capa adicional de seguridad alrededor de VNC. Esto porque los únicos usuarios que podrán acceder a ella son aquellos que ya tienen acceso SSH a tu servidor.

Verás una salida similar a esta:

Con la configuración en su lugar, estás listo para conectarte al servidor VNC desde tu máquina local.

Paso 3 – Conexión segura al escritorio de VNC

VNC en sí no usa protocolos seguros cuando se conecta. Para conectarte de forma segura a tu servidor, establecerás un túnel SSH. Luego le indicarás a tu cliente VNC que se conecte usando ese túnel en lugar de hacer una conexión directa.

Debes crear una conexión SSH en tu computadora local que reenvíe de forma segura a la conexión localhost para VNC. Puedes hacerlo a través de la terminal en Linux o macOS con el siguiente comando ssh:

Esto es lo que significan las opciones de este comando ssh:

  • -L 59000:localhost:5901. El conmutador –L especifica que el puerto dado en la computadora local (59000) debe reenviarse al host dado y al puerto en el servidor de destino. Es decir, localhost:5901, el puerto 5901 en el servidor de destino, definido como your_server_ip). Ten en cuenta que el puerto local que especifiques es algo arbitrario. Siempre que el puerto no esté vinculado a otro servicio, puedes usarlo como puerto de reenvío para tu túnel.
  • -C: Este indicador permite la compresión, lo que puede ayudar a minimizar el consumo de recursos y acelerar las cosas.
  • -N: Esta opción le dice a ssh que no deseas ejecutar ningún comando remoto. Esta configuración es útil cuando solo deseas reenviar puertos.
  • -l cesar your_server_ip: El interruptor –l te permite especificar el usuario con el que deseas iniciar sesión una vez que te conectes al servidor. Asegúrate de reemplazar cesar y your_server_ip con el nombre de tu usuario no root y la dirección IP de tu servidor.

Nota:

Este comando establece un túnel SSH que reenvía información desde el puerto 5901 en tu servidor VNC al puerto 59000 en tu máquina local. Esto a través del puerto 22 en cada máquina, el puerto predeterminado para SSH. Suponiendo que hayas seguido el prerrequisito de la Guía de configuración básica de un servidor con Ubuntu 20.04, habrás agregado una regla UFW. Esta regla es para permitir conexiones a tu servidor a través de OpenSSH.

Esto es más seguro que simplemente abrir el firewall de tu servidor para permitir conexiones al puerto 5901. Con esto permitirías que cualquier persona acceda a tu servidor a través de VNC. Al conectarte a través de un túnel SSH, estás limitando el acceso VNC a máquinas que ya tienen acceso SSH al servidor.

Putty

Si estás utilizando PuTTY para conectarte a tu servidor, puedes crear un túnel SSH haciendo clic derecho en la barra superior de la ventana de la terminal. Posteriormente debes hacer clic en Cambiar configuración… opción:

Debes buscar la rama Conexión en el menú del árbol en el lado izquierdo de la ventana de reconfiguración PuTTY. Expande la rama SSH y haz clic en Túneles. En la pantalla Opciones de control de reenvío de puerto SSH, ingresa 59000 como Puerto de origen y localhost:5901 como Destino, de esta manera:

Luego haz clic en el botón Agregar y luego en el botón Aplicar para implementar el túnel.

Una vez que el túnel se está ejecutando, debes usar un cliente VNC para conectarte a localhost:59000. Se te pedirá que te autentiques utilizando la contraseña que estableciste en el Paso 1.

Una vez que estés conectado, verás el escritorio Xfce predeterminado. Debería verse más o menos así:

Puedes acceder a los archivos en tu directorio de inicio con el administrador de archivos o desde la línea de comandos, como se ve aquí:

Debes presionar CTRL+C en tu terminal local para detener el túnel SSH y regresar a tu mensaje. Esto también desconectará tu sesión de VNC.

Ahora puedes configurar tu servidor VNC para que se ejecute como un servicio systemd.

Paso 4 – Ejecutar VNC como un servicio del sistema

Al configurar el servidor VNC para que se ejecute como un servicio systemd, puedes iniciarlo, detenerlo y reiniciarlo según sea necesario, como cualquier otro servicio. También puedes usar los comandos de administración de systemd para asegurarte de que VNC se inicia cuando se inicia el servidor.

Primero, debes crear un nuevo archivo de unidad llamado /etc/systemd/system/vncserver@.service:

El símbolo @ al final del nombre nos permitirá pasar un argumento que puedes usar en la configuración del servicio. Lo usarás para especificar el puerto de pantalla VNC que deseas usar cuando administres el servicio.

Agrega las siguientes líneas al archivo. Asegúrate de cambiar el valor de UserGroupWorkingDirectory y el nombre de usuario en el valor de PIDFILE. Esto para que coincida con tu nombre de usuario:

El comando ExecStartPre detiene VNC si ya se está ejecutando. El comando ExecStart inicia VNC y establece la profundidad de color en color de 24 bits con una resolución de 1280×800.

También puedes modificar estas opciones de inicio para satisfacer tus necesidades. Además, ten en cuenta que el comando ExecStart nuevamente incluye la opción –localhost.

Debes guardar y cerrar el archivo.

Archivo

A continuación, debes informar al sistema sobre el nuevo archivo de la unidad:

Habilita el archivo de la unidad:

El 1 después del signo @ significa en qué número de pantalla debe aparecer el servicio. En este caso el valor predeterminado :1 como se discutió en el Paso 2.

Detén la instancia actual del servidor VNC si aún se está ejecutando:

Luego, inícialo como lo harías con cualquier otro servicio systemd:

Puedes verificar que inició con este comando:

Si inició correctamente, la salida debería verse así:

Tu servidor VNC ahora está listo para usar cuando tu servidor se inicie, y puedes administrarlo  con comandos systemctl como cualquier otro servicio systemd.

Sin embargo, no habrá ninguna diferencia en el lado del cliente. Para volver a conectar, inicia tu túnel SSH nuevamente:

Luego haz una nueva conexión usando tu software de cliente VNC a localhost:59000 para conectarte a tu servidor.

Conclusión

Ahora tienes un servidor VNC seguro en funcionamiento en tu servidor Ubuntu 20.04. Ahora podrás administrar tus archivos, software y configuraciones con una interfaz gráfica fácil de usar. También podrás ejecutar software gráfico como navegadores web de forma remota.