SSH via un site Internet : et en Ajax s'il vous plait ! - Betaphile.net : Amoureux des versions Beta...

Betaphile.net : Amoureux des versions Beta...

Linux, Développement, Administration, Logiciels Libres ...

Aller au contenu - Aller au menu - Aller à la recherche



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 !

Aperçu d'AjaxTerm

(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é :
    netstat -a | grep LEPORT
    , donc pour ma part par exemple c'est :
    netstat -a | grep 8022
    qui doit renvoyer une ligne du type :
    tcp    0   0 host:8022         *:*            LISTEN
  • que AjaxTerm est fonctionnel :
    telnet localhost LEPORT
    GET /
    , et cela doit vous renvoyer le code HTML de la page.

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é :-).

Trackbacks

Aucun trackback pour le moment.

Les trackbacks pour ce billet sont fermés.

Commentaires

Le mercredi 26 mars 2008 à 20:10, Bzzzzz a écrit :

J'aime le printscreen avec BZ... Sinon oui, c'est tres interessant !

Le mercredi 26 mars 2008 à 20:49, Awikatchikaen a écrit :

Depuis le temps que j'attendais un truc dans le genre !!! merci

Le jeudi 27 mars 2008 à 07:59, corbier a écrit :

Ce qui est très intéressant c'est de pouvoir administrer son serveur via une page web.

Après il faut laisser passer un certain temps pour que le projet murisse et devient stable, avant une installation en prod qui simplifierait la gestion des servers.

Le jeudi 27 mars 2008 à 10:57, Simon a écrit :

Il suffit de faire tourner SSH sur le port 443, habituellement utilisé pour le https. Le proxy http n'y verra que du feu, puisque dans le cas du port 443, il se contente de faire proxy tcp, et laissera passer la connexion.

Et si vous avez un serveur HTTPS ET un serveur SSH à faire tourner sur le port 443, http://sam.zoy.org/blog/2007-04-23-use-sshd-and-httpd-on-the-same-port-almost

Le jeudi 27 mars 2008 à 18:25, feilong a écrit :

Très Intéressant. C'est bien pour administrer son serveur à distance derrière un pénible proxy. Juste un bémole, avec ce type de configuration on oublié le proxy socks de openssh.

Le lundi 3 novembre 2008 à 18:19, PPmarcel a écrit :

C´est sympa comme logiciel, seulement ca fait petit lorsqu´on a une grande résolution.

Peut-on adapter la taille du terminal à la fenetre du navigateur?

Le lundi 3 novembre 2008 à 19:08, PPmarcel a écrit :

C´est bon, j´ai trouvé comment redimmensionner le terminal. La taille reste fixe, mais on respire plus :D

http://wiki.kartbuilding.net/index.php/Ajaxterm

Ajouter un commentaire