Cómo utilizar Apache Guacamole para crear una conexión VNC
Hace poco aprendiste a instalar y utilizar Apache Guacamole para crear una conexión SSH en un servidor basado en Rocky Linux 8. Uno de los usos más populares de Guacamole es utilizarlo como visor VNC (Virtual Network Computing). Usando VNC, puedes acceder a tu escritorio o a un servidor desde cualquier lugar sin instalar ningún cliente de terceros.
En este tutorial, aprenderás a instalar VNC en tu servidor Linux y a utilizar Guacamole para crear una conexión VNC. Cubriremos todas las distribuciones comunes y especificaremos las diferencias cuando sea necesario.
Requisitos previos
-
Un servidor con Rocky Linux, CentOS, AlmaLinux, Ubuntu o Debian.
-
Debe estar instalado Apache Guacamole. Sigue nuestros tutoriales para ello.
-
Un usuario no root con privilegios sudo en el servidor al que te conectas.
-
Un mínimo de 2 núcleos de CPU y 4GB de RAM en tus servidores remotos para una conexión VNC sin problemas.
-
Asegúrate de que todo está actualizado.
CentOS / Rocky Linux / AlmaLinux
$ sudo dnf update
Ubuntu / Debian
$ sudo apt update && sudo apt upgrade
-
Instala los paquetes de utilidades básicas. Es posible que algunos de ellos ya estén instalados.
CentOS / Rocky Linux / AlmaLinux
$ sudo dnf install wget curl nano unzip yum-utils -y
Ubuntu / Debian
$ sudo apt install wget curl nano unzip -y
Paso 1 – Instala la interfaz gráfica de escritorio en tu servidor
Para nuestro tutorial, instalaremos el entorno gráfico Xfce. Sin embargo, puedes optar por instalar cualquier entorno de tu elección. Ejecuta los siguientes comandos para instalar una GUI.
CentOS / Rocky Linux / AlmaLinux
$ sudo dnf install -y epel-release $ sudo dnf groupinstall -y "Xfce" "base-x" $ sudo systemctl set-default graphical $ sudo reboot
Si has seguido nuestro tutorial de Apache Guacamole, el repositorio EPEL ya estará instalado, por lo que puedes saltarte el primer comando. El segundo comando instala el entorno gráfico propiamente dicho y las librerías, y el tercer comando establece el entorno GUI por defecto. Tienes que reiniciar el servidor para que la instalación surta efecto.
Ubuntu / Debian
$ sudo apt install xfce4 xfce4-goodies $ sudo systemctl set-default graphical $ sudo reboot
Paso 2 – Instalar el servidor TigerVNC
Hay muchas aplicaciones de servidor VNC que puedes instalar en tu sistema. Para nuestro tutorial, instalaremos el software de servidor TigerVNC.
Ejecuta el siguiente comando para instalar el servidor TigerVNC.
CentOS / Rocky Linux / AlmaLinux
$ sudo dnf install tigervnc-server
Ubuntu / Debian
$ sudo apt install tigervnc-standalone-server
Paso 3 – Crear las credenciales de usuario VNC
El siguiente paso es crear un usuario del sistema para VNC desde el que se realizará la conexión.
CentOS / Rocky Linux / AlmaLinux
Ejecuta los siguientes comandos para crear un nuevo usuario y establecer una contraseña. Sustituye vncuser
por un nombre de usuario de tu elección.
$ sudo adduser vncuser $ sudo passwd vncuser
El siguiente paso es crear una contraseña de acceso que se utilizará para conectarse desde el cliente VNC al servidor de tu máquina.
Pasa a la página vncuser
.
$ sudo su - vncuser
Establece una contraseña de acceso a VNC.
$ vncpasswd Password: Verify: Would you like to enter a view-only password (y/n)? y Password: Verify:
Se te pedirá que crees una contraseña y que la verifiques. A continuación, se te preguntará si quieres crear una contraseña de sólo vista. Una contraseña de sólo vista es útil si quieres limitar el acceso VNC a sólo ver el sistema y prohibir cualquier interacción con el ratón o el teclado. Introduce y
si quieres configurar dicha contraseña o introduce n
para finalizar el proceso.
Sal del shell vncuser
.
$ exit
Ubuntu / Debian
Ejecuta el siguiente comando para crear un nuevo usuario y establecer una contraseña. Sustituye vncuser
por un nombre de usuario de tu elección.
$ sudo adduser vncuser Adding user `vncuser' ... Adding new group `vncuser' (1001) ... Adding new user `vncuser' (1001) with group `vncuser' ... Creating home directory `/home/vncuser' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for vncuser Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
Cambia a la página vncuser
.
$ sudo su - vncuser
Establece una contraseña de acceso a VNC.
$ vncpasswd Password: Verify: Would you like to enter a view-only password (y/n)? y Password: Verify:
Tenemos que configurar el archivo de inicio para que TigerVNC utilice Xfce.
Abre el archivo ~/.vnc/xstartup
para editarlo.
$ sudo nano ~/.vnc/xstartup
Pega en él el siguiente código.
#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida guardar.
Puedes configurar opciones adicionales para el VNC a través del archivo ~/.vnc/config
. Crea y abre el archivo para editarlo.
$ sudo nano ~/.vnc/config
Pega en él el siguiente código.
geometry=1024x768 dpi=96 depth=24
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida que lo guardes.
Prueba el servidor VNC.
$ vncserver /usr/bin/xauth: file /home/vncuser/.Xauthority does not exist New 'vncdesktop:1 (vncuser)' desktop at :1 on machine vncdesktop Starting applications specified in /home/vncuser/.vnc/xstartup Log file is /home/vncuser/.vnc/vncdesktop:1.log Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/vncuser/.vnc/passwd :1 to connect to the VNC server.
Puedes obtener una lista de todas las sesiones VNC actuales utilizando el siguiente comando.
$ vncserver -list TigerVNC server sessions: X DISPLAY # RFB PORT # PROCESS ID :1 5901 1029
A continuación, tenemos que matar el proceso porque, en el siguiente paso, crearemos un archivo de servicio para él.
$ vncserver -kill :1 Killing Xtigervnc process ID 1029... success!
Sal del shell del usuario.
$ exit
Paso 4 – Crear el archivo de unidad VNC Systemd
CentOS / Rocky Linux / AlmaLinux
El archivo de unidad de servicio systemd de TigerVNC está disponible en el directorio /lib/systemd/system
. Copia el archivo en el directorio /etc/systemd/system
.
$ sudo cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service
El servidor VNC se ejecuta por defecto en el puerto 5900. Cada usuario debe ejecutar su instancia de servidor VNC en un puerto distinto. El número :1
al final del comando indica a VNC que ejecute el servicio en un subpuerto de 5900. Por tanto, :1
se traduce en el puerto 5900, :2
se traduce en el puerto 5902 y así sucesivamente.
No sólo VNC debe saber el número de puerto en el que ejecutar el servicio, sino que también debes especificar qué usuario ejecutará el servidor bajo qué número de puerto. Puedes configurar esto editando el archivo /etc/tigervnc/vncserver.users
. Ábrelo para editarlo.
$ sudo nano /etc/tigervnc/vncserver.users
Introduce el valor :1=vncuser
justo antes de # :2=andrew
para que tenga el siguiente aspecto.
# TigerVNC User assignment # # This file assigns users to specific VNC display numbers. # The syntax is <display>=<username>. E.g.: # :1=vncuser # :2=andrew # :3=lisa
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida que lo guardes.
Ubuntu / Debian
El instalador no instala un archivo de servicio systemd en los sistemas Ubuntu o Debian. Tienes que crearlo manualmente. Crea y abre el archivo de unidad systemd para TigerVNC.
$ sudo nano /etc/systemd/system/[email protected]
Pega en él el siguiente código.
[Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=simple User=vncuser PAMName=login PIDFile=/home/%u/.vnc/%H%i.pid ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :' ExecStart=/usr/bin/vncserver :%i -geometry 1440x900 -alwaysshared -fg ExecStop=/usr/bin/vncserver -kill :%i [Install] WantedBy=multi-user.target
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida guardar.
El siguiente paso es común a todas las distribuciones de Linux.
Recarga el demonio systemd para activar el servicio.
$ sudo systemctl daemon-reload
Paso 5 – Iniciar el servidor VNC
CentOS / Rocky Linux / AlmaLinux
Inicia el servicio del servidor VNC.
$ sudo systemctl start vncserver@:1
Si quieres que el servicio siga funcionando a pesar de los reinicios del sistema, puedes activarlo.
$ sudo systemctl enable vncserver@:1
Comprueba el estado del servicio.
$ sudo systemctl status vncserver@:1 ? vncserver@:1.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:1.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2022-03-16 01:16:18 UTC; 6s ago Process: 6777 ExecStart=/usr/libexec/vncsession-start :1 (code=exited, status=0/SUCCESS) Main PID: 6784 (vncsession) Tasks: 0 (limit: 11179) Memory: 1.1M CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service ? 6784 /usr/sbin/vncsession vncuser :1 Mar 16 01:16:18 guacamole systemd[1]: Starting Remote desktop service (VNC)... Mar 16 01:16:18 guacamole systemd[1]: Started Remote desktop service (VNC).
Ubuntu / Debian
Inicia el servicio del servidor VNC.
$ sudo systemctl start [email protected]
Activa el servicio VNC.
$ sudo systemctl enable [email protected]
Comprueba el estado del servicio.
$ sudo systemctl status [email protected] ? [email protected] - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-03-19 09:42:28 UTC; 6s ago Process: 1420 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 1455 (vncserver) Tasks: 0 (limit: 4686) Memory: 884.0K CGroup: /system.slice/system-vncserver.slice/[email protected] ? 1455 /usr/bin/perl /usr/bin/vncserver :1 -geometry 1440x900 -alwaysshared -fg Mar 19 09:42:28 vncdesktop systemd[1]: Starting Remote desktop service (VNC)... Mar 19 09:42:28 vncdesktop systemd[1420]: pam_unix(login:session): session opened for user vncuser by (uid=0) Mar 19 09:42:28 vncdesktop systemd[1]: Started Remote desktop service (VNC). Mar 19 09:42:29 vncdesktop systemd[1455]: pam_unix(login:session): session opened for user vncuser by (uid=0)
Paso 6 – Configurar el cortafuegos
Para que el VNC sea accesible a través de la red, necesitamos abrir sus puertos.
CentOS / Rocky Linux / AlmaLinux
Ejecuta el siguiente comando para abrir los puertos del VNC y recargar el cortafuegos.
$ sudo firewall-cmd --permanent --add-service=vnc-server $ sudo firewall-cmd --reload
Ubuntu / Debian
$ sudo ufw allow 5901:5910/tcp $ sudo ufw reload
Paso 7 – Crea una conexión VNC con el servidor CentOS / Rocky Linux / AlmaLinux
Abre tu URL de Guacamole e introduce tus credenciales para iniciar la sesión.
Visita la pestaña Conexiones en Configuración de Guacamole. Haz clic en el botón Nueva conexión.
Elige un nombre para tu conexión y selecciona VNC en el menú desplegable.
En la sección Parámetros, introduce la dirección IP de tu servidor (167.172.46.187 en nuestro caso) como nombre de host y 5901 como puerto. En la secciónAutenticación, introduce el nombre de usuario y la contraseña de tu sistema VNC.
Si quieres habilitar alguna configuración adicional, hazlo. Haz clic en Guardar para terminar de añadir la conexión.
Accede a tu máquina mediante VNC
Visita el panel de control de Guacamole y haz clic en tu conexión VNC en la sección Todas las conexiones.
Te aparecerá la pantalla de bloqueo de tu servidor.
Retírala e introduce tus credenciales de usuario VNC.
Pulsa el botón de Desbloqueo para pasar a la pantalla de inicio de tu servidor/escritorio.
Puedes empezar a trabajar en tu máquina.
Paso 8 – Crear una conexión VNC a un servidor remoto de Ubuntu/Debian
Si tu instalación de Guacamole y el entorno de escritorio están en el mismo servidor, puedes acceder al VNC de tu servidor siguiendo los pasos anteriores. Nuestra instalación de Rocky Linux estaba en el mismo servidor, pero nuestro entorno Ubuntu estaba en un servidor diferente. En este caso, utilizaremos el túnel SSH para crear una conexión VNC con el servidor, ya que es un método más seguro.
Abre tu URL de Guacamole e introduce tus credenciales para iniciar la sesión.
Visita la pestaña Conexiones en Configuración de Guacamole. Haz clic en el botón Nueva conexión.
Elige un nombre para tu conexión y selecciona VNC en el menú desplegable.
En la sección Parámetros, introduce la dirección localhost
como nombre de host y 5001 como puerto. Deja la sección Autenticación en blanco, ya que la utilizaremos en el siguiente paso. También hablaremos de por qué usamos localhost
como host en un momento.
Si quieres activar alguna configuración adicional, hazlo. Haz clic en Guardar para terminar de añadir la conexión.
Crear un túnel SSH
Ejecuta el siguiente comando desde el terminal del servidor que aloja a Guacamole.
$ ssh -L 5001:localhost:5901 [email protected]
Repasemos lo que ocurre aquí. El comando anterior reenvía la conexión SSH de tu sistema al servidor remoto utilizando el reenvío de puertos local.
- La bandera
-L
especifica el reenvío de puerto local. - El puerto
5001
es el puerto de tu máquina Guacamole por el que podemos acceder al servidor remoto. Puedes elegir un puerto diferente si lo deseas. localhost:5901
es el servidor VNC remoto y el número de pantalla (y su correspondiente número de puerto) al que debemos conectarnos. Como estamos haciendo un reenvío de puertos local, la dirección del servidor remoto se traduce alocalhost
para nosotros.[email protected]
en nuestro caso son el usuario SSH y la dirección IP del servidor remoto de Ubuntu / Debian al que estamos accediendo.
El túnel SSH permanecerá abierto mientras se ejecute el comando. Escribe exit
en el terminal para salir del túnel y cerrar la conexión VNC.
Accede a tu máquina mediante VNC
Visita el panel de control de Guacamole y haz clic en tu conexión VNC en la sección Todas las conexiones.
Aparecerá un aviso de contraseña que te pedirá la contraseña de VNC que hayas establecido con el comando vncpasswd
. Introduce la contraseña y pulsa Continuar para continuar.
Una vez confirmada con éxito, se te llevará a la pantalla del escritorio de tu sistema.
Puedes empezar a trabajar en tu máquina.
Conclusión
Con esto concluye nuestro tutorial sobre el uso de Apache Guacamole para crear una conexión VNC con un servidor Linux. Si tienes alguna pregunta, publícala en los comentarios de abajo.