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"
...