Jusqu'à hier, j'essayais d'utiliser ajaxterm pour disposer d'un accès shell de partout. Le problème récurrent étant que les proxy d'entreprises ne laissent jamais passer les flux SSH sortants, mais laissent souvent passer le HTTPS.

J'avais donc mon SSH dans du HTTPS (avec certificat client), mais récemment ça s'est arrêté de fonctionner. La faute à qui ? Peut être à Firefox qui a changé la façon dont le javascript est traité, ou peut être au proxy de ma boite, qui a été mis à jour (la j'ai un doute, vu le niveau technique du truc), ou même à l'antivirus, la bouse, qui me pourrit ma machine pro et qui filtrerait un peu trop le contenu de mes pages (je sais pas trop si ça peut se hooker dans firefox, ce truc, et analyser le flux après le déchiffrement du SSL).

Bref, Ajaxterm en berne. Ce qui était des plus embêtant. Du coup il fallait bien lui trouver un remplaçant, et c'est la qu'Anyterm intervient.

Il s'agit en fait d'un programme codé en C++ qui fournit une interface HTTP et une page web avec tout plein de javascript dedans (les communications se faisant en AJAX). Le terminal ressemble à ça : 

Anyterm relais la connexion entrante vers soit un shell bash (par défaut), soit une connexion SSH sur n'importe quelle machine. L'avantage d'aller directement vers un shell bash se fait vite ressentir en terme de fluidité, le ssh avec ajaxterm ajoutait une latence, voir des lags, non négligeables.

Petit soucis, à la différence d'ajaxterm, anyterm n'est pas packagé pour Debian (faudra que j'essai pour voir). Pour le compiler sur Debian (squeeze), il vous faudra les packages libboost1.41-dev, zlib1g-dev, g++ et make.

La dernière version de dev, qui marche au poil est dispo ici: http://anyterm.org/download/anyterm-1.1.29.tbz2 (ou sur la page de download)

Avant de compiler, vous pourriez vouloir agrandir la taille du terminal dans la page si, comme moi, vous trouvez que 25*80 ça fait petit. Dans ce cas, éditez la ligne create_term dans le fichier browser/anyterm.html et mettez, par exemple, 40*120. De même, on peut augmenter la taille de l'historique de commande pour le passer de 50 lignes à 1000 (le maximum), pratique pour les gros fichiers de logs.

<script type="text/javascript"> 
  // To create the terminal, just call create_term.  The paramters are:
  //  - The id of a <div> element that will become the terminal.
  //  - The title.  %h and %v expand to the hostname and Anyterm version.
  //  - The number of rows and columns.
  //  - An optional parameter which is substituted for %p in the command string.
  //  - An optional character set.
  //  - An option number of lines of scrollback (default 0).
  window.onload=function() {create_term("term","%h (Anyterm%v)",40,120,"","",1000);};

Détail important qui apparait sous squeeze et pas sous lenny, il faut rajouter l'include

#include <cstdio>
au fichier libpbe/src/SmtpClient.cc, sinon le make se vautre avec une erreur qui serait apparemment due a gcc 4.4:
../src/SmtpClient.cc: In member function void SmtpClient::wait_for_reply(int, int):
../src/SmtpClient.cc:82: error: sscanf was not declared in this scope

Et pour compiler, un simple make fait le boulot.On peut ensuite lancer le binaire, qui se daemonize tout seul (fork, fermeture des descripteurs, raccrochement au processus init) via la commande:

$ ./anytermd --user admin -p 8022

Qui va donc nous lancer un processus en écoute sur le port 8022. Reste plus qu'à proxyfier les flux via Apache, Nginx ou son serveur web préféré, vers le port 8022. J'ai une préférence personnelle pour le certificat X509 client pour m'authentifier sur le terminal, car au moins, si le SSL ne négocie pas, aucune donnée n'est envoyée au serveur. On évite donc les bypass d'authentification dans le code.

Pour les exemples de conf d'Apache, voir ici: http://wiki.linuxwall.info/doku.php/en:ressources:dossiers:apache:client_certificate