Cómo instalar y configurar VNC en Ubuntu 22.04

Introducción
Virtual Network Computing , o VNC, es un sistema de conexión que permite utilizar el teclado y el 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 a los usuarios que aún no se sienten cómodos con la línea de comandos.
En esta guía, configurará un servidor VNC con TightVNC en un servidor Ubuntu 22.04 y se conectará a él de forma segura a través de un túnel SSH. Luego, utilizará un programa cliente VNC en su máquina local para interactuar con su servidor a través de un entorno de escritorio gráfico.
Prerrequisitos
Para completar este tutorial, necesitarás:
- Un servidor Ubuntu 22.04 con un usuario administrativo que no sea root y un firewall configurado con UFW. Para configurarlo, siga nuestra guía de configuración inicial de servidores para Ubuntu 22.04 .
- Una computadora local con un cliente VNC instalado. El cliente VNC que utilice debe admitir conexiones a través de túneles SSH:
- En Windows, puede utilizar TightVNC , RealVNC o UltraVNC .
- En macOS, puedes usar el programa de uso compartido de pantalla integrado o puedes usar una aplicación multiplataforma como RealVNC .
- En Linux, puede elegir entre muchas opciones, incluidas
vinagre
,krdc
, RealVNC o TightVNC .
Paso 1: Instalación del entorno de escritorio y del servidor VNC
De forma predeterminada, un servidor Ubuntu 22.04 no viene con un entorno de escritorio gráfico ni con un servidor VNC instalado, por lo que comenzará por instalarlos.
Tiene muchas opciones en cuanto al servidor VNC y el entorno de escritorio que elija. En este tutorial, instalará paquetes para el entorno de escritorio Xfce más reciente y el paquete TightVNC disponible en el repositorio oficial de Ubuntu. Tanto Xfce como TightVNC son conocidos por ser livianos y rápidos, lo que ayudará a garantizar que la conexión VNC sea fluida y estable incluso en conexiones a Internet más lentas.
Después de conectarse a su servidor con SSH, actualice su lista de paquetes:
- sudo apt update
Ahora instale Xfce junto con el xfce4-goodies
paquete, que contiene algunas mejoras para el entorno de escritorio:
- sudo apt install xfce4 xfce4-goodies
Durante la instalación, es posible que se le solicite que elija un administrador de pantalla predeterminado para Xfce. Un administrador de pantalla es un programa que le permite seleccionar e iniciar sesión en un entorno de escritorio a través de una interfaz gráfica. Solo usará Xfce cuando se conecte con un cliente VNC y, en estas sesiones de Xfce, ya habrá iniciado sesión como usuario no root de Ubuntu. Por lo tanto, para los fines de este tutorial, su elección de administrador de pantalla no es pertinente. Seleccione cualquiera de los dos y presione ENTER
.
Una vez completada la instalación, instale el servidor TightVNC:
- sudo apt install tightvncserver
A continuación, ejecute el vncserver
comando para establecer una contraseña de acceso a VNC, crear los archivos de configuración inicial e iniciar una instancia de servidor VNC:
- vncserver
Se le pedirá que ingrese y verifique una contraseña para acceder a su máquina de forma remota:
OutputYou will require a password to access your desktops.Password:Verify:
La contraseña debe tener entre seis y ocho caracteres. Las contraseñas con más de ocho caracteres se truncarán automáticamente.
Una vez que verifique la contraseña, tendrá 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 el mouse o el teclado. Esta es una opción útil si desea demostrar algo a otras personas que usan su servidor VNC, pero no es obligatoria.
A continuación, 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 :1
. VNC puede iniciar varias instancias en otros puertos de pantalla, haciendo :2
referencia al puerto 5902
, :3
haciendo referencia a 5903
, etc.:
OutputWould you like to enter a view-only password (y/n)? nxauth: file /home/sammy/.Xauthority does not existNew 'X' desktop is your_hostname:1Creating default startup script /home/sammy/.vnc/xstartupStarting applications specified in /home/sammy/.vnc/xstartupLog 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 vncpasswd
comando:
- vncpasswd
En este punto, el servidor VNC ya está instalado y funcionando. 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 al iniciarse. En concreto, VNC necesita saber a qué entorno de escritorio gráfico debe conectarse.
Los comandos que ejecuta el servidor VNC al iniciarse se encuentran en un archivo de configuración llamado xstartup
en la .vnc
carpeta que se encuentra debajo de su directorio de inicio. El script de inicio se creó cuando ejecutó el vncserver
comando en el paso anterior, pero creará el suyo propio para iniciar el escritorio Xfce.
Dado que va a cambiar la forma en que está configurado el servidor VNC, primero detenga la instancia del servidor VNC que se está ejecutando en el puerto 5901
con el siguiente comando:
- vncserver -kill :1
La salida se verá así, aunque verás un PID diferente:
OutputKilling Xtightvnc process ID 17648
Antes de modificar el xstartup
archivo, haga una copia de seguridad del original:
- mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Ahora crea un nuevo xstartup
archivo y ábrelo en un editor de texto, como por ejemplo nano
:
- nano ~/.vnc/xstartup
Luego agregue las siguientes líneas al archivo:
~/.vnc/xstartup
#!/bin/bashxrdb $HOME/.Xresourcesstartxfce4
La primera línea es un shebang . En los archivos de texto sin formato ejecutables en plataformas *nix, un shebang le indica 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 del archivo, xrdb $HOME/.Xresources
, le indica al marco de la interfaz gráfica de usuario de VNC que lea el .Xresources
archivo del usuario del servidor. .Xresources
es donde un usuario puede realizar cambios en ciertas configuraciones del escritorio gráfico, como colores de terminal, temas del cursor y representación de fuentes. El segundo comando le indica al servidor que inicie Xfce. Siempre que inicie o reinicie el servidor VNC, estos comandos se ejecutarán automáticamente.
Guarde y cierre el archivo después de agregar estas líneas. Si utilizó nano
, hágalo presionando CTRL + X
, Y
y luego ENTER
.
Para garantizar que el servidor VNC pueda usar este nuevo archivo de inicio correctamente, deberá hacerlo ejecutable:
- chmod +x ~/.vnc/xstartup
Luego reinicie el servidor VNC:
- vncserver -localhost
Tenga en cuenta que esta vez el comando incluye la -localhost
opción que vincula el servidor VNC a la interfaz de bucle invertido de su servidor. Esto hará que VNC solo permita conexiones que se originen en el servidor en el que está instalado.
En el siguiente paso, establecerá un túnel SSH entre su máquina local y su servidor, lo que básicamente engañará a VNC para que piense que la conexión desde su máquina local se originó en su servidor. Esta estrategia agregará una capa adicional de seguridad a VNC, ya que los únicos usuarios que podrán acceder a él serán aquellos que ya tengan acceso SSH a su servidor.
Verás un resultado similar a este:
OutputNew 'X' desktop is your_hostname:1Starting applications specified in /home/sammy/.vnc/xstartupLog file is /home/sammy/.vnc/your_hostname:1.log
Con la configuración establecida, está listo para conectarse al servidor VNC desde su máquina local.
Paso 3: Conexión segura al escritorio VNC
VNC no utiliza protocolos seguros al conectarse. Para conectarse de forma segura a su servidor, deberá establecer un túnel SSH y luego indicarle a su cliente VNC que se conecte mediante ese túnel en lugar de realizar una conexión directa.
Cree una conexión SSH en su computadora local que reenvíe de forma segura a la localhost
conexión para VNC. Puede hacerlo a través de la terminal en Linux o macOS con el siguiente ssh
comando:
- ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
Esto es lo que ssh
significan las opciones de este comando:
-L 59000:localhost:5901
: El-L
conmutador especifica que el puerto dado en la computadora local (59000
) se debe reenviar al host y puerto dados en el servidor de destino (localhost:5901
, es decir, puerto5901
en el servidor de destino, definido comoyour_server_ip
). Tenga en cuenta que el puerto local que especifique es algo arbitrario; siempre que el puerto no esté ya 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 indicassh
que no desea ejecutar ningún comando remoto. Esta configuración es útil cuando solo desea reenviar puertos.-l sammy your_server_ip
: El-l
modificador le permite especificar el usuario con el que desea iniciar sesión una vez que se conecte al servidor. Asegúrese de reemplazarsammy
yyour_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
de su servidor VNC al puerto 59000
de su máquina local a través del puerto 22
de 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 UFW para permitir conexiones a su servidor a través de OpenSSH.
Esto es más seguro que simplemente abrir el firewall de su servidor para permitir conexiones al puerto 5901
, ya que eso permitiría que cualquiera acceda a su servidor a través de VNC. Al conectarse a través de un túnel SSH, está limitando el acceso a VNC a las máquinas que ya tienen acceso SSH al servidor.
Si está utilizando PuTTY para conectarse a su servidor, puede crear un túnel SSH haciendo clic derecho en la barra superior de la ventana del terminal y luego haciendo clic en la opción Cambiar configuración… :
Busque la rama Connection en el menú de árbol del lado izquierdo de la ventana PuTTY Reconfiguration. Expanda la rama SSH y haga clic en Tunnels . En la pantalla Options (Opciones) que controla el reenvío de puertos SSH , ingrese 59000
como Source Port (Puerto de origen) y localhost:5901
como Destination (Destino) , de la siguiente manera:
Luego haga clic en el botón Agregar y luego en el botón Aplicar para implementar el túnel.
Una vez que el túnel esté en funcionamiento, use un cliente VNC para conectarse a localhost:59000
. Se le solicitará que se autentique con la contraseña que estableció en el paso 1.
Una vez que estés conectado, verás el escritorio Xfce predeterminado. Debería verse así:
Puede acceder a los archivos de su directorio de inicio 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 volver al mensaje de aviso. Esto también desconectará tu sesión VNC.
Ahora puede configurar su servidor VNC para que se ejecute como un servicio systemd.
Paso 4: Ejecutar VNC como un servicio del sistema
Si configura el servidor VNC para que se ejecute como un servicio systemd, podrá iniciarlo, detenerlo y reiniciarlo según sea necesario, como cualquier otro servicio. También puede usar los comandos de administración de systemd para garantizar que VNC se inicie cuando se inicie el servidor.
Primero, crea un nuevo archivo de unidad llamado /etc/systemd/system/vncserver@.service
:
- sudo nano /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 quieres usar cuando administres el servicio.
Agregue las siguientes líneas al archivo. Asegúrese de cambiar el valor de User , Group , WorkingDirectory y el nombre de usuario en el valor de PIDFILE para que coincidan con su nombre de usuario:
/etc/systemd/system/vncserver@.servicio
[Unit]Description=Start TightVNC server at startupAfter=syslog.target network.target[Service]Type=forkingUser=sammyGroup=sammyWorkingDirectory=/home/sammyPIDFile=/home/sammy/.vnc/%H:%i.pidExecStartPre=-/usr/bin/vncserver -kill :%i /dev/null 21ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%iExecStop=/usr/bin/vncserver -kill :%i[Install]WantedBy=multi-user.target
El ExecStartPre
comando detiene VNC si ya se está ejecutando. El ExecStart
comando inicia VNC y establece la profundidad de color en 24 bits con una resolución de 1280×800. También puede modificar estas opciones de inicio para satisfacer sus necesidades. Además, tenga en cuenta que el ExecStart
comando incluye nuevamente la -localhost
opción.
Guarde y cierre el archivo.
A continuación, haga que el sistema conozca el nuevo archivo de unidad:
- sudo systemctl daemon-reload
Habilitar el archivo de unidad:
- sudo systemctl enable vncserver@1.service
El 1
siguiente @
signo indica sobre qué número de pantalla debe aparecer el servicio, en este caso el predeterminado :1
como se explicó en el Paso 2.
Detenga la instancia actual del servidor VNC si aún está en ejecución:
- vncserver -kill :1
Luego, inícielo como lo haría con cualquier otro servicio systemd:
- sudo systemctl start vncserver@1
Puedes verificar que se inició con este comando:
- sudo systemctl status vncserver@1
Si comenzó correctamente, el resultado debería verse así:
Output● vncserver@1.service - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/vncserver@.service; 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 21 (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/vncserver@1.service. . .
Su servidor VNC ahora está listo para usarse cada vez que se inicia el servidor y puede administrarlo con systemctl
comandos como cualquier otro servicio systemd.
Sin embargo, no habrá ninguna diferencia en el lado del cliente. Para volver a conectarse, inicie nuevamente el túnel SSH:
- ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
Luego, realice una nueva conexión utilizando su software cliente VNC para localhost:59000
conectarse a su servidor.
Conclusión
Ahora tienes un servidor VNC seguro en funcionamiento en tu servidor Ubuntu 22.04. Ahora podrás administrar tus archivos, software y configuraciones con una interfaz gráfica fácil de usar y podrás ejecutar software gráfico como navegadores web de forma remota.
Deja una respuesta