# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Instalar y configurar TigerVNC server y utilizarlo con un túnel SSH


Instalar y configurar el servidor VNC TigerVNC es realmente sencillo. Lo que muchas veces no nos paramos a pensar es que el protocolo en sí no es seguro por lo que el tráfico no está cifrado al conectar al escritorio remoto. Vamos a ver como solucionarlo.

Lo primero es instalar TigerVNC con yum (RHEL, CentOS, Scifi linux, etc). En este caso instalo también el cliente para hacer las pruebas en local:

# yum install tigervnc-server tigervnc

Una vez instalado debemos saber que la configuración se realiza en el fichero /etc/sysconfig/vncservers. Los comentarios del fichero nos indican claramente como configurarlo, también hice un artículo hace un tiempo, echadle un vistazo: Instalar y configurar vnc-server en CentOS/RHEL/Fedora

He creado un usuario “alex” al que únicamente se le permite el acceso local por seguridad:

# The VNCSERVERS variable is a list of display:user pairs.
#
# Uncomment the lines below to start a VNC server on display :2
# as my 'myusername' (adjust this to your own).  You will also
# need to set a VNC password; run 'man vncpasswd' to see how
# to do that.
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted!  For a secure way of using VNC, see this URL:
# http://kbase.redhat.com/faq/docs/DOC-7028

# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.

# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel.  See the "-via" option in the
# `man vncviewer' manual page.

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"
VNCSERVERS="2:ale
VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"

Creamos el password VNC para el usuario del siguiente modo:

# su alex -c "vncpasswd"
Password: XXXX
Verify: XXXX

Arrancamos el servidor VNC para el usuario alex:

[alex@localhost /]$ vncserver
xauth:  creating new authority file /home/alex/.Xauthority

New 'rhcsa:1 (alex)' desktop is rhcsa:1

Starting applications specified in /home/alex/.vnc/xstartup
Log file is /home/alex/.vnc/rhcsa:1.log

Llegados a este punto podemos acceder sin problemas en local al escritorio remoto con el comando vncviewer:

$ vncviewer localhost:1

Desde fuera no, por motivos de seguridad. Para ello vamos a crear un tunel SSH de modo que las conexiones VNC con el exterior sí que estén cifradas. Vamos a usar por ejemplo el puerto 6922 para el tunel. El servidor VNC se encuentra en la IP 10.0.0.100, desde el equipo remoto con el que queremos conectar al servidor creamos el tunel:

$ ssh alex@10.0.0.100 -L 6922:10.0.0.100:5901 -N

Y ya está, podemos acceder remotamente al servidor VNC de forma segura con el nuevo puerto:

$ vncviewer localhost:6922

Si queréis usar el estandar podéis mantener los puertos de VNC:

$ ssh alex@10.0.0.100 -L 5901:10.0.0.100:5901 -N
$ vncviewer localhost:1

Reinstalar CentOS de forma remota vía VNC (sin acceso físico al servidor)


Pongámonos en situación. Tenemos un servidor con CentOS instalado y necesitamos reinstalarlo, pero no tenemos acceso físicos al servidor ni tampoco gestión remota tipo iLO, iDRAC, etc. CentOS permite hacer instalación vía VNC, pero usando antes el CD de instalación, configurando la IP y demás y después aceptando la instalación por VNC. Aunque existe otra opción.

CentOS (y gran parte de distribuciones GNU/Linux) permiten la instalación remota por VNC desde el primer instante. En este caso vamos a instalar la versión CentOS 5.6 de 64 bits partiendo de un sistema ya instalado.

Lo primero que tenemos que hacer es descargarnos la imagen del kernel Linux y la imágen ramdisk (ficheros de arranque) para poder arrancar con ellas en el próximo reinicio. Podemos ubicarlas dentro de /boot junto con el resto de imágenes y kernels:

# mkdir /boot/centos-5.6/
# cd /boot/centos-5.6/
# wget ftp://ftp.udl.es/pub/centos/5.6/os/x86_64/isolinux/initrd.img
# wget ftp://ftp.udl.es/pub/centos/5.6/os/x86_64/isolinux/vmlinuz

Bien, ahora tenemos que crear una nueva entrada en el grub (/boot/grub/menu.lst) para arrancar con estas nuevas imágenes descargadas e indicar en la línea de arranque que queremos activar vnc, configurar la red, etc.

Por defecto, el menú de grub puede ser algo así:

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-238.el5)
	root (hd0,0)
	kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00
	initrd /initrd-2.6.18-238.el5.img

Añadimos nuestra entrada a continuación (InstaladorCentOS):

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-238.el5)
	root (hd0,0)
	kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00
	initrd /initrd-2.6.18-238.el5.img
title InstaladorCentOS (2.6.18-238.el5)
	root (hd0,0)
        kernel/boot/centos-5.6/vmlinuz vnc vncpassword=PASSWORD headless ip=IPADDR netmask=MASCARA gateway=PUERTA_ENLACE dns=8.8.8.8 ksdevice=eth1 method=ftp://ftp.udl.es/pub/centos/5.6/os/x86_64/ lang=en_US keymap=es
        initrd /boot/centos-5.6/initrd.img

Aseguraos por una parte que la línea de “root (hd0,0)” es igual que en el otro, para que use la partición/disco correcto. Luego la línea de arranque del Kernel tiene especificada la configuración que comentábamos antes. Puntos a tener en cuenta son el valos especificado en ksdevice, que tiene que ser la interfaz de red pública con la que haremos la instalación, la URL especificada en el método que es el repositorio de CentOS remoto, en lenguaje para el instalador y el tipo de teclado. Luego todos los parámetros de red para tener conexión a Internet durante la instalación (IP, puerta de enlace, máscara, DNS). La línea de initrd tiene la imagen a utilizar para arrancar la instalación (la que hemos bajado antes).

Si os fijáis no hemos modificado el fichero para que arranque con este kernel (sigue el default=0). Lo que vamos a hacer es decirle que de forma excepcional (sólo una vez) arranque con el segundo, así si algo falla, al reiniciar volveríamos al kernel normal. La posición de nuestro kernel es la “1″ así que lo especificamos:

# echo "savedefault --stage2=/boot/grub/stage2 --default=1 --once" | grub --batch

Una vez hecho esto, si reiniciamos y esperamos unos minutos ya deberíamos poder acceder a la instalación por VNC a través de la IP especificada anteriormente y el puerto 5091

# shutdown -r now
Instalar CentOS con VNC

Referencias: blog.spind.net

Instalar y configurar vnc-server en CentOS/RHEL/Fedora


La instalación de un servidor vnc en sistemas CentOS, Fedora y Red Hat es muy sencilla. Gracias a la instalación de este servicio podremos conectarnos a la máquina de forma remota y con entorno gráfico con un cliente vnc o con el propio visor de escritorio remoto de Linux (Vinagre en Ubuntu).

En primera instancia, procedemos a la instalación vía yum del servidor vnc:

yum install vnc-server

Una vez finalizada, hemos de retocar el fichero de configuración “/etc/sysconfig/vncservers”, en el que definimos los usuarios a los que vamos a permitir conectar remotamente y las preferencias de sus conexiones. En el siguiente ejemplo permitimos la conexión al usuario “alex”, con una resolución de pantalla de 1024×768:

# vim /etc/sysconfig/vncservers

VNCSERVERS="1:alex"
VNCSERVERARGS[1]="-geometry 1024x768"

Si quisieramos tener múltiples usuarios:

VNCSERVERS="1:alex 2:pepe 3:laura"
VNCSERVERARGS[1]="-geometry 1024x768"
VNCSERVERARGS[2]="-geometry 640x480"
VNCSERVERARGS[3]="-geometry 800x600"

Ahora hemos de asignar una clave a cada uno de los usuarios vnc. Debemos loguearnos con cada usuario en la shell y ejecutar el siguiente comando:

vncpasswd

Finalmente arrancamos vnc-server como root:

service vncserver start

Por defecto se configura para que arranque automáticamente, pero por si acaso:

chkconfig vncserver on

Ahora ya podemos conectarnos desde un cliente VNC o el visor de escritorios remotos de Linux. El puerto a utilizar es el 5900 + el número de pantalla asignado (es el ID asignado en el fichero vncservers, 1:alex 2:pepe 3:laura…), alex sería el 5901, pepe el 5902, etc.

Un punto a tener en cuenta, si accedéis por VNC y no entráis con el gestor de ventanas Gnome, editad el fichero de configuración del usuario (~/.vnc/xstartup) y cambiad la referencia a “twm” por “gnome-session”

#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &  # Esto cambiadlo por exec gnome-session