>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
TypeScript

Hoe u een Terminal Direct naar de Browser Doorstuurt met WeTTY

Stel u voor: u moet dringend toegang krijgen tot een thuisserver of werk-VM vanaf een tablet, iemands anders zijn laptop of een werkcomputer met strikte beveiligingsbeleid waar poort 22 volledig geblokkeerd is en u geen SSH-client kunt installeren. U opent een browser, typt een adres in en krijgt een volledig uitgeruste opdrachtregel met uw vertrouwde shell.

Dit is precies waar het WeTTY-project (Web + TTY) voor is gemaakt.

WeTTY

Onder de motorkap

Oudere oplossingen zoals Ajaxterm of Anyterm waren pijnlijk langzaam omdat ze afhankelijk waren van reguliere HTTP-verzoeken heen en weer. WeTTY werkt anders. De backend is gebouwd met TypeScript en Node.js, communicatie met de browser vindt plaats via WebSockets en rendering wordt afgehandeld door de xterm.js-terminalemulator (dezelfde die VS Code aandrijft).

Dankzij de combinatie van xterm.js en WebSockets is de invoerlatentie nauwelijks merkbaar als u een stabiele internetverbinding heeft. Hulpprogramma's met pseudo-graphics werken zonder problemen in het browservenster: htop, tmux, mc, vim en nano. Muisondersteuning, sneltoetsen en terminalkleuren werken allemaal zoals verwacht.

Hoe te Starten

U kunt de tool op twee snelle manieren implementeren: via npm of in een Docker-container.

Optie 1. Installatie via npm

Als de machine al Node.js versie 20 of hoger heeft, samen met build-tools (make, python, build-essential), kan de tool met één commando worden geïnstalleerd:

npm -g i wetty

Na de installatie start u de service:

wetty --port 3000

Navigeer nu naar http://localhost:3000 en meld u aan met de gewenste gebruiker. Als WeTTY als gewone gebruiker wordt uitgevoerd, wordt er standaard een SSH-sessie naar localhost tot stand gebracht. Uitvoeren als root roept /bin/login aan.

Optie 2. Uitvoeren in Docker

Ik persoonlijk vind het het gemakkelijkst om dit soort tools in containers te houden om te voorkomen dat de host wordt volgepropt met onnodige globale Node.js-pakketten:

docker run --rm -p 3000:3000 wettyoss/wetty --ssh-host=192.168.1.50

Vervang 192.168.1.50 door het IP-adres van de host waarmee u via SSH wilt verbinden.

Nuttige Startparameters

De tool biedt flexibele configuratie via opdrachtregelparameters:

  • --ssh-host en --ssh-port sturen de verbinding om naar een aparte externe server.
  • --ssh-user stelt een standaardgebruiker in zodat u niet elke keer de aanmelding hoeft te typen.
  • --ssl-key en --ssl-cert maken directe verkeersversleuteling mogelijk.
  • --allow-iframe maakt het mogelijk de terminal in iframes op andere sites in te sluiten (bijvoorbeeld in dashboards of monitoringpanelen).

Als u niet elke keer dat u start parameters wilt opgeven, kunt u ze bundelen in een configuratiebestand en dit doorgeven via 19.

Beveiliging en Productiegebruik

Het blootstellen van een onbeschermde HTTP-poort van WeTTY aan het internet is absoluut niet aan te raden. Elke aanvaller zou kunnen proberen wachtwoorden te brute-forcen of onversleuteld verkeer te onderscheppen.

In de praktijk wordt er meestal een reverse proxy (NGINX, Traefik of Caddy) voor WeTTY geplaatst om meerdere verantwoordelijkheden te verwerken:

  1. Het uitgeven en vernieuwen van gratis SSL-certificaten van Let's Encrypt.
  2. Het proxyen van WebSocket-verbindingen.
  3. Een extra autorisatielaag via Basic Auth of Authelia.
  4. Toegang beperken op basis van IP-adres-whitelists.

Hier is een typisch NGINX-configuratievoorbeeld:

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;
}

Vergeet niet om WeTTY zelf uit te voeren met de --base /wetty/ vlag zodat de routeringspaden correct uitlijnen.

Voor Wie Dit Project Is

WeTTY pakt specifieke praktische behoeften aan:

  • Snelle administratie van thuisservers (Home Lab) en routers rechtstreeks vanaf een mobiele telefoon of iPad.
  • Het opzetten van demo-omgevingen en trainingssandboxes waar studenten shell-toegang nodig hebben zonder SSH-clients te configureren.
  • Een terminalvenster insluiten in interne webgebaseerde infrastructuurbeheerpanelen.
  • Toegang tot servers vanuit geïsoleerde bedrijfsnetwerken waar alleen poorten 80 en 443 open zijn.

Als u een lichtgewicht manier nodig hebt om een terminal in de browser te starten zonder zware webinterfaces zoals Cockpit of Proxmox, kan WeTTY dit in slechts een paar minuten afhandelen. Start gewoon de container achter een reverse proxy en voeg authenticatie toe.

Gerelateerde projecten