Comment configurer un SSH basé sur le Web : un guide étape par étape
Voici comment configurer SSH basé sur le web avec Docker. Notre article décompose les étapes pour transformer facilement votre navigateur en une console terminal.
Accéder et gérer des serveurs à distance n'est pas seulement une commodité ; c'est une nécessité. Avec des technologies de conteneurisation comme Docker, ce processus est devenu plus fluide et accessible.
Notre guide complet est là pour vous montrer comment exploiter la puissance de Docker pour configurer un accès Secure Shell (SSH) basé sur le web. En suivant nos instructions étape par étape, vous apprendrez à transformer votre navigateur web standard en une console terminale pleinement fonctionnelle.
À la fin de ce guide, vous disposerez d'un terminal robuste basé sur le web à portée de main, vous permettant d'exécuter des commandes, de gérer des fichiers et de maintenir facilement vos serveurs, le tout depuis le confort de votre navigateur. Alors, plongeons et débloquons le potentiel du SSH basé sur le web !
Conditions préalables
Il est nécessaire d'avoir Docker et Docker Compose installés pour déployer un SSH basé sur des conteneurs. Donc, si vous n'avez pas encore Docker installé, l'un des guides suivants sera utile :
- Comment installer Docker sur Ubuntu 22.04
- Comment installer Docker sur Debian 12 (Bullseye)
- Comment installer Docker sur AlmaLinux/Rocky Linux
- Comment installer Docker sur Fedora
- Comment installer Docker sur Linux Mint 21
- Comment installer Docker sur Raspberry Pi
L'autre composant essentiel est Docker Compose. N'oubliez pas qu'il est fourni séparément de Docker. Par conséquent, vous devez installer Docker pour utiliser Docker Compose ; sinon, Compose ne fonctionnera pas.
Heureusement, son installation est assez simple, même si ce n'est pas déjà sur votre système Linux. Pour installer Docker Compose, tapez les deux commandes suivantes :
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-composeQue comprend notre pile dockerisée ?
Pour installer un SSH basé sur le web, vous permettant d'utiliser votre navigateur comme un terminal SSH, nous utiliserons trois conteneurs séparés : Caddy, Wetty et OpenSSH, que nous déploierons ensemble en utilisant Docker Compose.
Ci-dessous se trouve une représentation graphique de la manière dont les différents composants de notre pile SSH basée sur le web dockerisée interagissent.
Caddy : Proxy inversé
Caddy est un serveur web polyvalent, simple et ultra-rapide, bien connu pour sa capacité à obtenir et à renouveler automatiquement des certificats SSL Let’s Encrypt, ce qui en fait un candidat idéal pour notre déploiement SSH basé sur le web.
Dans notre cas, Caddy agira en tant que serveur proxy inversé, se plaçant devant le conteneur Wetty, transmettant les demandes et délivrant les réponses aux clients. De plus, il nous fournira une connexion HTTPS sécurisée et un accès protégé par un nom d'utilisateur et un mot de passe à notre implémentation SSH basée sur le web.
WeTTY : Terminal sur HTTP et HTTPS
WeTTY (abréviation de Web + TTY) est un logiciel émulateur de terminal qui fonctionne sur HTTP et HTTPS. C'est essentiellement une interface web qui permet aux utilisateurs d'accéder à une interface en ligne de commande via leur navigateur web.
En d'autres termes, cela fournit un terminal dans un navigateur web, le rendant facilement accessible depuis n'importe quelle machine ayant accès à Internet sans nécessiter d'installations de logiciels supplémentaires.
OpenSSH : Serveur SSH
Le serveur SSH dont nous parlons est celui auquel le conteneur WeTTY se connecte. Mais il y a un point crucial à comprendre ici. Ni WeTTY ni le conteneur OpenSSH ne se connecteront directement au serveur hôte où nous avons configuré notre SSH basé sur le web.
Il est donc important de ne pas considérer cela comme une solution qui vous donne accès uniquement au serveur spécifique sur lequel elle est installée.
Au lieu de cela, considérez-le comme un hôte de saut. Cela signifie que le conteneur OpenSSH agit comme un intermédiaire. À partir de celui-ci, vous pouvez établir une connexion SSH au serveur hôte et à tout autre serveur SSH distant.
SSH basé sur le Web avec Docker Compose
La première étape consiste à créer le dossier dans lequel nos fichiers de déploiement Docker Compose seront placés. Ensuite, passez à celui-ci; à partir de là, vous devez exécuter toutes les commandes plus loin dans ce guide à partir de cet emplacement.
mkdir webssh
cd websshDe plus, dès le début, nous clarifions que notre installation utilisera « ssh.tmplinux.com » comme nom de domaine sur lequel le service sera accessible et pour lequel Caddy émettra automatiquement un certificat SSL valide.
Bien sûr, vous devez remplacer ce nom par celui que vous possédez et utilisez dans les configurations ci-dessous.
Créer un réseau Docker
Comme première étape, créons notre réseau Docker et nommons-le "webssh_network."
docker network create webssh_networkEn faisant cela, nous garantissons que tous les conteneurs de notre déploiement auront une visibilité directe les uns sur les autres afin qu'ils puissent interagir. En même temps, la pile SSH basée sur le web sera isolée des autres conteneurs Docker sur notre hôte dans son réseau, ce qui ajoute une couche de sécurité.
Caddy
Comme mentionné ci-dessus, Caddy agira en tant que proxy inverse devant le conteneur WeTTY. Sa section de service dans notre fichier « docker-compose.yaml » est ci-dessous. Veuillez ne pas la copier pour l'instant ; la version finale et complète du fichier est visible plus bas dans ce guide.
Nous le montrons simplement ici pour expliquer comment cela fonctionne, ce qui s'applique également à tous les extraits suivants (WeTTY et OpenSSH) de nos services conteneurisés ci-dessous.
caddy:
image: lucaslorentz/caddy-docker-proxy:ci-alpine
container_name: reverse-proxy
ports:
- 80:80
- 443:443
environment:
- CADDY_INGRESS_NETWORKS=webssh_network
networks:
- webssh_network
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- caddy_data:/data
restart: unless-stoppedCaddy est le seul conteneur de notre déploiement dockerisé qui expose des ports (80 et 443), permettant à l'installation SSH basée sur le web d'être accessible depuis l'extérieur directement via le navigateur.
Tous les autres conteneurs de notre pile n'exposent pas de ports ; au lieu de cela, ils communiquent entre eux via leurs noms de service dans le réseau Docker isolé « webssh_network » que nous avons défini précédemment.
Parce que Caddy doit analyser les métadonnées Docker, en cherchant des labels indiquant qu'il doit servir un conteneur spécifique (plus d'informations ici), nous montons le socket Docker sur l'hôte avec celui du conteneur.
Après avoir trouvé les étiquettes, il génère un fichier en mémoire “Caddyfile” (un fichier de configuration principal du serveur web Caddy) avec des entrées de site et des proxy pointant vers le service Docker par leur nom DNS ou adresse IP de conteneur.
Enfin, nous garantissons également la persistance des données en créant un volume Docker nommé « caddy_data ». Il est important de comprendre cela : les conteneurs Docker ne conservent pas les données de manière permanente – ils sont temporaires par nature.
Donc, lorsque vous démarrez Caddy, il prend contact avec Let's Encrypt pour obtenir un certificat SSL pour votre domaine choisi. En utilisant un volume Docker nommé, une approche pour garantir la persistance des données, vous vous assurez que ce certificat n'est pas perdu chaque fois que vous redémarrez le conteneur Caddy.
WeTTY
WeTTY est le cœur de notre déploiement – c'est la pièce de puzzle qui vous permet d'utiliser un terminal SSH directement dans votre navigateur web, rendant l'accès facile depuis n'importe quel ordinateur doté d'une connexion Internet.
wetty:
image: wettyoss/wetty
container_name: wetty
labels:
caddy: ssh.tmplinux.com
caddy.basicauth: /*
caddy.basicauth.bobby: JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNNHJhR1EvUnhuUkllTU01Nk5OVW94N3VXOHg4RTRH
caddy.reverse_proxy: "{{upstreams 3000}}"
environment:
- SSHHOST=ssh-server
- SSHPORT=2222
- SSHUSER=term
networks:
- webssh_network
restart: unless-stopped
depends_on:
- ssh-serverIci, nous définissons tous les labels discutés précédemment dans la section « labels ». Cela est nécessaire pour que Caddy puisse remplir efficacement son rôle de proxy inverse lorsqu'il interagit avec le conteneur WeTTY.
Bien sûr, dans la version finale du fichier « docker-compose.yaml » (montré ci-dessous), n'oubliez pas de remplacer la ligne (« caddy: ssh.tmplinux.com ») par votre nom de domaine réel.
Nous devons faire un peu de travail maintenant. La ligne ci-dessous nous permet de protéger notre accès SSH basé sur le Web avec un nom d'utilisateur et un mot de passe. Nous avons choisi « bobby » comme nom d'utilisateur, et le mot de passe est sous forme sécurisée et hachée.
caddy.basicauth.bobby: JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNNHJhR1EvUnhuUkllTU01Nk5OVW94N3VXOHg4RTRHVoici une manière simple de définir votre mot de passe, par exemple, « monmotdepasse. » Exécutez simplement la commande ci-dessous. Elle téléchargera et exécutera un conteneur Caddy temporaire. Ensuite, la commande hash-password hachera la chaîne que vous fournissez après l'option « –plaintext ».
docker run --rm caddy caddy hash-password --plaintext mypasswordEnfin, prenez la sortie et décodez-la en encodage binaire base64.
echo -n '$2a$14$OkAZQQXYqWyH4QXeyScoi.XVOsyGgNAwlf7rC3OgtxkVvWGzS4rde' | base64La chaîne finale qui contient la version hachée de « monmotdepasse » est maintenant prête à être utilisée. Pour la partie utilisateur, vous pouvez choisir n'importe quel nom que vous aimez, par exemple, « john. ». Voici à quoi ressemblerait la version finale :
caddy.basicauth.john: JDJhJDE0JE9rQVpRUVhZcVd5SDRRWGV5U2NvaS5YVk9zeUdnTkF3bGY3ckMzT2d0eGtWdldHelM0cmRlLe reste du snippet WeTTY spécifie le port par défaut 3000 sur lequel WeTTY s'exécute et auquel Caddy doit se connecter. Dans la partie « environment », en utilisant les directives « SSHHOST » et « SSHPORT », nous spécifions le nom du service, « ssh-server », et le port « 2222 » sur lequel le conteneur du serveur SSH fonctionne, comme décrit ci-dessous.
De plus, « SSHUSER » définit l'utilisateur par défaut, « term », que le conteneur WeTTY utilisera pour se connecter à celui de SSH.
Serveur SSH
Nous sommes arrivés au dernier conteneur de notre déploiement SSH basé sur le web, le serveur SSH.
ssh-server:
image: lscr.io/linuxserver/openssh-server
container_name: ssh-server
hostname: ssh-server
environment:
- PUID=1000
- PGID=1000
- PASSWORD_ACCESS=true
- USER_NAME=term
- USER_PASSWORD=term
networks:
- webssh_network
volumes:
- ./config:/config
restart: unless-stoppedLes éléments auxquels il faut prêter attention ici sont le nom d'utilisateur (“terme “) et le mot de passe (“terme “) définis via les options “USER_NAME” et “USER_PASSWORD”. En d'autres termes, le conteneur SSH créera cet utilisateur lors de l'initialisation en attribuant le mot de passe spécifié.
De plus, nous lions le répertoire « config » du conteneur au répertoire « config » de notre système hôte, qui sera automatiquement créé dans le répertoire à partir duquel nous exécuterons la commande docker-compose la première fois que le conteneur s'exécute, garantissant la persistance des données telles que les fichiers journaux, les clés SSH, etc.
Fichier Docker Compose
Assemblons maintenant toutes les pièces précédentes en une version finale de notre application SSH dockerisée basée sur le web. Tout d'abord, créez un fichier "docker-compose.yaml" et collez le contenu suivant.
nano docker-compose.yamlversion: "3.8"
services:
caddy:
image: lucaslorentz/caddy-docker-proxy:ci-alpine
container_name: reverse-proxy
ports:
- 80:80
- 443:443
environment:
- CADDY_INGRESS_NETWORKS=webssh_network
networks:
- webssh_network
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- caddy_data:/data
restart: unless-stopped
wetty:
image: wettyoss/wetty
container_name: wetty
labels:
caddy: ssh.tmplinux.com
caddy.basicauth: /*
caddy.basicauth.bobby: JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNNHJhR1EvUnhuUkllTU01Nk5OVW94N3VXOHg4RTRH
caddy.reverse_proxy: "{{upstreams 3000}}"
environment:
- SSHHOST=ssh-server
- SSHPORT=2222
- SSHUSER=term
networks:
- webssh_network
restart: unless-stopped
depends_on:
- ssh-server
ssh-server:
image: lscr.io/linuxserver/openssh-server
container_name: ssh-server
hostname: ssh-server
environment:
- PUID=1000
- PGID=1000
- PASSWORD_ACCESS=true
- USER_NAME=term
- USER_PASSWORD=term
networks:
- webssh_network
volumes:
- ./config:/config
restart: unless-stopped
volumes:
caddy_data: {}
networks:
webssh_network:
external: trueN'oubliez pas d'ajuster ce qui suit dans le déploiement ci-dessus :
- wetty > étiquettes > caddy: Remplacez « ssh.tmplinux.com » par le domaine que vous utilisez.
- wetty > étiquettes > caddy.basicauth.bobby: Changez « bobby » par n'importe quel nom d'utilisateur que vous préférez et utilisez le mot de passe que vous avez créé, comme décrit précédemment dans le manuel.
De plus, nous vous recommandons également dans la partie « ssh-server » de remplacer le nom d'utilisateur et le mot de passe par défaut dans les paramètres « USER_NAME » et « USER_PASSWORD », qui sont actuellement « term » et « term », par ceux de votre choix. N'oubliez pas également d'utiliser le nom d'utilisateur que vous avez choisi pour « SSHUSER » dans la section « wetty » du service.
Déploiement d'un SSH basé sur le web avec Docker Compose
Enfin, nous pouvons exécuter notre pile SSH basée sur le web dockerisée à l'aide de Docker Compose. Pour ce faire, exécutez la commande ci-dessous à partir du répertoire « webssh » où nous avons créé notre fichier « docker-compose.yaml ».
Déployez et exécutez les conteneurs en arrière-plan :
docker-compose up -dLes images Docker commenceront à être téléchargées. L'ensemble de la procédure peut prendre de quelques secondes à quelques minutes, selon la vitesse de votre connexion Internet.
À la fin, vous devriez voir un écran similaire à celui ci-dessous, vous informant que votre installation SSH basée sur Docker a été déployée avec succès et est opérationnelle.
Le délai initial de démarrage des conteneurs ne sera que la première fois car Docker doit télécharger les images depuis Internet. Après cela, toutes les exécutions suivantes prendront quelques secondes puisqu'elles seront déjà disponibles localement sur votre système Linux.
Connectez-vous à l'SSH basé sur le Web via un navigateur Web
Ouvrez un navigateur web et dirigez-le vers l'adresse « https://votre-nom-de-domaine/wetty », qui, dans notre cas, est « https://ssh.tmplinux.com/wetty ». Une fenêtre apparaîtra vous demandant votre nom d'utilisateur et votre mot de passe. Veuillez utiliser ceux que vous avez configurés dans le fichier « docker-compose.yaml ».
Une fois que vous vous êtes connecté avec succès, WeTTY vous demandera de taper le mot de passe de l'utilisateur par défaut configuré dans le conteneur OpenSSH (« ssh-server »). Il vous suffit de saisir le mot de passe, et c'est parti!
Maintenant, votre navigateur devient une console SSH, vous permettant de vous connecter à d'autres serveurs SSH à distance. Avec cette configuration, vous n'avez besoin que d'une connexion Internet et d'un navigateur web pour gérer vos serveurs de n'importe où.
Conclusion
La mise en place d'un SSH basé sur le web avec Docker Compose transforme efficacement votre navigateur en une console de terminal. En suivant les étapes décrites dans notre article, vous pouvez accéder rapidement et en toute sécurité aux serveurs distants directement depuis votre navigateur web.
Alors allez-y, essayez-le et savourez la commodité et l'efficacité qu'il apporte à votre vie numérique. Merci pour votre temps ! N'hésitez pas à partager vos expériences ou à poser des questions dans les commentaires ci-dessous.





