Mot-clé - webshell

Fil des billets - Fil des commentaires

jeudi 10 mars 2011

Ajaxterm : un client SSH en web

Petite présentation

J'ai enfin trouvé un client web qui me permette de prendre la main sur mes serveurs quand je n'ai pas de client SSH accessible ou que les ports (généralement le 22) sont bloqués. Son nom : Ajaxterm.
Le site de l'âme charitable qui nous le met à disposition : http://antony.lesuisse.org/software/ajaxterm/

Installation

L'installation sous Debian est très simple, Ajaxterm étant disponible dans les dépôts. On commence donc par un classique "apt-get install ajaxterm" pour installer Ajaxterm et les dépendances qui vont bien, en particulier Apache. Attention toutefois, ceci installe la version 0.7. La dernière version lors de l'écriture de ce billet est la 0.11.

Configuration

Le serveur Ajaxterm est écrit en Python et écoute sur le port 8022 en local. Vous pouvez d'ores et déjà vérifier son fonctionnement en lançant un w3m (ou n'importe quel navigateur) à l'adresse http://localhost:8022/. Si besoin, le port peut être modifié dans /etc/default/ajaxterm.

Pour activer un accès depuis une autre machine, on peut ajouter un vhost à Apache qui se contentera de rediriger les requêtes vers Ajaxterm, par le biais du module mod_proxy. Évidemment, ce vhost devra être accessible en HTTPS si on veut conserver l'avantage du chiffrement SSL/TLS.

Cette fonctionnalité nécessite d'activer les modes mod_proxy, mod_proxy_http et mod_ssl :
a2enmod ssl
a2enmod proxy
a2enmod proxy_http

Génération d'un certificat auto-signé

Pour avoir un accès en SSL on peut utiliser un certificat existant ou générer un certificat auto-signé :
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/ajaxterm.crt
Bien évidemment, ce certificat auto-signé lèvera une erreur dans le navigateur. Il est préférable de le signer avec un certificat racine approuvé par le navigateur.

Ajout d'un vhost Apache

On crée donc un /etc/apache2/sites-available/ajaxterm que l'on paramètre pour rediriger les requêtes de /ajaxterm/ vers le port 8022 :

<VirtualHost *:443>

ServerName localhost
SSLEngine On
SSLCertificateFile /etc/ssl/ajaxterm.crt
ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /ajaxterm/ http://localhost:8022/
ProxyPassReverse /ajaxterm/ http://localhost:8022/

</VirtualHost>

Et on l'active :
a2ensite ajaxterm
Et là youpi ! En pointant un navigateur vers https://IP_du_serveur/ajaxterm/ on peut ouvrir une session SSH sur le serveur.

Augmentation du timeout de la session

Par défaut, votre session SSH se terminera après deux minutes d'inactivité. Je n'ai pas vraiment compris pourquoi mais ce temps peut être augmenté sans problème. Éditons le fichier /usr/share/ajaxterm/ajaxterm.py. À la ligne 395, on remplace modifie la valeur de INACTIVE_PROCESS_TIMEOUT pour le mettre par exemple à 300 secondes (5 minutes). Après un petit redémarrage d'Ajaxterm (/etc/init.d/ajaxterm restart) le nouveau timeout d'inactivité est pris en compte.

Conclusion

Les avantages :

  • Passe les proxy.
  • Simplicité d'installation ;

Les inconvénients :

  • Pas de session SSH vers un autre serveur, uniquement en local ;
  • Pas avec compatible IE7 (ok avec IE8) EDIT 11/03/2011 : en fait si, aujourd'hui ça fonctionne ;
  • Reset de la connexion au bout de 2 minutes d'inactivité (modifiable) ;
  • Nécessite un reverse proxy pour l'atteindre depuis une autre machine. Le paquet ajaxterm dépend d'Apache.