miércoles, 7 de noviembre de 2012

Guacamole! Escritorio remoto via web!

Hoy vamos a instalar en nuestra máquina una aplicación web basada en java y en html que nos permitirá usar un navegador para conectarnos por escritorio remoto a cualquier máquina.

Esta aplicación es una pasarela, por lo que si no tenemos instalado el escritorio remoto en la propia máquina de antemano no lo instalará, pero podremos usarlo para conectarnos remotamente a otra. Veamos como instalarlo y luego pasamos a configurarlo, que es relativamente trivial.

Lo primero, instalamos las dependencias:
  1. apt-get install tomcat6 Necesitaremos el tomcat para la parte de java.
  2. apt-get install libcairo2 libpng12-0 libcairo2-dev
  3. apt-get install libvncserver0 Soporte para VNC
  4. apt-get install libfreerdp1 libfreerdp-dev Soporte para RDP
  5. apt-get intsall chechinstall Para compilaciones más adelante
Entramos en la web http://sourceforge.net/projects/guacamole/files/current/binary/ y nos descargamos la versión para nuestra distro (en mi caso uso Debian 7, descargué la de Debian 6 y funciona bien). Descomprimimos y entramos en el directorio. Instalamos los siguientes paquetes:
  • dpkg -i guacd_*.deb guacamole_*.deb libguac3_*.deb libguac-client-vnc0_*.deb
Con estos paquetes tendremos casi todo listo. Sólo falta instalar el último paquete: dpkg -i guacamole-tomcat_*.deb y listo, ya lo tenemos todo configurado automáticamente. Para comprobar que está todo bien instalado, entramos en http://ip_de_nuestro_equipo:8080/guacamole y comprobamos que nos sale la ventana de login.

Ahora nos toca configurar los equipos a los que nos conectaremos.Tenemos dos archivos de configuración: /etc/guacamole/guacamole.properties que no tocaremos y /etc/guacamole/user-mapping.xml que es donde añadiremos las conexiones nuevas.

Ejemlpo RDP:
<!-- Per-user authentication and config information -->
<authorize username="bire" password="1234">
<protocol>rdp</protocol>
<param name="hostname">ip_del_equipo</param>
<param name="port">3389</param>
<param name="domain">DOMINIO</param>
<param name="username">administrador</param>
<param name="password">Passwdmuysegura!</param>
</authorize>

Ejemplo VNC con la contraseña codificada:
<!-- Another user, but using md5 to hash the password (example below uses the md5 hash of "PASSWORD") -->
<authorize
username="USERNAME2"
password="319f4d26e3c536b5dd871bb2c52e3178"
encoding="md5">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5901</param>
<param name="password">VNCPASS</param>
</authorize>

En ambos casos, el usuario y la contraseña definidos en "authorize" es el usuario y la contraseña que usaremos al conectarnos. Dentro, con los "param" podremos definir también un usuario y contraseña para conectarnos. Más info en de los tags en su web: http://guac-dev.org/Configuring%20Guacamole

Con todo esto, tenemos listo la pasarela. Si en "hostname" usamos localhost podremos conectarnos desde la web a la propia máquina. Podremos crear tantos usuarios como necesitemos.

Y... ¡yata! No deríamos tener que hacer nada más que entrar en la web y conectarnos. A mí se me olvido instalar libguac-client-rdp así que me toco seguir los pasos que encontré en esta web para compilarlo: http://dokuwiki.pcfreak.de/doku.php?id=public:linux:guacamole aunque creo que si hubiese instalado el paquete (se me pasó... no pude hacer nah!) no habría tenido problemas.

He revisado y en el paquete que bajamos de la web NO viene  libguac-client-rdp0*.deb, así que no tendremos soporte para RDP a no ser que compilemos el paquete. Vamos a ello:
cd
git clone git://guacamole.git.sourceforge.net/gitroot/guacamole/libguac-client-rdp
cd libguac-client-rdp
Con esto descargamos de git el código fuente, lo siguiente es prepararlo:
libtoolize
aclocal
automake --force-missing --add-missing
autoconf
./configure --prefix=/usr 
make
Si nos da algún fallo, instalamos las dependencias que faltasen. Ahora haría falta hacer un "make install" pero como estamos trabajando sobre Debian, haremos un deb y lo instalaremos:
checkinstall -y [email protected] --pkgname=libguac-client-rdp --pkgversion=0.6.0 --install=no -D make install
dpkg -i libguac-client-rdp_0.6.0-1_i386.deb
Con esto, ya debería de funcionar todo bien.

He tenido un problema y es que el demonio guacd no arrancaba:
Nov  8 17:25:16 LIME guacd[18640]: Guacamole proxy daemon (guacd) version 0.6.2
Nov  8 17:25:16 LIME guacd[18640]: Unable to bind socket to host ::1, port 4822: Address family not supported by protocol
Nov  8 17:25:16 LIME guacd[18640]: Successfully bound socket to host 127.0.0.1, port 4822
Nov  8 17:25:16 LIME guacd[18640]: Exiting and passing control to PID 18641
Nov  8 17:25:16 LIME guacd[18641]: Exiting and passing control to PID 18642
Nov  8 17:25:16 LIME guacd[18642]: Could not write PID file: No such file or directory
Lo he solucionado creando una carpeta para el PID del demonio en /var/run llamada guacd con permisos 755 (los que pone por defecto) y dandole la propiedad de la carpeta al usuario guacd. Después de eso, ya arranca.
Nada, al reiniciar lo anterior no es persistente. Toca editar el archivo de inicio /etc/init.d/guascd y añadir estas lineas para que lo cree en el arranque:
if [  ! -d /var/run/$NAME ]; then
mkdir /var/run/$NAME;
chown $NAME /var/run/$NAME;
fi
Esto viene de que en Debian 7 (al menos) la carpeta /run está montada como una carpeta temporal y en cada reinicio se regenera.

Espero que a alguien le sirva todo esto, ¡Un saludo!