Accès SSH dans une page Web
Comment intégrer un accès SSH à votre PC perso ou un serveur Linux dans une page Web?
Je me suis posé ce matin la question et voici les résultats de mes recherches.
Ce dont on a besoin
- Serveur Web (apache2, lampp) : OK
- Serveur SSH : OK
- Un programme qui permet d'intégrer l'un dans l'autre: aïe!
Le fameux logiciel
J'ai fait quelques recherches et je suis tombé sur un logiciel en ajax qui après test, me paraît pas mal du tout.
Il date, certes, mais bon, je veux du résultat.
Ajaxterm
La source se trouve ici: http://antony.lesuisse.org/software/ajaxterm/
Let's go!
wget http://antony.lesuisse.org/software/ajaxterm/files/Ajaxterm-0.10.tar.gz
tar xf Ajaxterm-0.10.tar.gz cd Ajaxterm-0.10 ./configure --port 8022 make
make install /etc/init.d/ajaxterm start |
Le port 8022 est par défaut, vous pouvez mettre celui que vous voulez.
Vous pouvez dès lors tester sur le poste où vous venez de faire l'opération, son bon fonctionnement en allant ici: http://localhost:8022/ .
Apache SSL
Si votre serveur gère déjà le SSL, passez cette étape, sinon à vos claviers!
Nous allons devoir générer les clés pour supporter le SSL
En effet, avoir une connexion SSH dans une interface Web non encryptée ne servira à rien, car vos commandes passeront en clair sur le réseau (ce n'est pas du SSH directement).
Lampp
mkidr /opt/lampp/etc/ssl
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /opt/lampp/etc/ssl/server.crt -keyout /opt/lampp/etc/ssl/server.key
Generating a 1024 bit RSA private key .....................................................++++++ ....................++++++ writing new private key to '/etc/apache2/ssl/server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Aquitaine Locality Name (eg, city) []:Pau Organization Name (eg, company) [Internet Widgits Pty Ltd]:Kookyoo Organizational Unit Name (eg, section) []:IT Common Name (eg, YOUR name) []:Farwarx Email Address []:mon@email.fr chmod 440 /opt/lampp/etc/ssl/server.key
|
Apache2
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/apache2/ssl/server.crt -keyout /etc/apache2/ssl/server.key
Generating a 1024 bit RSA private key .....................................................++++++ ....................++++++ writing new private key to '/etc/apache2/ssl/server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Aquitaine Locality Name (eg, city) []:Pau Organization Name (eg, company) [Internet Widgits Pty Ltd]:Kookyoo Organizational Unit Name (eg, section) []:IT Common Name (eg, YOUR name) []:Farwarx Email Address []:mon@email.fr chmod 440 /etc/apache2/ssl/server.key
|
Apache Vhost
Nous allons configurer un Virtual Host pour pouvoir accéder à cette nouvelle ressource, mais attention!!!
Ajaxterm écoute sur le poste en local ET PAS sur le réseau ENTIER!!!! Ne le modifiez pas!!!
Le but sera d'utiliser un alias qui redirigera les requêtes vers notre adresse locale grâce au paramètre 'ProxyPass'.
Pour les curieux: mod_proxy
Ici, hostname est à remplacer différement selon 2 cas:
- réseau perso > nom de machine (renseigner dans le hostname)
- réseau pro (DNS) > hostname FQDN.
Lampp
Je mets mes VirtualHost dans le fichier (à créer) /opt/lampp/etc/vhost.conf et je rajoute dans /opt/lampp/etc/httpd.conf la ligne suivante à la fin du fichier: Include etc/vhost.conf
<VirtualHost hostname:443>
Documentroot /var/www
ServerName hostname SSLEngine on SSLCertificateFile /opt/lampp/etc/ssl/server.crt SSLCertificateKeyFile /opt/lampp/etc/ssl/server.key <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /ajaxterm/ http://localhost:8022/ ProxyPassReverse /ajaxterm/ http://localhost:8022/ </VirtualHost> |
Apache2
Les VirtualHost sont à mettre dans un fichier du répertoire /etc/apache2/site-available.
Exemple ici, les lignes suivantes peuvent être mises dans le fichier: /etc/apache2/site-available/ajaxterm.
<VirtualHost hostname:443>
Documentroot /var/www
ServerName hostname SSLEngine on SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /ajaxterm/ http://localhost:8022/ ProxyPassReverse /ajaxterm/ http://localhost:8022/ </VirtualHost> |
Il faut ajouter le VirtualHost nouvellement créeé dans apache2 pour qu'il soit prit en compte:
a2ensite ajaxterm |
Redemarrage du serveur Web
Lampp: /opt/lampp/./lampp restart
Apache2: /etc/init.d/apache2 restart
|
Test
https://ip/ajaxterm/
OU/ET
https://hostname/ajaxterm/
- L'auteur préconise l'utilisation du GET (il suffit de cliquer dessus pour l'activer), cela améliorerai la vitesse d'affichage et d'envoie des commandes).
- Pour le paste, je réfléchis dessus, je n'ai pas encore réussi avec Firefox.
Il supporte les couleurs ;)
Je vous conseille le shell ZSH avec la configuration de Formation-Debian.
Liens
http://antony.lesuisse.org/software/ajaxterm/
http://wiki.tuxgasy.fr/doku.php?id=ajaxterm
Aller plus loin
- Ajout d'un htaccess pour sécuriser un peu plus l'accès à Ajaxterm.
- Copier/coller : http://kb.mozillazine.org/Granting_JavaScript_access_to_the_clipboard
- Prendre contact avec l'auteur (licence Creative Commons) et voir pour améliorer le script, ajout fonctionnalités, etc... Il est écrit en Python.
A la prochaine oO.
Maxime T.
Rédacteur chez Kookyoo.net > blog/farwarx
Billets similaires | Tagsssh web ajax xterm ajaxterm apache linux acces integrer page lesuisse terminal console commande |
Commentaires 6 commentaires
Seb le 09 Avril 2009 à 1:33
Très instructif, je vais expérimenter ça. Je pense que ça aurait pu me sauver quelques heures de disponibilité quelques fois, c'est toujours bon à avoir.farwarx le 09 Avril 2009 à 10:26
MAJ: séparation de Apache2 et Lampp, corrections, maj des chemins.titancasino.fr le 26 Juillet 2009 à 18:55
attention, faille !http://vigilance.fr/vulnerabilite/Ajaxterm-usurpation-de-session-8706
Lorsque l'utilisateur est authentifié, une clé de session est créée. Cette clé est ensuite utilisée comme cookie ou paramètre d'url, à chaque requête.
Cependant, cette clé est un nombre entre zéro et un milliard. Un attaquant peut donc mener une attaque brute force
farwarx le 27 Juillet 2009 à 9:50
titancasino.fr > merci pour le lien ;)J'espère que les lecteurs de ce billet avaient compris que l'accès SSH dans une page Web n'était à utiliser que sur son serveur perso et qu'il fallait protéger l'accès à cette page par d'autres moyens tels qu'un .htaccess.
En effet, l'accès SSH est un accès direct au système donc très risqué de le mettre à la vue de tous.
casino770 le 27 Août 2009 à 3:34
Je suis un débutant en Apache et je ne suis pas certain de bien comprendre le fonctionnement. Est ce que vous pouvez élaborer d'avantages ?Merci
Seb le 27 Août 2009 à 6:36
casino770 > Peut-être que si tu précisais d'avantage ce que tu n'as pas compris ce serait plus simple pour farwarx de te détailler le passage.