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).
To rozwiązanie jest idealne, gdy laptop często przechodzi w uśpienie, a chcesz, aby agent był zawsze dostępny.
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ą”.
Runbook: zdalny dostęp na macOS.
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.
Przewodnik: Tailscale oraz Przegląd Web.
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.
Uwagi:
- 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:
ssh -N -L 18789:127.0.0.1:18789 user@host
Z tunelem w górę:
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.
Uwaga: zastąp 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:
{
gateway: {
mode: "remote",
remote: {
url: "ws://127.0.0.1:18789",
token: "your-token",
},
},
}
Gdy gateway jest dostępny tylko przez loopback, pozostaw URL jako 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.
Dogłębnie: Bezpieczeństwo.