Guacamole – RDP/SSH over HTTP

On va voir ici comment comment mettre en place l’outil Guacamole (Client & Server) sur un Ubuntu 14, Guacamole c’est en gros un proxy rdp/ssh/vnc sur http, l’interface est en html5 donc pas besoin de flash ou de java, c’est du bonheur et l’outil est vraiment impressionnant, je vous laisse regarder la vidéo sur la page d’accueil du site de l’éditeur http://guac-dev.org/

Un petit schéma vaut mieux qu’une longue explication :

guac-arch

On va commencer par installer toutes les libraires nécéssaire à la compilation ainsi que « git » pour cloner la dernière version du code depuis Github :

sudo apt-get install automake autoconf libtool libcairo2-dev libpng12-dev libossp-uuid-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev libtelnet-dev libvncserver-dev libpulse-dev libssl-dev libvorbis-dev git

On va maintenant cloner les sources :

git clone git://github.com/glyptodon/guacamole-server.git

Puis on va générer le script configure et l’exécuter :

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

On compile maintenant les sources, on lance l’install et on démarre le service :

make
sudo make install
sudo ldconfig
service guacd start

Maintenant on va se charger de la partie cliente de l’application, il s’agit d’une application java, nous allons utiliser jetty comme serveur (légèreté et perfs).

sudo apt-get install jetty

On va aller changer les valeurs suivantes dans le fichier /etc/default/jetty

# change to 0 to allow Jetty to start
NO_START=0

# change to 'no' or uncomment to use the default setting in /etc/default/rcS
VERBOSE=yes

# Run Jetty as this user ID (default: jetty)
# Set this to an empty string to prevent Jetty from starting automatically
#JETTY_USER=jetty

# Listen to connections from this network host
# Use 0.0.0.0 as host to accept all connections.
# Uncomment to restrict access to localhost
JETTY_HOST=0.0.0.0

Puis on lance le service :

service jetty start

On va maintenant récupérer la dernière version de l’application java depuis sourceforge :

http://sourceforge.net/projects/guacamole/files/current/binary/

wget http://downloads.sourceforge.net/project/guacamole/current/binary/guacamole-0.9.4.war?r=&ts=1421095336&use_mirror=optimate

Une fois l’application téléchargée on la déplace dans le répertoire d’application de jetty puis on redémarre le service. Chez moi :

mv /home/guacamole-0.9.4.war /usr/share/jetty/webapps/guacamole.war
service jetty restart

On va maintenant créer le répertoire pour stocker les fichiers de configurations de l’application (login et connexions)

mkdir /usr/share/jetty/.guacamole
cd /usr/share/jetty/.guacamole/
nano guacamole.properties

On y colle le contenu suivant :

# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port:     4822

# Location to read extra .jar's from
lib-directory:  /usr/share/jetty/.guacamole

# Authentication provider class
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider

# Properties used by BasicFileAuthenticationProvider
basic-user-mapping: /usr/share/jetty/.guacamole/user-mapping.xml

On va maintenant créer le fichier permettant de définir les différentes connexions :

nano /usr/share/jetty/.guacamole/user-mapping.xml

Dans l’exemple j’ai paramétré une connexion rdp et ssh (tout est dispo dans la doc) :

<user-mapping>
    <authorize username="username" password="passwd">
        <connection name="rdp_zW7">
                <protocol>rdp</protocol>
                <param name="hostname">@host</param>
                <param name="port">3389</param>
                <param name="server-layout">fr-fr-azerty</param>
                <param name="color-depth">16</param>
        </connection>
        <connection name="ssh_guacamole">
                <protocol>ssh</protocol>
                <param name="hostname">127.0.0.1</param>
                <param name="port">22</param>
                <param name="server-layout">fr-fr-azerty</param>
                <param name="color-depth">16</param>
        </connection>
    </authorize>
</user-mapping>

On peut maintenant se connecter via le navigateur http://url:8080/guacamole

gcm

On se logue et voilà le travail!

gcm-int

On verra dans un prochain article comment publier l’application au travers un ReverseProxy Nginx.

Amusez vous bien!

EDIT : Nouvel Article sur le paramétrage des fonctionnalités d’impression et de transfert de fichier entre le client et la machine distante.

EDIT2 : Commentaires d’un lecteur :

1/ après git … faire un cd guacamole-server pour ensuite compiler.
2/ Lors de la compilation, il y a une erreur dans le fichier guacamole-server/src/guacd/Makefile où lignes 996 et 997 il faut remplacer les blancs par une tabulation.
3/ service guacd start n’a pas fonctionné mais /etc/init.d/guacd start car non vu comme service
4/ jetty n’est plus dispo mais uniquement jetty8 dans Debian 8

3 commentaires

  1. Bonjour,

    Tres bon tuto en revanche je pense qu’il faudrait parler de la possibilité d’utiliser mysql pour la gestion avec console d’administration veritablement encore plus puissante !!

    Encore bravo pour ce site.

  2. Bravo! Après avoir ramé sur les solutions packagées sur Debian/Ubuntu (erreur serveur, connection impossible…), je suis tombé sur ce tuto. Excellent.
    Peut-être ajouter
    1/ après git … faire un cd guacamole-server pour ensuite compiler.
    2/ Lors de la compilation, il y a une erreur dans le fichier guacamole-server/src/guacd/Makefile où lignes 996 et 997 il faut remplacer les blancs par une tabulation.
    3/ service guacd start n’a pas fonctionné mais /etc/init.d/guacd start car non vu comme service
    4/ jetty n’est plus dispo mais uniquement jetty8 dans Debian 8
    Encore bravo.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.