Instalación y configuración de Apache Guacamole en Debian Stretch

Buenos días | tardes | noches, hoy veremos cómo instalar, configurar y usar Apache Guacamole, una herramienta que nos permite conectarnos remotamente por web mediante protocolos cómo SSH, RDP, VNC.

¿Qué es Apache Guacamole?

Apache Guacamole es una herramienta libre y Open-Source que nos permite conectarnos remotamente a un servidor mediante el navegador web sin necesidad de usar un cliente.

Gracias a HTML5, una vez tengamos instalado y configurado Apache Guacamole, tan solo tenemos que conectarnos mediante el navegador web para empezar a trabajar remotamente.

¿Qué es Tomcat?

Apache Guacamole no es una aplicación web autónoma y está compuesta de muchas partes. La aplicación web en realidad está diseñada para ser simple y mínima.

Una de esas partes, y esencial, es Tomcat. Tomcat es una especie de contenedor de ServLets que nos permite ejecutar herramientas desarrolladas con Java Server Page (JSP).

Para poder usar aplicaciones con Tomcat, este las “comprime” en ficheros .war.

¿Qué es un fichero .war?

Un fichero .war es una Aplicación Web que permite a Tomcat acceder a su utilización. El fichero .war en sí no es legible sino que tiene que ser expandido/descomprimido para ser leído.

Instalación de Guacamole-server

Comezamos con la instalación de Apache Guacamole-Server. Primero debemos instalar los paquetes mínimos necesarios, después podrémos elegir qué protocolos usar según nuestras necesidades.

Instalamos los paquetes principales necesarios:

apt install libcairo2-dev libjpeg62-turbo-dev libpng-dev libossp-uuid-dev gcc make tomcat8 tomcat8-admin tomcat8-user

Ahora podemos elegir, según nuestras necesidades, qué paquetes instalar:

  • Usar Guacenc:
apt install libavcodec-dev libavutil-dev libswscale-dev
  • Usar el soporte para RDP:
apt install libfreerdp-dev
  • Usar el soporte para SSH:
apt install libpango1.0-dev libssh2-1-dev
  • Usar el soporte para telnet:
apt install libpango1.0-dev libtelnet-dev
  • Usar el soporte para VNC y el audio:
apt install libvncserver-dev libpulse-dev
  • Usar el soporte para OpenSSL (es necesario si usamos el soporte de SSH para manejar las claves públicas y privadas):
apt install libssl-dev
  • Usar soporte para Ogg Vorbis:
apt install libvorbis-dev
  • Usar soporte para WebP:
apt install libwebp-dev

 

En mi caso, instalaré las librerias para usar SSH y Guancec quedando así el comando con los paquetes a instalar:

apt install libavcodec-dev libavutil-dev libswscale-dev libpango1.0-dev libssh2-1-dev libssl-dev

Procedemos a descargamos el paquete correspondiente al servidor y lo desempaquetamos:

tar -xzf guacamole-server-0.9.14.tar.gz
cd guacamole-server-0.9.14

Ejecutamos el configurador automático para verificar si disponemos de las librerías anteriormente instaladas:

./configure --with-init-dir=/etc/init.d

NOTA: este proceso tardará unos cinco minutos, se aconseja tener paciencia.

Compilamos guacamole-server (estando en el mismo directorio que cuando lanzamos el configure):

make

Procedemos a instalar guacamole-server:

make install

Una vez terminada la instalación, actualizamos las librerías instaladas en el sistema:

ldconfig

Instalación de Guacamole-client

Procedemos a la instalación del cliente. Este tenemos que instalarlo en el mismo equipo que el servidor ya que será el que nos dé el fichero .war.

Nos descargamos el cliente desde su web de descargas y desempaquetamos el fichero:

tar -zxf guacamole-client-0.9.14.tar.gz
cd guacamole-client-0.9.14

Para poder desplegar guacamole client, necesitaremos instalar el paquete correspondiente al comando que deberemos utilizar para crear el .war y el kit de desarrollo de java 8:

apt install maven openjdk-8-jdk

Creamos el fichero .war de guacamole-client:

mvn package

Si no nos ha dado fallo (no debería darlos) y todo ha ido bien, encontraremos el fichero .war en el directorio guacamole/target (estando dentro del directorio de guacamole-client-0.9.14)

Ahora creamos el directorio webapps dentro de /var/lib/tomcatX (dependiendo de la versión instalada, en mi caso la 8) y copiamos renombrando el nombre del .war:

mkdir /var/lib/tomcat8/webapps && cp guacamole/target/guacamole-0.9.14.war /var/lib/tomcat8/webapps/guacamole.war

En caso de que el anterior comando no os funcione, podéis hacerlo paso a paso:

mkdir /var/lib/tomcat8/webapps
cd guacamole/target/
mv guacamole-0.9.14.war guacamole.war
cp guacamole.war /var/lib/tomcat8/webapps/guacamole.war

Procedemos a reiniciar tomcat8:

/etc/init.d/tomcat8 restart

Iniciamos el servicio guacd:

/etc/init.d/guacd start
 Starting guacd: guacd[4371]: INFO: Guacamole proxy daemon (guacd) version 0.9.14 started
 SUCCESS

Con esto ya estará disponible (pero no accesible) guacamole accediendo a la url http://<ip del servidor>:8080/guacamole/

g1.PNG

Configuración de Guacamole Server

Creamos los directorios /etc/guacamole y /usr/share/tomcat8/.guacamole:

mkdir /etc/guacamole /usr/share/tomcat8/.guacamole

Creamos el fichero guacamole.properties en /etc/guacamole:

cd /etc/guacamole
touch guacamole.properties

Editamos el fichero y agregamos las siguientes lineas:

guacd-hostname: localhost
guacd-port: 4822
user-mapping: /etc/guacamole/user-mapping.xml
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml

Ahora creamos un enlace simbólico al directorio creado en /usr/share/tomcat8 :

ln -s guacamole.properties /usr/share/tomcat8/.guacamole/

Continuamos creando el fichero user-mapping.xml en /etc/guacamole con el siguiente contenido:

<user-mapping>
  <authorize
    username="usuario"
    password="f8032d5cae3de20fcec887f395ec9a6a"
    encoding="md5">
   <connection name="SSH">
    <protocol>ssh</protocol>
    <param name="hostname">192.168.1.112</param>
    <param name="port">22</param>
    <param name="username">usuario</param>
   </connection>
  </authorize>
</user-mapping>

Dónde:

  • Authorize tag: define los usuarios que iniciarán sesión en la interfaz web.
  • Connection tag: define el nombre de la conexión
  • Protocol tag: define los protocolos que el usuario podrá usar.
  • Param tag: define hostname del cliente que se conectará, puerto a usar y usuario al que podrá conectarse.

La contraseña del usuario usuario la hemos sacado con:

printf '%s' "<contraseña>" | md5sum

Modificamos permisos, propietario y grupo propietario del fichero user-mapping.xml:

chmod 600 user-mapping.xml
chown tomcat8:tomcat8 user-mapping.xml

Reiniciamos tomcat8 y guancd:

/etc/init.d/tomcat8 restart
/etc/init.d/guacd restart

Prueba de funcionamiento

En un cliente (en este caso de la misma red) nos vamos al navegador, escribimos la url del servidor (http://<ip del servidor>:8080/guacamole) e introducimos usuario y contraseña definidos en el tag authorize:

g2.PNG

Al loguearnos nos pedirá contraseña del usuario indicado en el apartado connection. Introducimos dicha contraseña y accederemos a su cuenta

g4

Si queréis saber más acerca de los parámetros de configuración del fichero user-mapping.xml os recomiendo visitar el manual de configuración.

Instalación automatizada

Os dejo el script realizado en bash para la instalación automática de Apache Guacamole Server y Client.

Encontraréis información de cómo ejecutarlo en el README del repositorio.

Saludos, espero que os haya gustado y ¡nos vemos en la siguiente entrada!

Anuncios

15 comentarios sobre “Instalación y configuración de Apache Guacamole en Debian Stretch

  1. amigo cuando realizo este paso haciendo la instalación me indica que el fichero .war no existe quisiera saber como solucionar esto ya que todo va saliendo bien hasta este paso mkdir /var/lib/tomcat8/webapps && cp guacamole-0.9.14.war /var/lib/tomcat8/webapps/guacamole.war
    lo estoy haciendo en un vm con debian 9.3

    Le gusta a 1 persona

    1. Realmente ese comando es una unión de 3. Es decir, está simplificado.

      Puedes ejecutarlo individualmente de la siguiente forma:
      mkdir /var/lib/tomcat8/webapps
      cp guacamole-0.9.14.war /var/lib/tomcat8/webapps/guacamole-0.9.14.war
      mv guacamole-0.9.14.war guacamole.war

      Espero que así si te sirva, de todas formas será modificado para poder optar por los dos métodos

      Me gusta

  2. Sabes que pude resolver el problema el fichero se encuentra en guacamole-client-0.9.14/guacamole/target y esta el fichero guacamole-0.9.14.war ahora tengo otro problema cuando ejecuto /etc/init.d/guacd start me indica lo siguiente Starting guacd: guacd[7775]: INFO: Guacamole proxy daemon (guacd) version 0.9.14 started

    guacd[7775]: ERROR: Unable to bind socket to any addresses FAIL

    no se a que se deba el siguiente error de verdad si me puedes ayudar seria muy valioso para mi

    Me gusta

    1. Creo que la solución que pude encontrar era “matando” el proceso que lo mantenía vivo (es cómo reiniciar el servicio, pero por la fuerza)

      Prueba a buscar el proceso en sí con:
      ps -aux | grep guacd

      Y matalo con:
      kill -9

      Después inicia el servicio GUACD y volverás a poder conectarte.

      Saludos!

      Me gusta

  3. Buenas Amigo este tengo todo configurado como dice en la pagina no me genera error de ningún tipo y aun así no me funciona con protocolo vnc sera que de casualidad tendrás otro truco ya que me quede sin flechas muchas gracias por la ayuda anterior me funciono sin problema.

    Me gusta

    1. Con VNC he estado probando y al parecer Apache Guacamole no es capaz de comunicarse correctamente con la libreria correspondiente a VNCServer (es un bug aparecido en la versión 0.9.13).

      De todas formas te invito a que si encuentras la solución me informes de ello y me cuentes cómo lo has logrado.

      Muchas gracias por el interés mostrado.
      Saludos.

      Me gusta

    1. Openstack tiene su propio componente, Apache Guacamole es totalmente independiente de Openstack.

      Openstack usa, si mal no recuerdo, Nova con OpenStack Client para proveer a los clientes finales una CLI web.

      Y si, Apache Guacamole podría ser un vdi broker.

      Me gusta

  4. Buen manual y funciona perfectamente tanto para VNC como para SSH, no así para RDP ya que mira que errores me saltan cuando intento una conexión con RDP:

    Aug 18 09:25:19 guacamole guacd[465]: Creating new client for protocol “rdp”
    Aug 18 09:25:19 guacamole guacd[465]: Connection ID is “xxxxxxx”
    Aug 18 09:25:19 guacamole guacd[874]: No security mode specified. Defaulting to RDP.
    Aug 18 09:25:19 guacamole guacd[874]: Resize method: none
    Aug 18 09:25:19 guacamole guacd[874]: User “xxxxxx” joined connection “xxxxxx” (1 users now present)
    Aug 18 09:25:19 guacamole guacd[874]: Loading keymap “base”
    Aug 18 09:25:19 guacamole guacd[874]: Loading keymap “en-us-qwerty”
    Aug 18 09:25:19 guacamole guacd[874]: Failed to load guacdr plugin. Drive redirection and printing will not work.Sound MAY not work.
    Aug 18 09:25:19 guacamole guacd[874]: Failed to load guacsnd alongside guacdr plugin. Sound will not work. Drive redirection and printing MAY not work.
    Aug 18 09:25:19 guacamole guacd[874]: Error connecting to RDP server
    Aug 18 09:25:19 guacamole guacd[874]: User “xxxxxxx” disconnected (0 users remain)
    Aug 18 09:25:19 guacamole guacd[874]: Last user of connection “xxxxxxx” disconnected
    Aug 18 09:25:19 guacamole guacd[465]: Connection “xxxxx” removed.

    Me gusta

    1. Me autocontesto:

      Para conectar a W10 y W2016 hace falta cambiar unas claves de registro tal y como se indica en este link:
      https://blog.happynavy.tk/guacamole-rdp-windows-10-and-windows-server-2016/

      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
      “SecurityLayer”=dword:00000001
      “UserAuthentication”=dword:0x00000000

      Ahora me toca investigar los errores de sonido e impresión que creo que se puede solucionar así:

      https://sourceforge.net/p/guacamole/discussion/1110834/thread/76764d35/?limit=25

      Salu2

      Me gusta

  5. Enhorabuena por la guía; la he realizado al pie de letra y he podido configurar conexiones ssh, rdp y vnc.

    Me he encontrado con un “problema” a la hora de hacer c&p en sesiones vnc, parece que no hay comunicación entre mi clipboard y el clipboard del servidor vnc remoto. ¿Te ha pasado? Uso tightvncserver en instalaciones Windows.

    Muchas gracias, reitero mi enhorabuena por la guía,
    Un saludo

    Le gusta a 1 persona

    1. Muchísimas gracias, de verdad, la verdad es que es un placer saber que os sirve de ayuda.

      Respecto al problema que comentas, es una sorpresa para mi. En ningún momento me ha llegado a ocurrir. Espero que encuentres la solución.

      Un saludo y espero que la próxima entrada que publique os guste tanto como ésta.

      Me gusta

  6. Buenos días. He seguido el tutorial de cabo a rabo y parece que el servicio funciona correctamente.
    Porque relleno los datos de user-mapping.xml con los que ami me interesa y una vez guardado ejecuto:
    /etc/init.d/tomcat8 restart
    [ ok ] Restarting tomcat8 (via systemctl): tomcat8.service.

    Tomcat me da = OK

    /etc/init.d/guacd restart
    Stopping guacd: SUCCESS
    Starting guacd: guacd[29861]: INFO: Guacamole proxy daemon (guacd) version 0.9.14 started
    SUCCESS

    Guacd me da = OK

    Accedo a la dirección para logearme por http://localhost:8080/guacamole/#/ o http://172.21.0.20:8080/guacamole/#/, introduzco usuario “admin” y contraseña admin (o generado en MD5 = b9186be9095e125cf5e7cb98f2ffd9c8) .

    Me sale simplemente Invalid Login

    Reviso el log de /var/log/tomcat8/catalina.out
    Y al final del todo me aparece

    10:55:47.341 [http-nio-8080-exec-5] WARN o.a.g.r.auth.AuthenticationService – Authentication attempt from 0:0:0:0:0:0:0:1 for user “admin” failed.
    10:59:25.953 [http-nio-8080-exec-2] WARN o.a.g.r.auth.AuthenticationService – Authentication attempt from 172.21.0.20 for user “admin” failed.

    Alguna idea de que es lo que podría estar fallando?

    Saludos

    Me gusta

    1. Podría ser que el fichero de configuración esté mal configurado, ya sea por algún espacio o errata.

      Prueba con establecer alguna contraseña simple y si te funciona, cámbiala por alguna más complicada de descifrar.

      Un saludo.

      Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.