Utiliser l’application WebSSH avec Portainer

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.

L’application WebSSh

L’application WebSSh est disponible au format Docker sur Docker Hub

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 :

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.

Utiliser Docker Hub pour trouver des images docker utilisables et fiables

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.

Déployer une image Docker avec Portainer

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.

Attention!!! Je vous conseille de bien lire les spécifications des images, car pour certaines images des paramètres spécifiques sont à passer lors du démarrage du container pour que cela fonctionne correctement. De plus je vous rappelle que sans volume, les données du container sont volatiles et qu’à chaque rebooter de celui-ci les données et/ou modifications sont perdues

Déployer une image Docker avec Portainer

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.

Déployer une image Docker avec Portainer

Pour créer notre container WebSSh, il suffit d’aller dans Containers -> Add container.

Créer un container avec Portainer

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

Créer un container avec Portainer

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)

Une fois l'image déployée par Portainer, vous pouvez vous connectez à l'application webSSH depuis un navigateur

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.

Vous pouvez accéder à vos serveur Linux en SSH depuis une page Web

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.

Une autre image docker d'une application WebSSH avec sauvegarde des sessions

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.

Créer un volume sur Portainer

Pour créer un volume dans Portainer, il suffit d’aller dans Volume -> Add Volume.

Créer un volume sur Portainer

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

Création d'un volume dans Portainer

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.

Création d'un volume dans Portainer

Démarrer votre container avec l’image qiuhaotc/webssh, puis une fois démarré cliquer sur le bouton Duplicate/Edit du container.

Création d'un volume dans Portainer

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.

Astuce !!! Vous pouvez vous connecter en Shell à l’intérieur du container avec la commande ci-dessous. Vous pourrez naviguer dans les répertoires, éditer des fichiers.
docker container exec -ti id_container bash

Création d'un volume dans Portainer

Dans Advanced container settings -> Volume, cliquer sur map additional volume.

Création d'un volume dans Portainer

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *