Zdalny dostęp (SSH, tunele i sieci tailnet)
To repozytorium obsługuje tryb „zdalnie przez SSH” poprzez utrzymywanie pojedynczego Gateway (mastera) uruchomionego na dedykowanym hoście (desktop/serwer) oraz łączenie z nim klientów.- Dla operatorów (Ty / aplikacja na macOS): tunelowanie SSH jest uniwersalnym rozwiązaniem awaryjnym.
- Dla węzłów (iOS/Android oraz przyszłe urządzenia): połączenie z WebSocketem Gateway (LAN/tailnet lub tunel SSH w razie potrzeby).
Główna idea
- WebSocket Gateway wiąże się z loopback na skonfigurowanym porcie (domyślnie 18789).
- Do użytku zdalnego przekazujesz ten port loopback przez SSH (lub używasz tailnet/VPN i tunelujesz rzadziej).
Typowe konfiguracje VPN/tailnet (gdzie działa agent)
Traktuj host Gateway jako „miejsce, w którym działa agent”. To on posiada sesje, profile uwierzytelniania, kanały i stan. Twój laptop/desktop (oraz węzły) łączą się z tym hostem.1. Gateway zawsze włączony w Twojej sieci tailnet (VPS lub serwer domowy)
Uruchom Gateway na hoście stałym i uzyskuj do niego dostęp przez Tailscale lub SSH.- Najlepsze UX: zachowaj
gateway.bind: "loopback"i użyj Tailscale Serve dla interfejsu Control UI. - Fallback: zachowaj loopback + tunel SSH z dowolnej maszyny, która potrzebuje dostępu.
- Przykłady: exe.dev (łatwa VM) lub Hetzner (produkcyjny VPS).
2. Domowy desktop uruchamia Gateway, laptop jest zdalnym sterowaniem
Laptop nie uruchamia agenta. Łączy się zdalnie:- Użyj trybu Remote over SSH w aplikacji na macOS (Ustawienia → Ogólne → „OpenClaw runs”).
- Aplikacja otwiera i zarządza tunelem, więc WebChat + kontrole stanu „po prostu działają”.
3. Laptop uruchamia Gateway, zdalny dostęp z innych maszyn
Zachowaj Gateway lokalnie, ale wystaw go bezpiecznie:- Tunel SSH do laptopa z innych maszyn lub
- Udostępnij Control UI przez Tailscale Serve i pozostaw Gateway tylko na loopback.
Przepływ poleceń (co uruchamia się gdzie)
Jedna usługa gateway posiada stan + kanały. Węzły są peryferiami. Przykładowy przepływ (Telegram → węzeł):- Wiadomość z Telegrama trafia do Gateway.
- Gateway uruchamia agenta i decyduje, czy wywołać narzędzie w węźle.
- Gateway wywołuje węzeł przez WebSocket Gateway (RPC
node.*). - Węzeł zwraca wynik; Gateway odsyła odpowiedź do Telegrama.
- Węzły nie uruchamiają usługi gateway. Na jednym hoście powinien działać tylko jeden gateway, chyba że celowo uruchamiasz odizolowane profile (zobacz Wiele gatewayów).
- „Tryb węzła” w aplikacji na macOS to po prostu klient węzła przez WebSocket Gateway.
Tunel SSH (CLI + narzędzia)
Utwórz lokalny tunel do zdalnego Gateway WS:openclaw healthorazopenclaw status --deepdocierają teraz do zdalnego gateway przezws://127.0.0.1:18789.openclaw gateway {status,health,send,agent,call}może również wskazywać przekazany URL przez--url, gdy jest to potrzebne.
18789 swoją skonfigurowaną wartością gateway.port (lub --port/OPENCLAW_GATEWAY_PORT).
Uwaga: gdy przekażesz --url, CLI nie korzysta z konfiguracji ani poświadczeń środowiskowych.
Jawnie dołącz --token lub --password. Brak jawnych poświadczeń jest błędem.
Domyślne ustawienia zdalne CLI
Możesz zapisać zdalny cel, aby polecenia CLI używały go domyślnie:ws://127.0.0.1:18789 i najpierw otwórz tunel SSH.
Interfejs czatu przez SSH
WebChat nie używa już osobnego portu HTTP. Interfejs czatu SwiftUI łączy się bezpośrednio z WebSocketem Gateway.- Przekaż
18789przez SSH (patrz wyżej), a następnie połącz klientów zws://127.0.0.1:18789. - Na macOS preferuj tryb „Remote over SSH” w aplikacji, który automatycznie zarządza tunelem.
Aplikacja na macOS „Remote over SSH”
Aplikacja w pasku menu macOS może obsłużyć tę konfigurację end-to-end (zdalne kontrole stanu, WebChat oraz przekazywanie Voice Wake). Runbook: zdalny dostęp na macOS.Zasady bezpieczeństwa (zdalnie/VPN)
W skrócie: utrzymuj Gateway tylko na loopback, chyba że masz pewność, że potrzebujesz bindowania.- Loopback + SSH/Tailscale Serve to najbezpieczniejsza domyślna opcja (brak publicznej ekspozycji).
- Bindowania poza loopback (
lan/tailnet/customlubauto, gdy loopback jest niedostępny) muszą używać tokenów/hasła uwierzytelniania. gateway.remote.tokenjest wyłącznie do zdalnych wywołań CLI — nie włącza lokalnego uwierzytelniania.gateway.remote.tlsFingerprintprzypina zdalny certyfikat TLS podczas użyciawss://.- Tailscale Serve może uwierzytelniać przez nagłówki tożsamości, gdy
gateway.auth.allowTailscale: true. Ustaw nafalse, jeśli zamiast tego chcesz używać tokenów/hasła. - Traktuj kontrolę w przeglądarce jak dostęp operatora: tylko w obrębie tailnet + świadome parowanie węzłów.