>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
TypeScript

Jak przekierować terminal bezpośrednio do przeglądarki za pomocą WeTTY

Wyobraź sobie taką sytuację: pilnie potrzebujesz uzyskać dostęp do serwera domowego lub maszyny wirtualnej z tabletu, cudzego laptopa lub komputera służbowego z restrykcyjnymi zasadami bezpieczeństwa, gdzie port 22 jest całkowicie zablokowany i nie możesz zainstalować proper SSH klienta. Otwierasz przeglądarkę, wpisujesz adres i otrzymujesz w pełni funkcjonalną linię poleceń z swoją znajomą powłoką.

Właśnie do tego został stworzony projekt WeTTY (Web + TTY).

WeTTY

Pod maską

Starsze rozwiązania, takie jak Ajaxterm czy Anyterm, były boleśnie wolne, ponieważ opierały się na zwykłych żądaniach HTTP przesyłanych w tę i z powrotem. WeTTY działa inaczej. Backend jest zbudowany w TypeScript i Node.js, komunikacja z przeglądarką odbywa się przez WebSockety, a renderowanie obsługuje emulator terminala xterm.js (ten sam, który zasila VS Code).

Dzięki połączeniu xterm.js i WebSocketów opóźnienia wprowadzania są prawie nieodczuwalne przy stabilnym połączeniu internetowym. Narzędzia z pseudo-grafiką działają bez problemów w oknie przeglądarki: htop, tmux, mc, vim i nano. Obsługa myszy, skróty klawiszowe i kolory terminala działają zgodnie z oczekiwaniami.

Jak uruchomić

Możesz wdrożyć narzędzie na dwa szybkie sposoby: przez npm lub w kontenerze Docker.

Opcja 1. Instalacja przez npm

Jeśli maszyna ma już Node.js w wersji 20 lub wyższej wraz z narzędziami do kompilacji (make, python, build-essential), narzędzie można zainstalować jednym poleceniem:

npm -g i wetty

Po instalacji uruchom usługę:

wetty --port 3000

Teraz przejdź do http://localhost:3000 i zaloguj się jako wybrany użytkownik. Jeśli WeTTY działa jako zwykły użytkownik, nawiąże połączenie SSH z localhost domyślnie. Uruchomienie jako root wywoła natomiast /bin/login.

Opcja 2. Uruchomienie w Dockerze

Osobiste uważam, że najłatwiej jest trzymać takie narzędzia w kontenerach, aby nie zaśmiecać hosta niepotrzebnymi globalnymi pakietami Node.js:

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

Zastąp 192.168.1.50 adresem IP hosta, z którym chcesz połączyć się przez SSH.

Przydatne parametry uruchomienia

Narzędzie oferuje elastyczną konfigurację za pomocą flag linii poleceń:

  • --ssh-host i --ssh-port przekierowują połączenie do oddzielnego zdalnego serwera.
  • --ssh-user ustawia domyślnego użytkownika, aby nie trzeba było za każdym razem wpisywać loginu.
  • --ssl-key i --ssl-cert włączają bezpośrednie szyfrowanie ruchu.
  • --allow-iframe pozwala osadzać terminal w iframe na innych stronach (na przykład w panelach dashboardu lub monitoringu).

Jeśli nie chcesz za każdym razem podawać flag podczas uruchamiania, możesz spakować parametry do pliku konfiguracyjnego i przekazać go przez --conf.

Bezpieczeństwo i użycie produkcyjne

Wystawianie niechronionego portu HTTP WeTTY do internetu jest absolutnie niezalecane. Każdy atakujący mógłby próbować ataków siłowych na hasła lub przechwytywać nieszyfrowany ruch.

W praktyce przed WeTTY umieszcza się zazwyczaj reverse proxy (NGINX, Traefik lub Caddy), który obsługuje wiele zadań:

  1. Wydawanie i odnawianie darmowych certyfikatów SSL od Let's Encrypt.
  2. Proxyfikacja połączeń WebSocket.
  3. Dodatkowa warstwa autoryzacji przez Basic Auth lub Authelia.
  4. Ograniczanie dostępu na podstawie białych list adresów IP.

Oto przykładowa konfiguracja NGINX:

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

Nie zapomnij uruchomić samego WeTTY z flagą --base /wetty/, aby ścieżki routingu prawidłowo się pokrywały.

Dla kogo jest ten projekt

WeTTY odpowiada na konkretne praktyczne potrzeby:

  • Szybka administracja serwerami domowymi (Home Lab) i routerami bezpośrednio z telefonu komórkowego lub iPada.
  • Tworzenie środowisk demo i piaskownic szkoleniowych, gdzie studenci potrzebują dostępu do powłoki bez konfigurowania klientów SSH.
  • Osadzanie okna terminala w wewnętrznych panelach zarządzania infrastrukturą opartymi na sieci.
  • Dostęp do serwerów z odizolowanych sieci korporacyjnych, gdzie otwarte są tylko porty 80 i 443.

Jeśli potrzebujesz lekkiego sposobu na uruchomienie terminala w przeglądarce bez ciężkich interfejsów webowych, takich jak Cockpit czy Proxmox, WeTTY załatwia to w zaledwie kilka minut. Po prostu uruchom kontener za reverse proxy i dodaj autoryzację.

Powiązane projekty