ENTERducción

*Virtual Network Computing*, o VNC, es un sistema de conexión que le permite usar su teclado y mouse para interactuar con un entorno de escritorio gráfico en un servidor remoto. Hace que administrar archivos, software y ajustes en un servidor remoto sea 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 de inicio rápido, configurará un servidor VNC con TightVNC en un servidor de Ubuntu 20.04 y se conectará con él de manera segura a través de un túnel SSH. Luego, usará un programa cliente VNC en su equipo local para interactuar con el servidor a través de un entorno de escritorio gráfico.

Requisitos previos

vnc illustration for: Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

  • Una computadora local con un cliente VNC instalado. El cliente VNC que utilice debe ser compatible con las conexiones de los túneles SSH:
  • En macOS, puede usar el programa integrado Screen Sharing o una aplicación multiplataforma como RealVNC.
  • En Linux, puede elegir entre varias opciones, como vinagre, krdc, RealVNC o TightVNC.

Paso 1: instalación del entorno de escritorio y el servidor VCN

Después de conectarse a su servidor con SSH, actualice su lista de paquetes:

				
					
sudo apt update

				
			

A continuación, instale Xfce y el paquete xfce4-goodies, que contiene algunas mejoras para el entorno de escritorio:

				
					
sudo apt install xfce4 xfce4-goodies

				
			

Cuando finalice la instalación, instale el servidor TightVNC:

				
					
sudo apt install tightvncserver

				
			

Luego, ejecute el comando vncpasswd para establecer una contraseña de acceso a VNC y crear los archivos de configuración iniciales:

				
					
vncpasswd

				
			

Se le indicará que introduzca y verifique una contraseña para acceder a su máquina de forma remota:

				
					
[secondary_label Output]

You will require a password to access your desktops.



Password:

Verify:

				
			

La contraseña debe tener entre seis y ocho caracteres; las contraseñas que contengan más de 8 caracteres se reducirán automáticamente. Una vez que haya verificado la contraseña, tendrá la opción de crear una contraseña de solo lectura, pero no es requisito necesario.

Si en algún momento quiere cambiar su contraseña o agregar una contraseña de solo lectura, vuelva a ejecutar el comando vncpasswd.

Paso 2: configuración del servidor VNC

Los comandos que ejecuta el servidor de VNC durante el inicio están ubicados en un archivo de configuración denominado xstartup en la carpeta .vnc, en el directorio de inicio. En este paso, crearemos una secuencia de comandos de xstartup personalizada que le indicará al servidor de VNC que se conecte con el escritorio Xfce.

Cree un nuevo archivo xstartup y ábralo en un editor de texto, como nano:

				
					
nano ~/.vnc/xstartup

				
			

Agregue las siguientes líneas al nuevo archivo:

				
					
[label ~/.vnc/xstartup]

#!/bin/bash

xrdb $HOME/.Xresources

startxfce4 &

				
			

Después de *shebang*), el primer comando en el archivo, xrdb $HOME/. Xresources, le indica al marco de trabajo de la GUI de VNC que lea el archivo. Xresources. El segundo comando le indica al servidor que inicie Xfce.

Guarde y cierre el archivo después de añadir estas líneas. Si utiliza nano, podrá hacerlo presionando CTRL+X, Y y luego ENTER.

Luego, haga que el archivo sea ejecutable:

				
					
chmod +x ~/.vnc/xstartup

				
			

Ahora, inicie el servidor de VNC con el comando vncserver:

				
					
vncserver -localhost

				
			

Este comando incluye la opción -localhost, que vincula el servidor de VNC a la interfaz de bucle invertido de su servidor. Esto hará que VNC solo permita las conexiones que provienen del servidor en el que está instalado.

Verá un resultado similar a este:

				
					
[secondary_label 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

				
			

Aquí, puede observar que el comando se abre como una instancia del servidor predeterminada en el puerto 5901. Este puerto se llama *puerto de visualización*, y VNC se refiere a él como :1:

Paso 3: conexión segura al escritorio de VNC

Para establecer una conexión segura con el servidor, establecerá un túnel SSH y, luego, le indicará al cliente VNC que se conecte a través de ese túnel en lugar de crear una conexión directa.

Cree una conexión SSH en su equipo local que se reenvíe de forma segura a la conexión localhost para VNC. Puede hacerlo a través de la terminal en Linux o macOS con el siguiente comando ssh:

				
					
[environment local]

ssh -L <^>59000<^>:localhost:<^>5901<^> -C -N -l <^>sammy<^> <^>your_server_ip<^>

				
			

Aunque en este ejemplo usamos <^>59000<^>, el puerto local puede ser cualquier puerto que aún no esté bloqueado por otro programa o proceso. También, asegúrese de cambiar <^>sammy<^> por su nombre de usuario en Ubuntu y <^>your_server_ip<^> por la dirección IP de su servidor.

Si está utilizando PuTTY para conectarse a su servidor, puede crear un túnel SSH haciendo clic con el botón secundario en la barra superior de la ventana de la terminal y, luego, en la opción Cambiar la configuración…:

Busque la rama Conexión en el menú con estructura de árbol ubicado en la parte izquierda de la ventana de reconfiguración de PuTTY. Despliegue la rama SSH y haga clic en Túneles. En la pantalla Opciones de control del puerto de enrutamiento SSH, ingrese 59000 como el puerto fuente y localhost:5901 como el destino, tal como se muestra en la imagen:

Luego, haga clic en el botón Agregar y, a continuación, en el botón Aplicar para implementar el túnel.

Una vez que el túnel se esté ejecutando, utilice un cliente VNC para conectar a localhost:59000. Se le pedirá que autentique usando la contraseña que configuró en el Paso 1.

Una vez conectado, verá el escritorio Xfce predeterminado. Debería tener un aspecto similar a este:

Puede acceder a los archivos en su directorio principal con el administrador de archivos o desde la línea de comandos, como se indica aquí:

Pulse CTRL+C en su terminal para detener el túnel SSH y regresar a su solicitud. Esto también desconectará su sesión de VNC.

Paso 4: ejecución de VNC como servicio del sistema

Al configurar el servidor de VNC para que se ejecute como un servicio de systemd, puede utilizar los comandos de administración de systemd iniciar, detener y reiniciar el servidor, como así también habilitarlo para que comience a ejecutarse cada vez que el servidor arranque.

Primero, cree un nuevo archivo de unidad systemd que llamaremos /etc/systemd/system/[email protected]:

				
					
sudo nano /etc/systemd/system/vncserver@.service

				
			

El símbolo @ al final del nombre nos dejará pasar un argumento que puede utilizar en la configuración del servicio. Lo utilizará para especificar el puerto de visualización de VNC que quiere utilizar cuando administre el servicio.

Agregue las siguientes líneas al archivo, asegurándose de reemplazar los valores de User, Group, WorkingDirectory y del nombre de usuario en el valor de PIDFILE por su nombre de usuario:

				
					
[label  /etc/systemd/system/vncserver@.service]

[Unit]

Description=Start TightVNC server at startup

After=syslog.target network.target



[Service]

Type=forking

User=&lt;^&gt;sammy&lt;^&gt;

Group=&lt;^&gt;sammy&lt;^&gt;

WorkingDirectory=/home/&lt;^&gt;sammy&lt;^&gt;



PIDFile=/home/&lt;^&gt;sammy&lt;^&gt;/.vnc/%H:%i.pid

ExecStartPre=-/usr/bin/vncserver -kill :%i &gt; /dev/null 2&gt;&amp;1

ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i

ExecStop=/usr/bin/vncserver -kill :%i



[Install]

WantedBy=multi-user.target

				
			

Guarde y cierre el archivo.

A continuación, informe al sistema de la existencia de un nuevo archivo de unidad:

				
					
sudo systemctl daemon-reload

				
			

Habilite el archivo de unidad:

				
					
sudo systemctl enable vncserver@1.service

				
			

El 1 tras el signo @ indica en qué número de pantalla debe aparecer el servicio, en este caso, el valor predeterminado es :1, como se explicó en el paso 2.

Detenga la instancia actual del servidor de VNC si aún se está ejecutando:

				
					
vncserver -kill :1

				
			

Luego, inícielo tal como iniciaría cualquier otro servicio de systemd:

				
					
sudo systemctl start vncserver@1

				
			

Puede verificar si ha comenzado con este comando:

				
					
sudo systemctl status vncserver@1

				
			

Para obtener más información sobre systemctl, consulte el tutorial Cómo utilizar Systemctl para administrar los servicios y las unidades de Systemd.

Para volver a conectarse, inicie su túnel SSH de nuevo:

				
					
[environment local]

ssh -L &lt;^&gt;59000&lt;^&gt;:127.0.0.1:&lt;^&gt;5901&lt;^&gt; -C -N -l &lt;^&gt;sammy&lt;^&gt; &lt;^&gt;your_server_ip&lt;^&gt;

				
			

Luego, realice una nueva conexión utilizando el software de su cliente VNC con localhost:<^>59000<^> para conectarse con su servidor.

Conclusión

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