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/
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:
Al loguearnos nos pedirá contraseña del usuario indicado en el apartado connection. Introducimos dicha contraseña y accederemos a su cuenta
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!
[…] a través de Instalación y configuración de Apache Guacamole en Debian Stretch — Open Binary 2.0 […]
Me gustaMe gusta
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
Me gustaLe gusta a 1 persona
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 gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
como unes OpenStack con Guacamole hasta donde entiendo este es un dvi broker o no es asi?
Me gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
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
Me gustaLe gusta a 1 persona
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 gustaMe gusta
[…] Instalación y configuración de Apache Guacamole en Debian Stretch […]
Me gustaMe gusta
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 gustaMe gusta
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 gustaMe gusta
[…] Instalación y configuración de Apache Guacamole en Debian Stretch […]
Me gustaMe gusta