Cómo instalar y configurar VNC en Ubuntu 22.04

Introducción

Virtual Network Computing, o VNC, es un sistema de conexión que te permite usar tu teclado y ratón para interactuar con un entorno de escritorio gráfico en un servidor remoto. Facilita la gestión de archivos, software y configuraciones en un servidor remoto para 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 22.04 y te conectarás a él de forma segura a través de un túnel SSH. Luego, utilizará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:

Paso 1 — Instalar el Entorno de Escritorio y el Servidor VNC

De forma predeterminada, un servidor Ubuntu 22.04 no viene con un entorno gráfico de escritorio o un servidor VNC instalado, así que comenzarás instalando esos.

Tienes muchas opciones cuando se trata de qué servidor VNC y entorno de escritorio elegir. 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, lo que ayudará a asegurar que la conexión VNC sea fluida y estable incluso en conexiones a internet más lentas.

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

  1. sudo apt update

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

  1. sudo apt install xfce4 xfce4-goodies

Durante la instalación, es posible que se te pida elegir 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 estarás conectado como tu usuario no root de Ubuntu. Por lo tanto, para los propósitos de este tutorial, la elección del administrador de pantalla no es relevante. Selecciona cualquiera y presiona ENTER.

Una vez que se complete esa instalación, instala el servidor TightVNC:

  1. sudo apt install tightvncserver

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

  1. vncserver

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

Output
You will require a password to access your desktops. Password: Verify:

La contraseña debe tener entre seis y ocho caracteres de longitud. Las contraseñas con 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 VNC con su ratón o teclado. Esta es una opción útil si deseas demostrar algo a otras personas usando tu servidor VNC, pero no es obligatoria.

El proceso luego 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 llama un puerto de visualización, y es referido por VNC como :1. VNC puede iniciar múltiples instancias en otros puertos de visualización, con :2 refiriéndose al puerto 5902, :3 refiriéndose a 5903, y así sucesivamente:

Output
Would you like to enter a view-only password (y/n)? n xauth: file /home/sammy/.Xauthority does not exist New 'X' desktop is your_hostname:1 Creating default startup script /home/sammy/.vnc/xstartup Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

Tenga en cuenta que si alguna vez desea cambiar su contraseña o agregar una contraseña de solo lectura, puede hacerlo con el comando vncpasswd:

  1. vncpasswd

En este punto, el servidor VNC está instalado y en funcionamiento. Ahora lo configuraremos para que inicie Xfce y nos dé 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 el servidor VNC ejecuta al inicio se encuentran en un archivo de configuración llamado xstartup en la carpeta .vnc dentro de su directorio personal. El script de inicio se creó cuando ejecutó el comando vncserver en el paso anterior, pero creará el suyo propio para iniciar el escritorio Xfce.

Dado que vas a cambiar cómo está configurado el servidor VNC, primero detén la instancia del servidor VNC que se está ejecutando en el puerto 5901 con el siguiente comando:

  1. vncserver -kill :1

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

Output
Killing Xtightvnc process ID 17648

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

  1. mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

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

  1. nano ~/.vnc/xstartup

Luego agrega las siguientes líneas al archivo:

~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

La primera línea es un shebang. En archivos de texto plano ejecutables en plataformas *nix, un shebang le indica al sistema qué intérprete pasarle al 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 indica al framework GUI de VNC que lea el archivo .Xresources del usuario del servidor. .Xresources es donde un usuario puede hacer cambios en ciertos ajustes del escritorio gráfico, como colores de terminal, temas de cursor y renderizado de fuentes. El segundo comando indica al servidor que inicie Xfce. Cada vez que inicies o reinicies el servidor VNC, estos comandos se ejecutarán automáticamente.

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

Para asegurarte de que el servidor VNC pueda utilizar este nuevo archivo de inicio correctamente, necesitarás hacerlo ejecutable:

  1. chmod +x ~/.vnc/xstartup

Entonces reinicia el servidor VNC:

  1. vncserver -localhost

Observa que esta vez el comando incluye la opción -localhost, que enlaza el servidor VNC a la interfaz de bucle de retroalimentación de tu servidor. Esto hará que VNC solo permita conexiones que se originen desde 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, básicamente engañando a VNC para que piense que la conexión desde tu máquina local se originó en tu servidor. Esta estrategia agregará una capa adicional de seguridad alrededor de VNC, ya que los únicos usuarios que podrán acceder serán aquellos que ya tengan acceso SSH a tu servidor.

Verás una salida similar a esta:

Output
New 'X' desktop is your_hostname:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

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

Paso 3 — Conexión al Escritorio VNC de forma Segura

VNC en sí no utiliza protocolos seguros al conectarse. Para conectarte de forma segura a tu servidor, establecerás un túnel SSH y luego indicarás a tu cliente VNC que se conecte utilizando ese túnel en lugar de hacer una conexión directa.

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

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Aquí tienes lo que significan las opciones de este comando ssh:

  • -L 59000:localhost:5901: El interruptor -L especifica que el puerto dado en la computadora local (59000) se reenviará al host y puerto dados en el servidor de destino (localhost:5901, lo que significa el puerto 5901 en el servidor de destino, definido como your_server_ip). Tenga en cuenta que el puerto local que especifique es algo arbitrario; mientras el puerto no esté vinculado a otro servicio, puede usarlo como puerto de reenvío para su túnel.
  • -C: Esta bandera habilita la compresión, lo que puede ayudar a minimizar el consumo de recursos y acelerar las cosas.
  • -N: Esta opción le indica a ssh que no desea ejecutar ningún comando remoto. Esta configuración es útil cuando solo desea reenviar puertos.
  • -l sammy your_server_ip: El interruptor -l le permite especificar el usuario con el que desea iniciar sesión una vez que se conecte al servidor. Asegúrese de reemplazar sammy y your_server_ip con el nombre de su usuario no root y la dirección IP de su servidor.

Nota: Este comando establece un túnel SSH que reenvía información desde el puerto 5901 en su servidor VNC al puerto 59000 en su máquina local a través del puerto 22 en cada máquina, el puerto predeterminado para SSH. Suponiendo que haya seguido la guía de Configuración inicial del servidor para Ubuntu 22.04, habrá agregado una regla de UFW para permitir conexiones a su 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, ya que eso permitiría que cualquiera acceda a tu servidor a través de VNC. Al conectarse a través de un túnel SSH, estás limitando el acceso VNC a máquinas que ya tienen acceso SSH al servidor.

Si estás utilizando PuTTY para conectarte a tu servidor, puedes crear un túnel SSH haciendo clic con el botón derecho en la barra superior de la ventana del terminal, y luego haciendo clic en la opción Change Settings…:

Encuentra la rama Connection en el menú de árbol del lado izquierdo de la ventana de Reconfiguración de PuTTY. Expande la rama SSH y haz clic en Tunnels. En la pantalla Options controlling SSH port forwarding, ingresa 59000 como el Source Port y localhost:5901 como el Destination, así:

Luego haz clic en el botón Add, y luego en el botón Apply para implementar el túnel.

Una vez que el túnel esté en ejecución, utiliza un cliente VNC para conectarte a localhost:59000. Se te pedirá autenticar usando la contraseña que estableciste en el Paso 1.

Una vez que estés conectado, verás el escritorio Xfce predeterminado. Debería lucir algo así:

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

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

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

Paso 4 — Ejecutar VNC como un Servicio del Sistema

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

Primero, crea un nuevo archivo de unidad llamado /etc/systemd/system/[email protected]:

  1. sudo nano /etc/systemd/system/[email protected]

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

Agrega las siguientes líneas al archivo. Asegúrate de cambiar el valor de Usuario, Grupo, DirectorioDeTrabajo, y el nombre de usuario en el valor de ArchivoPID para que coincida con tu nombre de usuario:

/etc/systemd/system/[email protected]
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

El comando ExecStartPre detiene VNC si ya está en ejecución. El comando ExecStart inicia VNC y establece la profundidad de color en 24 bits con una resolución de 1280×800. También puedes modificar estas opciones de inicio según tus necesidades. Además, ten en cuenta que el comando ExecStart incluye nuevamente la opción -localhost.

Guarda y cierra el archivo archivo.

A continuación, haz que el sistema sea consciente del nuevo archivo de unidad:

  1. sudo systemctl daemon-reload

Habilita el archivo de unidad:

  1. sudo systemctl enable [email protected]

El 1 que sigue al signo @ indica en qué número de pantalla debe aparecer el servicio, en este caso, el predeterminado :1 como se discutió en el Paso 2.

Detenga la instancia actual del servidor VNC si aún está en ejecución:

  1. vncserver -kill :1

Luego, inícielo como lo haría con cualquier otro servicio de systemd:

  1. sudo systemctl start vncserver@1

Puede verificar que se haya iniciado con este comando:

  1. sudo systemctl status vncserver@1

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

Output
[email protected] - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS) Main PID: 97103 (Xtightvnc) Tasks: 77 (limit: 4665) Memory: 146.7M CPU: 4.459s CGroup: /system.slice/system-vncserver.slice/[email protected] . . .

Su servidor VNC ahora está listo para usar cada vez que se inicie su servidor, y puede administrarlo con comandos de systemctl como cualquier otro servicio de systemd.

Sin embargo, no habrá ninguna diferencia en el lado del cliente. Para reconectarse, inicie nuevamente su túnel SSH:

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

Luego, haga una nueva conexión utilizando su software de cliente VNC a localhost:59000 para conectarse a su servidor.

Conclusión

Ahora tiene un servidor VNC seguro en funcionamiento en su servidor Ubuntu 22.04. Ahora podrá administrar sus archivos, software y configuraciones con una interfaz gráfica fácil de usar, y podrá ejecutar software gráfico como navegadores web de forma remota.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04