Comment rediriger un terminal directement vers le navigateur avec WeTTY
Imaginez ceci : vous avez besoin d'urgence d'accéder à un serveur domestique ou à une machine virtuelle de travail depuis une tablette, l'ordinateur portable de quelqu'un d'autre ou un ordinateur professionnel avec des politiques de sécurité strictes où le port 22 est complètement bloqué et vous ne pouvez pas installer un client SSH approprié. Vous ouvrez un navigateur, tapez une adresse et obtenez une ligne de commande complète avec votre shell familier.
C'est exactement pour cela que le projet WeTTY (Web + TTY) a été créé.

Sous le capot
Les anciennes solutions comme Ajaxterm ou Anyterm étaient douloureusement lentes car elles s'appuyaient sur des requêtes HTTP régulières aller-retour. WeTTY fonctionne différemment. Le backend est construit avec TypeScript et Node.js, la communication avec le navigateur se fait via WebSockets, et le rendu est géré par l'émulateur de terminal xterm.js (le même qui alimente VS Code).
Grâce à la combinaison xterm.js et WebSocket, la latence de saisie est à peine perceptible si vous avez une connexion Internet stable. Les utilitaires avec des pseudo-graphiques fonctionnent sans problème dans la fenêtre du navigateur : htop, tmux, mc, vim et nano. La prise en charge de la souris, les raccourcis clavier et les couleurs du terminal fonctionnent tous comme prévu.
Comment lancer
Vous pouvez déployer l'utilitaire de deux manières rapides : via npm ou dans un conteneur Docker.
Option 1. Installation via npm
Si la machine dispose déjà de Node.js version 20 ou supérieure, ainsi que des outils de compilation (make, python, build-essential), l'utilitaire peut être installé avec une seule commande :
npm -g i wetty
Après l'installation, démarrez le service :
wetty --port 3000
Accédez maintenant à http://localhost:3000 et connectez-vous avec l'utilisateur souhaité. Si WeTTY s'exécute en tant qu'utilisateur normal, il établira une session SSH vers localhost par défaut. L'exécution en tant que root invoquera /bin/login à la place.
Option 2. Exécution dans Docker
Personnellement, je trouve le plus simple de conserver ce type d'utilitaires dans des conteneurs pour éviter d'encombrer l'hôte avec des paquets Node.js globaux inutiles :
docker run --rm -p 3000:3000 wettyoss/wetty --ssh-host=192.168.1.50
Remplacez 192.168.1.50 par l'adresse IP de l'hôte auquel vous souhaitez vous connecter via SSH.
Paramètres de lancement utiles
L'utilitaire offre une configuration flexible via des indicateurs de ligne de commande :
--ssh-hostet--ssh-portredirigent la connexion vers un serveur distant séparé.--ssh-userdéfinit un utilisateur par défaut afin de ne pas avoir à saisir le login à chaque fois.--ssl-keyet--ssl-certactivent le chiffrement direct du trafic.--allow-iframepermet d'intégrer le terminal dans des iframes sur d'autres sites (par exemple, dans des tableaux de bord ou des panneaux de surveillance).
Si vous ne souhaitez pas spécifier des indicateurs à chaque démarrage, vous pouvez regrouper les paramètres dans un fichier de configuration et le passer via --conf.
Sécurité et utilisation en production
Exposer un port HTTP non protégé de WeTTY à Internet n'est absolument pas recommandé. Tout attaquant pourrait tenter de forcer les mots de passe par force brute ou d'intercepter le trafic non chiffré.
En pratique, un proxy inverse (NGINX, Traefik ou Caddy) est généralement placé devant WeTTY pour gérer plusieurs responsabilités :
- L'émission et le renouvellement de certificats SSL gratuits de Let's Encrypt.
- Le proxy des connexions WebSocket.
- Une couche d'autorisation supplémentaire via Basic Auth ou Authelia.
- La restriction d'accès basée sur des listes blanches d'adresses IP.
Voici un exemple de configuration NGINX typique :
location /wetty/ {
proxy_pass http://127.0.0.1:3000/wetty/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 43200000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
N'oubliez pas d'exécuter WeTTY lui-même avec l'indicateur --base /wetty/ afin que les chemins de routage s'alignent correctement.
À qui ce projet est-il destiné
WeTTY répond à des besoins pratiques spécifiques :
- Administration rapide de serveurs domestiques (Home Lab) et de routeurs directement depuis un téléphone mobile ou un iPad.
- Configuration d'environnements de démonstration et de bac à sable de formation où les étudiants ont besoin d'un accès shell sans configurer de clients SSH.
- Intégration d'une fenêtre de terminal dans des panneaux de gestion d'infrastructure web internes.
- Accès aux serveurs depuis des réseaux d'entreprise isolés où seuls les ports 80 et 443 sont ouverts.
Si vous avez besoin d'un moyen léger de lancer un terminal dans le navigateur sans les interfaces web lourdes comme Cockpit ou Proxmox, WeTTY gère cela en quelques minutes. Il suffit de lancer le conteneur derrière un proxy inverse et d'ajouter l'authentification.
Projets similaires