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:
- Un servidor Ubuntu 22.04 con un usuario administrativo no raíz y un cortafuegos configurado con UFW. Para configurar esto, sigue nuestra guía de configuración inicial de servidor para Ubuntu 22.04.
- A local computer with a VNC client installed. The VNC client you use must support connections over SSH tunnels:
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:
Ahora instala Xfce junto con el paquete xfce4-goodies
, que contiene algunas mejoras para el entorno de escritorio:
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:
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:
Se te pedirá que ingreses y verifiques una contraseña para acceder a tu 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 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:
OutputWould 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
:
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:
La salida se verá así, aunque verás un PID diferente:
OutputKilling Xtightvnc process ID 17648
Antes de modificar el archivo xstartup
, haz una copia de seguridad del original:
Ahora crea un nuevo archivo xstartup
y ábrelo en un editor de texto, como nano
:
Luego agrega las siguientes líneas al archivo:
#!/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:
Entonces reinicia el servidor VNC:
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:
OutputNew '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
:
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 puerto5901
en el servidor de destino, definido comoyour_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 assh
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 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
en su servidor VNC al 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]
:
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:
[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:
Habilita el archivo de unidad:
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:
Luego, inícielo como lo haría con cualquier otro servicio de systemd:
Puede verificar que se haya iniciado con este comando:
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:
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