WebSSH est une application web sécurisée qui vous permet d’établir une connexion SSH sur un équipement en utilisant votre navigateur. Le but de ce tutoriel est d’utilisé un container sur un VPS Linux avec Portainer pour pouvoir y accéder à distance facilement.
Sommaire de l'article
L’application WebSSh
C’est une application web simple à utiliser comme un client ssh pour se connecter à vos serveurs ssh. Elle est écrite en Python, basée sur tornado, paramiko et xterm.js.
Il existe différentes versions de WebSSH plus ou moins réussie. Nous en verrons au-moins deux qui sont disponible sur DockerHub et qui pourront vous aider ponctuellement.
Voici quelques caractéristiques :
- L’authentification par mot de passe SSH est prise en charge, y compris les mots de passe vides.
- L’authentification par clé publique SSH est prise en charge, y compris les clés DSA RSA ECDSA Ed25519.
- Prise en charge des clés cryptées.
- Authentification à deux facteurs (mot de passe unique basé sur le temps) prise en charge.
- Prise en charge du terminal plein écran.
- Fenêtre du terminal redimensionnable.
- Détection automatique de l’encodage par défaut du serveur ssh.
- Prise en charge des navigateurs modernes, notamment Chrome, Firefox, Safari, Edge et Opera.
Voici une illustration qui représente schématiquement le fonctionnement de WebSSH :
Installation de l’image Docker WebSSH de Jsnsyzb
Pour ce tutoriel, je vais utiliser mon VPS Linux avec Portainer. Portainer est un gestionnaire graphique d’image Docker. C’est réellement plus simple que le Docker en ligne de commande.
Dans ce tutoriel, nous allons utiliser l’image WebSSH de Jsnsyzb. Docker est une plateforme vraiment pratique pour mettre en place en quelques minutes une infrastructure. Ensuite si vous souhaitez personnaliser l’image là cela devient plus compliquer car vous devrez « recompiler » l’image avec vos modifications. Cela fera l’objet d’un autre tutoriel.
Pour récupérer des images, je vous conseille de vous créer un compte sur DockerHub.
Ensuite faite une recherche avec des mots clés comme webssh par exemple et vous verrez la multitude d’images disponibles. Pour notre premier exemple j’ai choisi l’image de Jsnsyzb.
Depuis Portainer aller dans Images -> Image puis saisissez la référence de l’image DockerHub, ici snsyzb/webssh. Puis cliquer sur Pull the image. L’image va être rapatriée sur votre VPS.
Une fois votre image téléchargée, elle apparait comme Unused, c’est à dire qu’elle n’est liée à aucun container pour l’instant.
Pour créer notre container WebSSh, il suffit d’aller dans Containers -> Add container.
- 1: Saisissez le nom de votre container que vous souhaitez
-
2: Sélectionner l’image que vous souhaitez mettre en container sous cette forme (la même que pour télécharger l’image) snsyzb/webssh
- 3: Partie très importante dans la création d’un container, la redirection de ports. Normalement elle est stipulée dans les indications de l’image. Ici c’est le port 8080 qui sera redirigé de la machine hôte vers 8080 du container.
- 4: Activer votre container en cliquant sur Déploy the container.
Au bout de quelques secondes votre container est UP (running). Pour accéder à l’interface graphique de l’application vous avez plusieurs choix :
- Soit cliquer dans la colonne Published Ports
- Soit saisir l’adresse dans votre navigateur sous cette forme (https://monportainer:8080)
Vous avez maintenant à disposition, une application WebSSH qui vous permet d’accéder à vos serveurs ou que vous soyez.
Avec cette image nous n’avons pas la possibilité de sauvegarder nos sessions donc les volumes sont inutiles.
Plusieurs améliorations pourrait être envisagées en faisant un rebuild du container, la mise en place du HTTPS pour chiffrer les échanges, mettre en place une authentification pour accéder au service WebSSH, une sauvegarde des sessions déjà effectués, ….
Mais aussi la mise en place d’une URL spécifique comme webssh.monsite.com par exemple, avec un filtrage des IPs, … Pour cela il faut utiliser un reverse-proxy comme Traefik par exemple. Cela fera l’objet d’un autre tutoriel.
Installation de l’image docker WebSSH de Qiuhaotc
Cette image présente la particularité de pouvoir être modifiée, soit grâce à un volume ou par des variables d’environnement. Nous n’allons pas détaillé l’installation car elle est identique que ci-dessus.
Sur Docker Hub, il suffit de rechercher l’image suivante et l’installer dans Portainer : qiuhaotc/webssh
Tout d’abord nous allons créer un volume sur notre VPS, qui va héberger les fichiers que l’on souhaite enregistrer et rendre permanent même si on changer d’image où si on reboot notre container.
Pour créer un volume dans Portainer, il suffit d’aller dans Volume -> Add Volume.
- 1 : Saisissez le nom du volume, généralement je prends le nom du service suivi du nom du créateur du container, mais le champ est libre
- 2: Me concernant le seul choix est local. J’enregistre les données sur mon VPS en local ou est hébergé mon instance de Portainer
- 3: création du volume.
Notre volume est maintenant créé et n’est pas encore affecté à un container. Sur le VPS, les données sont stockées dans /var/libdocker/volumes.
Démarrer votre container avec l’image qiuhaotc/webssh, puis une fois démarré cliquer sur le bouton Duplicate/Edit du container.
Nous allons commencer par rajouter un volume. Généralement on doit indiquer le répertoire de travail de l’application. On peut la trouver dans la documentation du container, ou bien on peut se rendre dans les Advanced container settings -> Command & logging -> Working Dir.
Pour notre image les fichiers de configurations et le stockage des infos se font dans le répertoire /app. Dans notre volume il faudra donc que nous montions /app sur notre VPS en local.
docker container exec -ti id_container bash
Dans Advanced container settings -> Volume, cliquer sur map additional volume.
- 1: Sélectionner Volume
- 2: Indiquer le volume à « monter » en local sur votre VPS. Généralement le répertoire qui contient les fichiers de configuration de l’application
- 3: Sélectionner le volume que nous venons de créer plus haut pour stocker les fichiers de configuration en local sur le VPS
- 4: On affecte les droits d’écriture sur ce répertoire
- 5: On applique les changements en cliquant sur Deploy the container
Nos informations sont maintenant enregistrées en local dans notre volume. Si vous rebooter le container où le supprimer pour le mettre à jour, vos données seront toujours présentes. Ici pour cette image cela peut avoir son importance car on peut stocker plusieurs sessions pour éviter de devoir tout ressaisir à chaque fois.