Recherche de site Web

Comment configurer un SSH basé sur le Web : un guide étape par étape


Voici comment configurer SSH Web avec Docker. Notre article détaille les étapes pour transformer facilement votre navigateur en console de terminal.

Accéder et gérer les serveurs à distance n'est pas seulement une commodité ; c'est une nécessité. Avec les technologies de conteneurisation comme Docker, ce processus est devenu plus rationalisé 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 comment transformer votre navigateur Web standard en une console de terminal entièrement fonctionnelle.

À la fin de ce guide, vous disposerez d'un terminal Web robuste à portée de main, vous permettant d'exécuter des commandes, de gérer des fichiers et de gérer facilement vos serveurs, le tout dans le confort de votre navigateur. Alors, plongeons-nous et libérons le potentiel du SSH basé sur le Web !

Conditions préalables

L'installation de Docker et Docker Compose est requise pour déployer un SSH Web conteneurisé. Ainsi, si Docker n’est pas déjà installé, l’un des guides suivants vous 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 s'il n'est pas déjà présent 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 SSH basé sur le Web, vous permettant d'utiliser votre navigateur comme terminal SSH, nous utiliserons trois conteneurs distincts : Caddy, Wetty et OpenSSH, que nous déploierons ensemble à l'aide de Docker Compose.

Vous trouverez ci-dessous une représentation graphique de la façon dont les différents composants de notre pile SSH basée sur le Web dockerisée interagissent.

Caddy : proxy inverse

Caddy est un serveur Web polyvalent, simple et ultra-rapide bien connu pour sa capacité à obtenir et à renouveler automatiquement les 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 comme un serveur proxy inverse, assis devant le conteneur Wetty, transmettant les demandes et fournissant les réponses des clients. De plus, il nous fournira une connexion HTTPS sécurisée et un accès protégé par nom d'utilisateur et 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 d'émulation de terminal qui fonctionne sur HTTP et HTTPS. Il s'agit essentiellement d'une interface Web qui permet aux utilisateurs d'accéder à une interface de ligne de commande via leur navigateur Web.

En d’autres termes, il fournit un terminal dans un navigateur Web, le rendant facilement accessible depuis n’importe quelle machine disposant d’un accès Internet sans nécessiter d’installation de logiciel supplémentaire.

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 seront directement liés au serveur hôte sur lequel nous avons configuré notre SSH 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.

Considérez-le plutôt comme un hôte de saut. Cela signifie que le conteneur OpenSSH agit comme 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 seront placés nos fichiers de déploiement Docker Compose. Ensuite, passez-y ; à partir de maintenant, vous devez exécuter toutes les commandes plus bas dans ce guide à partir de cet emplacement.

mkdir webssh
cd webssh

De plus, dès le début, nous précisons 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 entendu, vous devez remplacer ce nom par celui que vous possédez et utilisez dans les configurations ci-dessous.

Créer un réseau Docker

Dans un premier temps, 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. Dans le 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é.

Caddie

Comme mentionné ci-dessus, Caddy agira comme un proxy inverse devant le conteneur WeTTY. Sa section service de notre fichier « docker-compose.yaml » est ci-dessous. S'il vous plaît, ne le copiez pas encore ; la version finale et complète du fichier peut être consultée plus bas dans ce guide.

Nous le montrons simplement ici pour expliquer son fonctionnement, 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 les ports (80 et 443), permettant à l'installation SSH basée sur le Web d'être accessible depuis le monde 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 au sein du réseau Docker isolé « webssh_network » que nous avons défini précédemment.

Étant donné que Caddy doit analyser les métadonnées Docker, à la recherche d'étiquettes 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 « Caddyfile » en mémoire (un fichier de configuration principal du serveur Web Caddy) avec des entrées de site et des proxys pointant vers le service Docker par leur nom DNS ou l'adresse IP du conteneur.

Enfin, nous garantissons également la persistance des données en créant un volume Docker nommé « caddy_data ». Il est important de comprendre ceci : les conteneurs Docker ne conservent pas les données de manière permanente – ils sont temporaires par nature.

Ainsi, lorsque vous démarrez Caddy, il contacte Let's Encrypt pour obtenir un certificat SSL pour le domaine que vous avez 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 redémarrage du conteneur Caddy.

WeTTY

WeTTY est le cœur de notre déploiement : c'est la pièce du puzzle qui vous permet d'utiliser un terminal SSH directement dans votre navigateur Web, ce qui facilite son accès depuis n'importe quel ordinateur disposant 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 toutes les étiquettes discutées 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 entendu, dans la version finale du fichier « docker-compose.yaml » (illustré ci-dessous), n'oubliez pas de remplacer la ligne (« caddy : ssh.tmplinux.com ") avec 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 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 une forme sécurisée et hachée.

caddy.basicauth.bobby: JDJhJDE0JDd3S3lscDY2aDFKSzU5clIuNFBiTnVNNHJhR1EvUnhuUkllTU01Nk5OVW94N3VXOHg4RTRH

 Voici un moyen simple de définir votre mot de passe, par exemple : "mon mot de passe". Exécutez simplement la commande ci-dessous. Il 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 codage base64 bits.

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

La chaîne finale contenant la version hachée de « mypassword » est maintenant prête à être utilisée. Pour la partie utilisateur, vous pouvez choisir le nom de votre choix, par exemple « john ». Voici à quoi ressemblerait la version finale :

caddy.basicauth.john: JDJhJDE0JE9rQVpRUVhZcVd5SDRRWGV5U2NvaS5YVk9zeUdnTkF3bGY3ckMzT2d0eGtWdldHelM0cmRl

Le reste de l'extrait WeTTY spécifie le port par défaut 3000 sur lequel WeTTY s'exécute et auquel le Caddy doit se connecter. Dans la partie « environnement », à l'aide des directives « SSHHOST » et « SSHPORT », on précise le nom du service, « ssh-server », et le port « 2222 » sur lequel le conteneur du serveur SSH s'exécute, qui est décrit ci-dessous.

De plus, « SSHUSER » spécifie l'utilisateur par défaut, « term », que le conteneur WeTTY utilisera pour se connecter à celui 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 à prendre en compte ici sont le nom d'utilisateur ("term ") et le mot de passe ("term ") définis via le "USER_NAME" et Options « 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 à celui « config » de notre système hôte, qui sera créé automatiquement dans le formulaire de répertoire dans lequel nous exécuterons le docker-compose lors de la première exécution du conteneur, garantissant la persistance des données telles que les fichiers journaux, les clés SSH, etc.

Fichier de composition Docker

Rassemblons maintenant tous les éléments précédents dans une version finale de notre application web dockerisée SSH. 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 les éléments suivants dans le déploiement ci-dessus :

  • wetty > labels > caddy : remplacez « ssh.tmplinux.com » par le domaine que vous utilisez.
  • wetty > labels > caddy.basicauth.bobby : remplacez « bobby » par le nom d'utilisateur de votre choix et utilisez le mot de passe que vous avez créé, comme décrit précédemment dans le manuel.

De plus, nous 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 », avec d'autres que vous préférez. N'oubliez pas non plus d'utiliser le nom d'utilisateur que vous avez choisi pour « SSHUSER » dans la section « wetty » du service.

Déploiement de 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 depuis le 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

Le téléchargement des images Docker commencera. 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 le Web dockerisée a été déployée avec succès et est opérationnelle.

Le retard initial du démarrage des conteneurs ne sera que la première fois car Docker doit télécharger des 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 au SSH Web via un navigateur Web

Ouvrez un navigateur Web et pointez-le vers l'adresse "https://votre-nom-de-domaine/wetty", qui, dans notre cas, est un " 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 connecté avec succès, WeTTY vous demandera de saisir le mot de passe de l'utilisateur par défaut configuré dans le conteneur OpenSSH (« ssh-server »). Entrez simplement le mot de passe et vous êtes prêt à partir !

Désormais, votre navigateur devient une console SSH, vous permettant de vous connecter à distance à d'autres serveurs SSH. Avec cette configuration, vous n'avez besoin que d'une connexion Internet et d'un navigateur Web pour gérer vos serveurs depuis n'importe où.

Conclusion

La configuration de SSH Web avec Docker Compose transforme efficacement votre navigateur en 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 n'hésitez plus, essayez-le et profitez de la commodité et de 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.

Articles connexes: