Acceder a nuestro ordenador remotamente en modo gráfico
Copyright © 16 Mayo 2004 Antonio Arauzo Azofra
Cómo utilizar VNC y SSH para acceder a las Xwindows de un ordenador remoto, de forma segura, utilizando conexión no muy rapida a internet.
Introducción
Para conectarnos a un ordenador remoto, en todos los sistemas GNU/Linux actuales, podemos usar ssh, que nos permite realizar una conexión en modo consola (o terminal de texto). Como la shell de GNU/Linux es muy versátil, nos permite hacer muchas cosas, pero a veces tambien es útil poder acceder en modo gráfico.
Desde el principio Xwindows (la interfaz gráfica de GNU/Linux) ha permitido abrir ventanas en un ordenador remoto. Para ello basta con cambiar la variable DISPLAY (incluso esto a veces se hace automaticamente), y autorizar la conexión en el ordenador donde se abre la ventana (servidor X) con xhost. Hace unos dias probé a usar XDMCP para abrir una sesion completa de Xwindows. Dentro de la red de la universidad iba genial, pero imposible usarlo desde mi casa (conexion por cable modem 128Kb), porque con cada acción habia que esperar unos 10segs. a que se redibujara la pantalla.
Con tightVNC podemos hacer conexiones remotas en modo gráfico usando conexiones con poco ancho de banda. A continuación veremos como usarlo facilmente.
Instalación
Para cada ordenador indicaré los paquetes necesarios en Debian y distribuciones derivadas. En otras distribuciones habrá paquetes con nombres similares. Para instalación desde los fuentes os remito a la receta de Bulma sobre VNC.
Servidor será el ordenador remoto al que queremos acceder (esta terminología parece contradictoria con la usada por Xwindows, donde el servidor es el programa que muestra los gráficos de las aplicaciones clientes, pero hay que tener en cuenta que, cuando se habla de arquitectura cliente-servidor, estamos hablando de la forma en que estan construidas las aplicaciones. En este caso, hay un servidor Xwindows-VNC en el ordenaodor remoto, y un cliente VNC que se conecta con él para mostrarnos en el local lo que debería verse alli), donde ejecutaremos las aplicaciones remotamente. Con cliente me referiré al ordenador al que tenemos acceso, donde usaremos el programa visualizador para ver y controlar el ordenador servidor.
Servidor (remoto)
Instalar el paquete tightvncserver y sus dependencias:
apt-get install tightvncserver
Cliente (local)
Instalar el paquete xtightvncviewer y sus dependencias:
apt-get install xtightvncviewer
Para empezar: Servidor
Ejecutamos:
vncserver :1 -name sesion1 -depth 16 -geometry 640x480
Nos preguntará por un password para pedir a los clientes que se quieran conectar a nuestro servidor VNC. Este password se almacena en un fichero en el directorio .vnc/, en el home (carpeta de inicio) del usuario, y en adelante utilizará siempre el mismo hasta que se borre dicho fichero.
Para empezar: Cliente
Ejecutamos:
vncviewer <dirección IP o nombre servidor>:1
Más rapido por favor (optimizar el ancho de banda)
Para el Cliente:
vncviewer -bgr233 -compresslevel 9 -quality 0 <dirección IP o nombre servidor>:1
La opción -bgr233 hace que se utilice un esquema de colores de 8bits, perdemos calidad en la pantalla pero aumentamos velocidad de respuesta. Con -compresslevel indicamos el nivel de compresión general, requerirá algo más de CPU en el servidor, pero normalmente lo que nos interesa es optimitar la transmision. Y finalmente con -quality disminuimos la calidad de las zonas que tightVNC considera que pueden ser comprimidas en formato JPEG y por tanto aumentamos la compresión de estas.
Seguridad ante todo (tunneling ssh)
Si vamos a usar VNC, debemos saber que todo lo que hacemos en remoto se transmite sin encriptar por la red. De esta forma, alguien con acceso a alguna de las redes por las que pase nuestra comunicación, puede ver todo lo que hacemos, y descubrir nuestras claves de acceso. Por ejemplo, si accedemos a nuestro correo electronico, o realizamos cualquier otra operación en que introduzcamos alguna clave, ésta podra ser descubierta.
Unicamente la transmisión de la clave para abrir el visualizador esta protegida, y además el código de protección no es muy seguro.
Solución: meter toda la comunicación en un tunel ssh. Esta posibilidad esta directamente soportada por el cliente vncviewer de tightVNC. Asi que de lo único que tenemos que preocuparnos es de que esté instalado ssh, y usar la opción -via:
vncviewer -via <dirección IP o nombre servidor> -bgr233 -compresslevel 9 -quality 0 localhost:1
Nos pedirá primero el password de nuestro usuario en el sistema remoto, para crear el tunel, y a continuación, el password que pusimos al vncserver.
En este caso, con la opción -via, estamos haciendo un tunel hasta el ordenador servidor (o remoto) al que queremos acceder, y ya alli accedemos al servidor que está en localhost. El tunel no tiene porque llegar hasta el mismo servidor, podría hacerse sólo hasta una red local que consideremos segura, pero puestos a hacer tuneles cavemos hasta nuestro servidor. ;-)
El inicio de la conexion será algo más lento, por crear el tunel, pero, una vez iniciada la conexión, el ancho de banda utilizado será el mismo, y por tanto la velocidad tambien.
Otras opciones
En primer lugar, para cambiar las opciones que pusimos al servidor, o simplemente para cerrar la sesión cuando no la vayamos a usar más, usamos la opcion -kill de vncserver:
vncserver -kill :1
Si la ventana de nuestro visualizador es más pequeña que el area de escritorio que hemos puesto al servidor remoto, aparecen en los laterales barras de desplazamiento, pero trabajar asi se hace incomodo. El tamaño del area de trabajo del servidor se establece con la opcion -geometry, y podemos darle el que más nos interese, no tiene porque ser uno de los estandares. En Guadalinex, con una resolución en el ordenador local de 1024x768, yo uso: 1024 de ancho, porque cuando maximizo la ventana desaparecen los bordes y puedo aprovecharlo al completo, y 710 de alto, que me permite verla entera, en el espacio que me queda al quitar lo que ocupa el panel superior de GNOME y la cabecera de la ventana:
vncserver :1 -name trabajo -depth 16 -geometry 1024x710





