Recherche de site Web

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-compose

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

Comment fonctionne notre pile SSH basée sur le web avec Docker.

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 webssh

De 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_network

En 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-stopped

Caddy 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-server

Ici, 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: JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNNHJhR1EvUnhuUkllTU01Nk5OVW94N3VXOHg4RTRH

Voici 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 mypassword

Enfin, prenez la sortie et décodez-la en encodage binaire base64.

echo -n '$2a$14$OkAZQQXYqWyH4QXeyScoi.XVOsyGgNAwlf7rC3OgtxkVvWGzS4rde' | base64

Générer un mot de passe haché pour Caddy.

La 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: JDJhJDE0JE9rQVpRUVhZcVd5SDRRWGV5U2NvaS5YVk9zeUdnTkF3bGY3ckMzT2d0eGtWdldHelM0cmRl

Le 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-stopped

Les é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.yaml
version:  "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: true

N'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 -d

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

Installer un SSH basé sur le web avec Docker Compose.

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

Nom d'utilisateur et mot de passe pour s'authentifier à WeTTY.

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

WeTTY, un client de terminal basé sur le web, est maintenant déployé avec succès en utilisant Docker Compose.

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.