Truy cập từ xa (SSH, đường hầm, và tailnet)
Repo này hỗ trợ “truy cập từ xa qua SSH” bằng cách duy trì một Gateway duy nhất (máy chủ chính) chạy trên một máy chuyên dụng (desktop/server) và kết nối các client tới đó.- Dành cho operator (bạn / ứng dụng macOS): đường hầm SSH là phương án dự phòng phổ quát.
- Dành cho node (iOS/Android và các thiết bị tương lai): kết nối tới Gateway WebSocket (LAN/tailnet hoặc đường hầm SSH khi cần).
Ý tưởng cốt lõi
- Gateway WebSocket bind vào loopback trên cổng bạn cấu hình (mặc định 18789).
- Khi dùng từ xa, bạn chuyển tiếp cổng loopback đó qua SSH (hoặc dùng tailnet/VPN để giảm nhu cầu tạo đường hầm).
Các thiết lập VPN/tailnet phổ biến (nơi agent chạy)
Hãy nghĩ máy chủ Gateway là “nơi agent sinh sống.” Nó sở hữu các phiên, hồ sơ xác thực, kênh và trạng thái. Laptop/desktop của bạn (và các node) kết nối tới máy chủ đó.1. Gateway luôn bật trong tailnet của bạn (VPS hoặc máy chủ tại nhà)
Chạy Gateway trên một máy chủ cố định và truy cập qua Tailscale hoặc SSH.- Trải nghiệm tốt nhất: giữ
gateway.bind: "loopback"và dùng Tailscale Serve cho Control UI. - Phương án dự phòng: giữ loopback + đường hầm SSH từ bất kỳ máy nào cần truy cập.
- Ví dụ: exe.dev (VM dễ dùng) hoặc Hetzner (VPS sản xuất).
2. Desktop tại nhà chạy Gateway, laptop điều khiển từ xa
Máy tính xách tay không chạy agent. Nó kết nối từ xa:- Dùng chế độ Remote over SSH của ứng dụng macOS (Settings → General → “OpenClaw runs”).
- Ứng dụng tự mở và quản lý đường hầm, nên WebChat + kiểm tra tình trạng hoạt động “chạy ngay”.
3. Laptop chạy Gateway, truy cập từ xa từ các máy khác
Giữ Gateway chạy cục bộ nhưng phơi bày an toàn:- Tạo đường hầm SSH tới laptop từ các máy khác, hoặc
- Dùng Tailscale Serve cho Control UI và giữ Gateway chỉ bind loopback.
Luồng lệnh (chạy ở đâu)
Một dịch vụ gateway sở hữu trạng thái + kênh. Các node là thiết bị ngoại vi. Ví dụ luồng (Telegram → node):- Tin nhắn Telegram đến Gateway.
- Gateway chạy agent và quyết định có gọi công cụ của node hay không.
- Gateway gọi node qua Gateway WebSocket (RPC
node.*). - Node trả kết quả; Gateway phản hồi lại Telegram.
- Node không chạy dịch vụ gateway. Mỗi host chỉ nên chạy một gateway trừ khi bạn cố ý chạy các hồ sơ cô lập (xem Multiple gateways).
- Chế độ “node mode” của ứng dụng macOS chỉ là một client node qua Gateway WebSocket.
Đường hầm SSH (CLI + công cụ)
Tạo một đường hầm cục bộ tới Gateway WS từ xa:openclaw healthvàopenclaw status --deepgiờ truy cập gateway từ xa quaws://127.0.0.1:18789.openclaw gateway {status,health,send,agent,call}cũng có thể nhắm tới URL đã chuyển tiếp qua--urlkhi cần.
18789 bằng gateway.port đã cấu hình (hoặc --port/OPENCLAW_GATEWAY_PORT).
Lưu ý: khi bạn truyền --url, CLI sẽ không fallback sang thông tin xác thực từ cấu hình hoặc môi trường.
9. Bao gồm --token hoặc --password một cách tường minh. Thiếu thông tin xác thực tường minh là một lỗi.
Mặc định từ xa của CLI
Bạn có thể lưu một mục tiêu từ xa để các lệnh CLI dùng mặc định:ws://127.0.0.1:18789 và mở đường hầm SSH trước.
Chat UI qua SSH
WebChat không còn sử dụng một cổng HTTP riêng. UI chat SwiftUI kết nối trực tiếp tới Gateway WebSocket.- Chuyển tiếp
18789qua SSH (xem trên), rồi kết nối client tớiws://127.0.0.1:18789. - Trên macOS, ưu tiên chế độ “Remote over SSH” của ứng dụng, chế độ này tự quản lý đường hầm.
Ứng dụng macOS “Remote over SSH”
Ứng dụng menu bar trên macOS có thể điều khiển toàn bộ thiết lập này từ đầu đến cuối (kiểm tra trạng thái từ xa, WebChat và chuyển tiếp Voice Wake). Runbook: macOS remote access.Quy tắc bảo mật (từ xa/VPN)
Phiên bản ngắn gọn: giữ Gateway chỉ bind loopback trừ khi bạn chắc chắn cần bind ra ngoài.- Loopback + SSH/Tailscale Serve là mặc định an toàn nhất (không phơi bày công khai).
- Bind không phải loopback (
lan/tailnet/custom, hoặcautokhi loopback không khả dụng) phải dùng token/mật khẩu xác thực. gateway.remote.tokenchỉ dành cho các lệnh CLI từ xa — không bật xác thực cục bộ.gateway.remote.tlsFingerprintghim chứng chỉ TLS từ xa khi dùngwss://.- Tailscale Serve có thể xác thực qua header danh tính khi
gateway.auth.allowTailscale: true. Đặt thànhfalsenếu bạn muốn dùng token/mật khẩu thay thế. - Hãy coi điều khiển qua trình duyệt như quyền operator: chỉ trong tailnet + ghép cặp node có chủ đích.