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

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-hosti--ssh-portprzekierowują połączenie do oddzielnego zdalnego serwera.--ssh-userustawia domyślnego użytkownika, aby nie trzeba było za każdym razem wpisywać loginu.--ssl-keyi--ssl-certwłączają bezpośrednie szyfrowanie ruchu.--allow-iframepozwala 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ń:
- Wydawanie i odnawianie darmowych certyfikatów SSL od Let's Encrypt.
- Proxyfikacja połączeń WebSocket.
- Dodatkowa warstwa autoryzacji przez Basic Auth lub Authelia.
- 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