Login
blog > farwarx > Accès SSH dans une page Web

Accès SSH dans une page Web

Posté par : farwarx - Le Mercredi 8 Avril 2009 à 22:34

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/

 

 

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.



Billet sous licence Creative Commons BY-NC-SA 

Maxime T.

Rédacteur chez Kookyoo.net > blog/farwarx

www.teissedre.info







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.



.laisser un commentaire




Codes html interdits. Les liens sont convertis automatiquement.

Réalisation

Code & Design : Sébastien Cardona

Page générée en : 0.57108s