Cómo utilizar Apache Guacamole para crear una conexión VNC

Recientemente, aprendiste a instalar y usar 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 necesidad de 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.
- Apache Guacamole debe estar instalado. Siga nuestros tutoriales para ello.
- Un usuario no root con privilegios sudo está disponible en el servidor al que se está conectando.
- Un mínimo de 2 núcleos de CPU y 4GB de RAM en sus servidores remotos para una conexión VNC fluida.
- Asegúrese de que todo está actualizado.
CentOS / Rocky Linux / AlmaLinux
$ sudo dnf update
Ubuntu / Debian
$ sudo apt update && sudo apt upgrade
- Instale los paquetes básicos de utilidades. Algunos de ellos pueden estar ya 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 – Instalar la GUI de escritorio en su servidor
Para nuestro tutorial, instalaremos el entorno gráfico Xfce. Sin embargo, puede optar por instalar cualquier entorno de su elección. Ejecute los siguientes comandos para instalar un entorno gráfico.
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 real y las bibliotecas, y el tercer comando establece el entorno GUI por defecto. Es necesario 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 elegir para instalar en tu sistema. Para nuestro tutorial, instalaremos Servidor TigerVNC software.
Ejecute 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 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
Ejecute los siguientes comandos para crear un nuevo usuario y establecer una contraseña. Reemplace vncuser con un nombre de usuario de su 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 en su máquina.
Cambie al vncuser.
$ sudo su - vncuser
Establezca 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 le pedirá que cree una contraseña y que la verifique. A continuación, se le preguntará si desea crear una Sólo para ver contraseña. A Sólo para ver es útil si quiere limitar el acceso VNC a sólo ver el sistema y prohibir cualquier interacción con el ratón o el teclado. Introduzca y si desea configurar dicha contraseña o introduzca n para finalizar el proceso.
Salga del shell vncuser.
$ exit
Ubuntu / Debian
Ejecute el siguiente comando para crear un nuevo usuario y establecer una contraseña. Sustituya vncuser por un nombre de usuario de su elección.Anuncio
$ 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 al vncuser.
$ sudo su - vncuser
Establezca una contraseña de acceso a VNC.
$ vncpasswd Password: Verify: Would you like to enter a view-only password (y/n)? y Password: Verify:
Necesitamos configurar el archivo de inicio para que TigerVNC utilice Xfce.
Abra el archivo ~/.vnc/xstartup para editarlo.
$ sudo nano ~/.vnc/xstartup
Pegue el siguiente código en él.
#!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4
Guarde el archivo pulsando Ctrl + X e introduciendo Y cuando se le pida que guarde.
Puede configurar opciones adicionales para el VNC a través del archivo ~/.vnc/config. Cree y abra el archivo para editarlo.
$ sudo nano ~/.vnc/config
Pegue el siguiente código en él.
geometry=1024x768 dpi=96 depth=24
Guarde el archivo pulsando Ctrl + X e introduciendo Y cuando se le pida que guarde.
Pruebe 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.
Puede 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, vamos a crear un archivo de servicio para él.
$ vncserver -kill :1 Killing Xtigervnc process ID 1029... success!
Salga del shell del usuario.
$ exit
Paso 4 – Crear el archivo de la Unidad VNC Systemd
CentOS / Rocky Linux / AlmaLinux
El archivo de unidad de servicio systemd de TigerVNC está disponible en el directorio /lib/systemd/system. Copie el archivo en el directorio /etc/systemd/system.Advertisement
$ sudo cp /lib/systemd/system/[email protected] /etc/systemd/system/[email protected]:1.service
El servidor VNC se ejecuta en el puerto 5900 por defecto. Cada usuario debe ejecutar su instancia del 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 lo 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 para ejecutar el servicio, sino que también debe 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 quede como lo siguiente.
# 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
Guarde el archivo pulsando Ctrl + X e introduciendo Y cuando se le pida que guarde.
Ubuntu / Debian
El instalador no instala un archivo de servicio systemd en el sistema Ubuntu o Debian. Es necesario crearlo manualmente. Cree y abra el archivo de unidad systemd para TigerVNC.
$ sudo nano /etc/systemd/system/[email protected]
Pegue el siguiente código en él.
[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
Guarde el archivo pulsando Ctrl + X e introduciendo Y cuando se le pida que guarde.
El siguiente paso es común a todas las distribuciones de Linux.
Recargue el demonio systemd para activar el servicio.
$ sudo systemctl daemon-reload
Paso 5 – Iniciar el servidor VNC
CentOS / Rocky Linux / AlmaLinux
Inicie el servicio del servidor VNC.
$ sudo systemctl start [email protected]:1
Si desea habilitar el servicio para que siga funcionando a través de los reinicios del sistema, puede habilitarlo.
$ sudo systemctl enable [email protected]:1
Compruebe el estado del servicio.
$ sudo systemctl status [email protected]:1 ? [email protected]:1.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/[email protected]: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/[email protected]: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
Inicie el servicio del servidor VNC.
$ sudo systemctl start [email protected]
Habilite el servicio VNC.
$ sudo systemctl enable [email protected]
Compruebe 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 Firewall
Para que el VNC sea accesible a través de la red, necesitamos abrir sus puertos.
CentOS / Rocky Linux / AlmaLinux
Ejecute el siguiente comando para abrir los puertos VNC y recargue el firewall.
$ 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 – Crear una conexión VNC al servidor CentOS / Rocky Linux / AlmaLinux
Abra su URL de Guacamole e introduzca sus credenciales para iniciar la sesión.
Visite la página Conexiones en la pestaña de Configuración de Guacamole. Haga clic en el botón Nueva conexión botón.
Elija un nombre para su conexión y seleccione VNC en el menú desplegable.
En la sección Parámetros, introduzca la dirección IP de su servidor (167.172.46.187 en nuestro caso) como nombre de host y 5901 como puerto. En la sección Autenticación introduzca su nombre de usuario y contraseña del sistema VNC.
Si quieres habilitar alguna configuración adicional, hazlo. Haga clic en Guardar para terminar de añadir la conexión.
Acceda a su máquina usando VNC
Visite el panel de control de Guacamole y haga clic en su conexión VNC en la sección Todas las conexiones sección.
Le aparecerá la pantalla de bloqueo de su servidor.
Descárgalo e introduce tus credenciales de usuario VNC.
Pulse el botón Desbloquear para pasar a la pantalla de inicio de su servidor/escritorio.
Puedes empezar a trabajar en tu máquina.
Paso 8 – Crear una conexión VNC a un servidor remoto Ubuntu/Debian
Si su instalación de Guacamole y el entorno de escritorio están en el mismo servidor, puede acceder a su servidor VNC 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.
Abra su URL de Guacamole e introduzca sus credenciales para iniciar la sesión.
Visite la página Conexiones en la pestaña de Configuración de Guacamole. Haga clic en el botón Nueva conexión botón.
Elija un nombre para su conexión y seleccione VNC en el menú desplegable.
En la sección Parámetros, introduzca la dirección localhost como nombre de host y 5001 como puerto. Deje el Autenticación en blanco ya que lo utilizaremos en el siguiente paso. También hablaremos de por qué usamos localhost como host en un momento.
Si desea habilitar alguna configuración adicional, hágalo. Haga clic en Guardar para terminar de añadir la conexión.
Crear un túnel SSH
Ejecute 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 su 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 en su máquina Guacamole donde podemos acceder al servidor remoto. Puede elegir un puerto diferente si lo desea.
- localhost:5901 es el servidor VNC remoto y el número de pantalla (y su correspondiente número de puerto) al que conectarse. Como estamos haciendo un reenvío de puerto local, la dirección del servidor remoto se traduce a localhost para nosotros.
- [email protected] en nuestro caso son el usuario SSH y la dirección IP del servidor remoto Ubuntu / Debian al que estamos accediendo.
El túnel SSH permanecerá abierto mientras se ejecute el comando. Escriba exit en el terminal para salir del túnel y cerrar la conexión VNC.
Acceda a su máquina usando VNC
Visite el panel de control de Guacamole y haga clic en su conexión VNC en la sección Todas las conexiones sección.
Aparecerá un aviso de contraseña que le pedirá la contraseña de VNC que estableció con el comando vncpasswd. Introduzca la contraseña y pulse Continuar para continuar.
Una vez confirmada con éxito, será llevado a la pantalla del escritorio de su sistema.
Puedes empezar a trabajar en tu máquina.
Conclusión
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.