26 mar
2008
SSH via un site Internet : et en Ajax s'il vous plait !
Posté par KissCoolMan | administration, astuce, linux, serveur, shell
Si pour une raison ou pour une autre, vous êtes amenés à vous connecter à Internet via un proxy ou un pare-feu (firewall), comme par exemple dans votre établissement scolaire, ou dans votre entreprise, vous avez déjà dû remarquer que la plupart du temps, le port 22 est bloqué pour des raisons de sécurité, et il est donc impossible de se connecter à un serveur distant via SSH. De plus, même en faisant tourner SSH sur un autre port, cela ne fonctionne pas non plus car les autres ports peuvent être bloqués également.
Voici une solution simple à mettre en place, ça s'appelle AjaxTerm, et ça ressemble à ça !
(note : toutes les commandes suivantes ont été réalisées sur la distribution Linux Debian 4.0 « Etch ». Cependant, la plupart des commandes et fichiers doivent être identiques ou quelque peu adaptés selon les paquets présents pour fonctionner sur une autre distribution)
Pré-requis
On va considérer que vous possédez :
- un serveur avec apache2 installé et configuré
- le mod_ssl correctement configuré
Pourquoi cette solution ?
On peut se demander pourquoi avoir choisi cette solution qui peut s'avérer lente, et parfois pas très pratique (comme par exemple le support très limité du copier/coller). Cependant, cette solution est idéale à plusieurs points de vue :
- Côté serveur, c'est une solution très simple à mettre en place, il suffit d'installer un paquet et de configurer un site dans Apache pour que ce soit fonctionnel.
- Côté client, il suffit d'accéder à une page web pour avoir un accès SSH.
- Et pour ce qui est des règles de l'administrateur système et réseau du lieu où vous vous trouvez, je pense que cette solution est beaucoup plus respectueuse qu'un tunnel HTTP, et beaucoup moins contraignante côté client comme côté serveur.
Installation
Voici la disponibilité du paquet AjaxTerm :
apt-cache policy ajaxterm
ajaxterm:
Installée : 0.10-2
Candidate : 0.10-2
Table de version :
*** 0.10-2 0
990 ftp://ftp.fr.debian.org testing/main Packages
500 ftp://ftp.fr.debian.org unstable/main Packages
100 /var/lib/dpkg/status
Comme vous pouvez le constater, le paquet est disponible dans les distributions testing et unstable de Debian. Si vous utilisez la version stable, ne vous inquiétez pas, voilà comment installer des paquets de plusieurs distributions différentes facilement avec apt.
On installe donc le paquet de manière habituelle :
apt-get install ajaxterm
Configuration
Ajaxterm
AjaxTerm possède un tout petit fichier de configuration /etc/default/ajaxterm, qui permet de régler le port par défaut sur lequel va écouter AjaxTerm, et le port sur lequel écoute d'ores et déjà SSH. Vous pouvez laisser ces paramètres par défaut si vous avez une configuration standard. Si vous changez ces paramètres, pensez à redémarrer ajaxterm via
/etc/init.d/ajaxterm restart
A tout moment, vous pouvez vérifier :
- que le processus tourne :
ps aux | grep ajaxterm - que le processus écoute sur le port que vous lui avez donné :
, donc pour ma part par exemple c'est :netstat -a | grep LEPORT
qui doit renvoyer une ligne du type :netstat -a | grep 8022tcp 0 0 host:8022 *:* LISTEN - que AjaxTerm est fonctionnel :
, et cela doit vous renvoyer le code HTML de la page.telnet localhost LEPORT GET /
Apache2
Pour ce qui est de la configuration d'Apache2, il va déjà falloir activer les modules ssl, proxy, et proxy_html si ce n'est pas déjà le cas sur votre serveur. Pour vérifier les modules déjà installés, il suffit de lister le contenu du répertoire /etc/apache2/mods-enabled :
ls /etc/apache2/mods-enabled
S'il vous manque un des modules nécessaires, regardez dans le répertoire /etc/apache2/mods-avaible s'il y est, et si tel est le cas, vous n'avez qu'à les activer avec la commande :
a2enmod module
Ce qui donne par exemple :
a2enmod proxy
Normalement, les modules proxy et ssl font partie du paquet apache2.2-common de Debian, et le module proxy_html fait parti du paquet libapache2-mod-proxy-html.
Je ne détaille pas la configuration initiale du mod_ssl, car je le ferais dans un autre billet un peu plus tard.
On va maintenant ouvrir notre site apache2 qui contient notre configuration ssl pour le modifier. Pour ma part, cela se trouve dans le fichier /etc/apache2/sites-avaible/default, et on va y ajouter une redirection par proxy dans le IfModule mod_ssl.c de cette manière :
ProxyRequests off
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass /emplacement_voulu_pour_ajaxterm/ http://localhost:PORT/
ProxyPassReverse /emplacement_voulu_pour_ajaxterm/ http://localhost:PORT/
ce qui donne, dans le contexte :
<IfModule mod_ssl.c>
<VirtualHost ip_du_serveur:443>
ServerName mondomaine.tld
SSLEngine on
SSLCertificateChainFile /etc/apache2/ssl/sub.ca.crt
SSLCACertificateFile /etc/apache2/ssl/ca.crt
SSLCertificateFile /etc/apache2/ssl/new.cert.cert
SSLCertificateKeyFile /etc/apache2/ssl/new.cert.key
ProxyRequests off
<Proxy *>
Order allow,deny
Allow from all
</Proxy>
ProxyPass /AjaxTerm/ http://localhost:8022/
ProxyPassReverse /AjaxTerm/ http://localhost:8022/
</VirtualHost>
</IfModule>
ce qui fera apparaitre AjaxTerm à l'adresse : http://mondomaine.tld/AjaxTerm/. Et c'est terminé :-).

Commentaires
Le mercredi 26 mars 2008 à 20:10, Bzzzzz a écrit :
Le mercredi 26 mars 2008 à 20:49, Awikatchikaen a écrit :
Le jeudi 27 mars 2008 à 07:59, corbier a écrit :
Le jeudi 27 mars 2008 à 10:57, Simon a écrit :
Le jeudi 27 mars 2008 à 18:25, feilong a écrit :
Le lundi 3 novembre 2008 à 18:19, PPmarcel a écrit :
Le lundi 3 novembre 2008 à 19:08, PPmarcel a écrit :
Ajouter un commentaire