Accéder à SSH via HTTPS (port 443)

Le grand classique : votre client est OK pour exposer le port 443 car il en a besoin pour accéder à sa WebApp mais impossible de vous ouvrir le port 22 (raisons multiples : « on peut pas », « SSH c’est quoi ? » …) pour accéder au serveur.

Grâce à ShellInABox et au mode proxy d’Apache l’on va pouvoir « mapper » un « SSH Web » à une URL de votre site Web et ainsi accéder en SSH – via HTTPS –  au serveur via un simple navigateur web .

Source image : https://github.com/shellinabox/shellinabox


Maquette (Debian)

Activation des modules Apache de gestion du SSL et Proxy


a2enmod ssl
a2enmod proxy
a2enmod proxy_http

Sur Debian (en tout cas sur la Raspbian utilisé pour ce test) il existe déjà un fichier de configuration valide (avec un certificat auto-signé).

/etc/apache2/sites-available/default-ssl.conf

...
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/apache2/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

...

On active ce host


a2ensite default-ssl

 

On ajoute le « mapping » entre l’URL /shell et ShellInABox

[Avant] /etc/apache2/sites-available/default-ssl.conf


        </VirtualHost>

</IfModule>

 

[Après] /etc/apache2/sites-available/default-ssl.conf


        </VirtualHost>

<Location /shell>
ProxyPass http://localhost:4200/
</Location>
</IfModule>

 

On re-démarre les services


service shellinabox restart

service apache2 restart

 

Vous pouvez à présent accéder à votre SSH via l’adresse https://[votreIP]/shell


Attention : ShelInABox est encore en écoute sur son port. Pour limiter l’accès au seul port 443 il faut modifier la configuration de ShellInABox afin  de limiter son écoute au localhost.

/etc/default/shellinabox


...
SHELLINABOX_ARGS="--localhost-only"

...