On a tous eu besoin (ou pas :p) de se connecter en SSH en urgence.

Seulement voilà, en entreprise, au cyber ou en université, il n’est pas rare de croiser proxy, firewall et autres mécanismes de filtrage ne permettant pas de se connecter directement en ssh.

J’ai croisé pas mal d’articles avec des méthodes de tunneling (tunnel icmp, dns, …) mais rien de « simple » à mettre en œuvre et d’efficace à 100%.

Je vous propose de voir comment dans une page web (en https), on peut avoir un terminal ssh.

Les logiciels utilisés sont des logiciels libres bien évidemment !

Nous allons prendre l’hypothèse que nous avons un serveur sous debian 4 déjà installé et fonctionnel.

installons tout d’abord, apache2 et les modules ssl + proxy. (sur le serveur hein :p)

apt-get install apache2
a2enmod ssl
apt-get install ajaxterm
apt-get install libapache2-mod-proxy-html
a2enmod proxy_http
/etc/init.d/apache2 restart

Créons maintenant les clés et certificats :

mkdir /tmp/ssl_conf
cd /tmp/ssl_conf
openssl req -config /etc/ssl/openssl.cnf -new -out trustonme.csr
openssl rsa -in privkey.pem -out trustonme.key
openssl x509 -in trustonme.csr -out trustonme.crt -req -signkey trustonme.key -days 3650
openssl x509 -in trustonme.crt -out trustonme.der.crt -outform DER
cp trustonme.crt /etc/apache2/ssl.crt
cp trustonme.key /etc/apache2/ssl.key

Allons maintenant renseigner le virtual host dans le fichier « /etc/apache2/sites-available/default »

NameVirtualHost *:443

<VirtualHost *:443>
ServerName localhost
SSLEngine On
SSLCertificateKeyFile /etc/apache2/ssl.key
SSLCertificateFile /etc/apache2/ssl.crt

</VirtualHost>

ProxyRequests Off
<Proxy *>
AuthType Basic
AuthName « remote Shell Access »
AuthUserFile /etc/apache2/htpasswd
Require user USER1
Order deny,allow
Allow from all
</Proxy>
ProxyPass /ssh/ http://localhost:8022/
ProxyPassReverse /ssh/ http://localhost:8022/

Vous voyez dans la configuration ci dessus qu’il y aura bien évidemment une authentification en amont.

Pour définir le mot de passe de USER1 et créer le fichier adoc taper ceci :

htpasswd -c /etc/apache2/htpasswd USER1

Voilà, il ne vous reste plus qu’à vous connecter avec votre navigateur favori (Firefox bien sûr!) sur l’url suivante :

https://votremachine.nomdedomaine/ssh/

Vous devriez obtenir ce qui suit :

Si vous voulez supprimer cette installation rien de plus simple :

/etc/apache2 stop
a2dismod ssl && a2dismod proxy_http
apt-get remove apache2 ajaxterm libapache2-mod-proxy-html apache2-utils libapr1 apache2.2-common apache2-mpm-worker libpq5 libaprutil1

3 réponses à “Client SSH via HTTPS !”
  1. François dit :

    Une petite erreur s’est glissée dans cet excellent billet. Il faut remplacer sur les lignes ProxyPass et ProxyPassReverse du fichier /etc/apache2/sites-available/default la chaine http par https.

    De plus, je rajouterais que si le serveur ssh écoute sur un autre port que celui d’origine, il est possible de reporter cette configuration dans le fichier de conf d’Ajaxterm en modifiant la ligne commençant par SERVERPORT= »nouveau numéro de port ».

  2. François dit :

    Heu, toutes mes confuses, la configuration des lignes ProxyPass et ProxyPassReverse était correcte.

  3. dof dit :

    lol merci François !

  4.  
Répondre

*