Remote access
दूरस्थ पहुंच
यह रिपो एक समर्पित होस्ट (डेस्कटॉप/सर्वर) पर एकल Gateway (मास्टर) चालू रखकर और क्लाइंटों को उससे जोड़कर रिमोट गेटवे एक्सेस का समर्थन करता है।
- ऑपरेटरों (आप / macOS ऐप) के लिए: जब गेटवे पहुंच योग्य हो, तो डायरेक्ट LAN/Tailnet WebSocket सबसे सरल है; SSH टनलिंग सार्वभौमिक फॉलबैक है।
- नोड्स (iOS/Android और भविष्य के डिवाइस) के लिए: Gateway WebSocket से कनेक्ट करें (ज़रूरत के अनुसार LAN/tailnet या SSH टनल)।
मुख्य विचार
- Gateway WebSocket आमतौर पर आपके कॉन्फ़िगर किए गए पोर्ट (डिफ़ॉल्ट 18789) पर loopback से बाइंड होता है।
- रिमोट उपयोग के लिए, इसे Tailscale Serve या भरोसेमंद LAN/Tailnet बाइंड के ज़रिए एक्सपोज़ करें, या SSH पर loopback पोर्ट फ़ॉरवर्ड करें।
सामान्य VPN और tailnet सेटअप
Gateway होस्ट को वह जगह समझें जहां एजेंट रहता है। यह सेशन, ऑथ प्रोफ़ाइल, चैनल और स्टेट का मालिक होता है। आपका लैपटॉप, डेस्कटॉप और नोड्स उसी होस्ट से कनेक्ट होते हैं।
आपके tailnet में हमेशा चालू Gateway
Gateway को किसी स्थायी होस्ट (VPS या होम सर्वर) पर चलाएं और Tailscale या SSH के ज़रिए उस तक पहुंचें।
- सर्वश्रेष्ठ UX:
gateway.bind: "loopback"रखें और Control UI के लिए Tailscale Serve इस्तेमाल करें। - भरोसेमंद LAN/Tailnet: गेटवे को निजी इंटरफ़ेस से बाइंड करें और
gateway.remote.transport: "direct"के साथ सीधे कनेक्ट करें। - फॉलबैक: loopback रखें और एक्सेस की ज़रूरत वाली किसी भी मशीन से SSH टनल जोड़ें।
- उदाहरण: exe.dev (आसान VM) या Hetzner (प्रोडक्शन VPS)।
यह तब आदर्श है जब आपका लैपटॉप अक्सर स्लीप होता है लेकिन आप एजेंट को हमेशा चालू रखना चाहते हैं।
होम डेस्कटॉप Gateway चलाता है
लैपटॉप एजेंट नहीं चलाता। यह रिमोट से कनेक्ट होता है:
- macOS ऐप का रिमोट मोड इस्तेमाल करें (Settings → General → OpenClaw runs)।
- जब गेटवे LAN/Tailnet पर पहुंच योग्य होता है तो ऐप सीधे कनेक्ट करता है, या जब आप SSH चुनते हैं तो SSH टनल खोलता और मैनेज करता है।
रनबुक: macOS रिमोट एक्सेस।
लैपटॉप Gateway चलाता है
Gateway को लोकल रखें लेकिन उसे सुरक्षित रूप से एक्सपोज़ करें:
- दूसरी मशीनों से लैपटॉप तक SSH टनल, या
- Control UI को Tailscale Serve करें और Gateway को केवल loopback रखें।
गाइड: Tailscale और वेब ओवरव्यू।
कमांड फ़्लो (क्या कहां चलता है)
एक गेटवे सर्विस स्टेट + चैनलों की मालिक होती है। नोड्स परिधीय होते हैं।
फ़्लो उदाहरण (Telegram → नोड):
- Telegram संदेश Gateway पर आता है।
- Gateway एजेंट चलाता है और तय करता है कि नोड टूल को कॉल करना है या नहीं।
- Gateway, Gateway WebSocket (
node.*RPC) पर नोड को कॉल करता है। - नोड परिणाम लौटाता है; Gateway Telegram को जवाब वापस भेजता है।
नोट्स:
- नोड्स गेटवे सर्विस नहीं चलाते। प्रति होस्ट केवल एक गेटवे चलना चाहिए, जब तक कि आप जानबूझकर अलग-थलग प्रोफ़ाइल न चला रहे हों (Multiple gateways देखें)।
- macOS ऐप "नोड मोड" केवल Gateway WebSocket पर एक नोड क्लाइंट है।
SSH टनल (CLI + टूल्स)
रिमोट Gateway WS तक लोकल टनल बनाएं:
ssh -N -L 18789:127.0.0.1:18789 user@hostटनल चालू होने पर:
openclaw healthऔरopenclaw status --deepअबws://127.0.0.1:18789के ज़रिए रिमोट गेटवे तक पहुंचते हैं।openclaw gateway status,openclaw gateway health,openclaw gateway probe, औरopenclaw gateway callज़रूरत पड़ने पर--urlके ज़रिए फ़ॉरवर्ड किए गए URL को भी टार्गेट कर सकते हैं।
CLI रिमोट डिफ़ॉल्ट
आप एक रिमोट टार्गेट स्थायी कर सकते हैं ताकि CLI कमांड उसे डिफ़ॉल्ट रूप से इस्तेमाल करें:
{ gateway: { mode: "remote", remote: { url: "ws://127.0.0.1:18789", token: "your-token", }, },}जब गेटवे केवल loopback हो, URL को ws://127.0.0.1:18789 पर रखें और पहले SSH टनल खोलें।
macOS ऐप के SSH टनल ट्रांसपोर्ट में, खोजे गए गेटवे होस्टनेम
gateway.remote.sshTarget में रहते हैं; gateway.remote.url लोकल टनल URL ही रहता है।
यदि वे पोर्ट अलग हैं, तो gateway.remote.remotePort को SSH होस्ट पर गेटवे पोर्ट पर सेट करें।
होस्ट-की सत्यापन डिफ़ॉल्ट रूप से सख्त है। मैनेज्ड एलियास स्पष्ट रूप से
अपनी प्रभावी OpenSSH ट्रस्ट नीति
gateway.remote.sshHostKeyPolicy: "openssh" के साथ इस्तेमाल कर सकते हैं; इसे सक्षम करने से पहले मेल खाने वाली यूज़र और सिस्टम
SSH सेटिंग्स की समीक्षा करें।
भरोसेमंद LAN या Tailnet पर पहले से पहुंच योग्य गेटवे के लिए, डायरेक्ट मोड इस्तेमाल करें:
{ gateway: { mode: "remote", remote: { transport: "direct", url: "ws://192.168.0.202:18789", token: "your-token", }, },}क्रेडेंशियल प्राथमिकता
Gateway क्रेडेंशियल रिज़ॉल्यूशन call/probe/status पाथ और Discord exec-approval मॉनिटरिंग में एक साझा कॉन्ट्रैक्ट का पालन करता है। Node-host एक लोकल-मोड अपवाद के साथ वही बेस कॉन्ट्रैक्ट इस्तेमाल करता है (यह जानबूझकर gateway.remote.* को अनदेखा करता है):
- स्पष्ट क्रेडेंशियल्स (
--token,--password, या टूलgatewayToken) हमेशा उन कॉल पाथ पर जीतते हैं जो स्पष्ट ऑथ स्वीकार करते हैं। - URL ओवरराइड सुरक्षा:
- CLI URL ओवरराइड (
--url) कभी भी अंतर्निहित config/env क्रेडेंशियल्स दोबारा इस्तेमाल नहीं करते। - Env URL ओवरराइड (
OPENCLAW_GATEWAY_URL) केवल env क्रेडेंशियल्स (OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD) इस्तेमाल कर सकते हैं।
- CLI URL ओवरराइड (
- लोकल मोड डिफ़ॉल्ट:
- टोकन:
OPENCLAW_GATEWAY_TOKEN->gateway.auth.token->gateway.remote.token(रिमोट फॉलबैक केवल तब लागू होता है जब लोकल ऑथ टोकन इनपुट unset हो) - पासवर्ड:
OPENCLAW_GATEWAY_PASSWORD->gateway.auth.password->gateway.remote.password(रिमोट फॉलबैक केवल तब लागू होता है जब लोकल ऑथ पासवर्ड इनपुट unset हो)
- टोकन:
- रिमोट मोड डिफ़ॉल्ट:
- टोकन:
gateway.remote.token->OPENCLAW_GATEWAY_TOKEN->gateway.auth.token - पासवर्ड:
OPENCLAW_GATEWAY_PASSWORD->gateway.remote.password->gateway.auth.password
- टोकन:
- Node-host लोकल-मोड अपवाद:
gateway.remote.token/gateway.remote.passwordअनदेखे किए जाते हैं। - रिमोट probe/status टोकन जांच डिफ़ॉल्ट रूप से सख्त होती हैं: रिमोट मोड को टार्गेट करते समय वे केवल
gateway.remote.tokenइस्तेमाल करती हैं (कोई लोकल टोकन फॉलबैक नहीं)। - Gateway env ओवरराइड केवल
OPENCLAW_GATEWAY_*इस्तेमाल करते हैं।
Chat UI रिमोट एक्सेस
WebChat अब अलग HTTP पोर्ट इस्तेमाल नहीं करता। SwiftUI chat UI सीधे Gateway WebSocket से कनेक्ट होता है।
- SSH पर
18789फ़ॉरवर्ड करें (ऊपर देखें), फिर क्लाइंटों कोws://127.0.0.1:18789से कनेक्ट करें। - LAN/Tailnet डायरेक्ट मोड के लिए, क्लाइंटों को कॉन्फ़िगर किए गए निजी
ws://या सुरक्षितwss://URL से कनेक्ट करें। - macOS पर, ऐप का रिमोट मोड प्राथमिकता से इस्तेमाल करें, जो चुने गए ट्रांसपोर्ट को अपने-आप मैनेज करता है।
macOS ऐप रिमोट मोड
macOS मेनू बार ऐप वही सेटअप शुरू से अंत तक चला सकता है (रिमोट स्टेटस जांच, WebChat, और Voice Wake फ़ॉरवर्डिंग)।
रनबुक: macOS रिमोट एक्सेस।
सुरक्षा नियम (रिमोट/VPN)
संक्षिप्त संस्करण: जब तक आपको यकीन न हो कि बाइंड की ज़रूरत है, Gateway को केवल loopback रखें।
- Loopback + SSH/Tailscale Serve सबसे सुरक्षित डिफ़ॉल्ट है (कोई सार्वजनिक एक्सपोज़र नहीं)।
- प्लेनटेक्स्ट
ws://loopback, LAN, link-local,.local,.ts.net, और Tailscale CGNAT होस्ट के लिए स्वीकार है। सार्वजनिक रिमोट होस्टों कोwss://इस्तेमाल करना होगा। - Non-loopback बाइंड (
lan/tailnet/custom, याautoजब loopback उपलब्ध न हो) को गेटवे ऑथ इस्तेमाल करना होगा: टोकन, पासवर्ड, याgateway.auth.mode: "trusted-proxy"वाला identity-aware रिवर्स प्रॉक्सी। gateway.remote.token/.passwordक्लाइंट क्रेडेंशियल स्रोत हैं। वे अपने-आप सर्वर ऑथ कॉन्फ़िगर नहीं करते।- लोकल कॉल पाथ
gateway.auth.*unset होने पर हीgateway.remote.*को फॉलबैक के रूप में इस्तेमाल कर सकते हैं। - यदि
gateway.auth.token/gateway.auth.passwordSecretRef के ज़रिए स्पष्ट रूप से कॉन्फ़िगर है और रिज़ॉल्व नहीं होता, तो रिज़ॉल्यूशन बंद अवस्था में विफल होता है (कोई रिमोट फॉलबैक मास्किंग नहीं)। gateway.remote.tlsFingerprint,wss://इस्तेमाल करते समय रिमोट TLS cert को पिन करता है, जिसमें macOS डायरेक्ट मोड भी शामिल है। कॉन्फ़िगर किए गए या पहले से स्टोर किए गए पिन के बिना, macOS सामान्य सिस्टम ट्रस्ट पास होने के बाद ही first-use सर्टिफ़िकेट पिन करता है; self-signed या private-CA गेटवे जिन्हें macOS पहले से ट्रस्ट नहीं करता, उन्हें स्पष्ट फ़िंगरप्रिंट या Remote over SSH चाहिए।- Tailscale Serve,
gateway.auth.allowTailscale: trueहोने पर identity हेडर्स के ज़रिए Control UI/WebSocket ट्रैफ़िक को ऑथेंटिकेट कर सकता है; HTTP API एंडपॉइंट्स उस Tailscale हेडर ऑथ का उपयोग नहीं करते और इसके बजाय गेटवे के सामान्य HTTP ऑथ मोड का पालन करते हैं। यह tokenless फ़्लो मानता है कि गेटवे होस्ट भरोसेमंद है। यदि आप हर जगह shared-secret ऑथ चाहते हैं, तो इसेfalseपर सेट करें। - Trusted-proxy ऑथ डिफ़ॉल्ट रूप से non-loopback identity-aware प्रॉक्सी सेटअप की अपेक्षा करता है।
Same-host loopback रिवर्स प्रॉक्सी के लिए स्पष्ट
gateway.auth.trustedProxy.allowLoopback = trueचाहिए। - ब्राउज़र कंट्रोल को ऑपरेटर एक्सेस जैसा मानें: केवल-tailnet + विचारपूर्वक नोड पेयरिंग।
विस्तार से: सुरक्षा।
macOS: LaunchAgent के ज़रिए स्थायी SSH टनल
रिमोट गेटवे से कनेक्ट होने वाले macOS क्लाइंटों के लिए, सबसे आसान स्थायी सेटअप SSH LocalForward config एंट्री और LaunchAgent का उपयोग करता है ताकि रीबूट और क्रैश के बाद भी टनल जीवित रहे।
चरण 1: SSH config जोड़ें
~/.ssh/config संपादित करें:
Host remote-gateway HostName <REMOTE_IP> User <REMOTE_USER> LocalForward 18789 127.0.0.1:18789 IdentityFile ~/.ssh/id_rsa<REMOTE_IP> और <REMOTE_USER> को अपने मानों से बदलें।
चरण 2: SSH key कॉपी करें (एक बार)
ssh-copy-id -i ~/.ssh/id_rsa <REMOTE_USER>@<REMOTE_IP>चरण 3: गेटवे टोकन कॉन्फ़िगर करें
टोकन को config में स्टोर करें ताकि यह रीस्टार्ट के बाद भी बना रहे:
openclaw config set gateway.remote.token "<your-token>"चरण 4: LaunchAgent बनाएं
इसे ~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plist के रूप में सेव करें:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>Label</key> <string>ai.openclaw.ssh-tunnel</string> <key>ProgramArguments</key> <array> <string>/usr/bin/ssh</string> <string>-N</string> <string>remote-gateway</string> </array> <key>KeepAlive</key> <true/> <key>RunAtLoad</key> <true/></dict></plist>चरण 5: LaunchAgent लोड करें
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/ai.openclaw.ssh-tunnel.plistटनल लॉगिन पर अपने-आप शुरू होगी, क्रैश होने पर रीस्टार्ट होगी, और फ़ॉरवर्ड किए गए पोर्ट को लाइव रखेगी।
समस्या निवारण
जांचें कि टनल चल रही है या नहीं:
ps aux | grep "ssh -N remote-gateway" | grep -v greplsof -i :18789टनल रीस्टार्ट करें:
launchctl kickstart -k gui/$UID/ai.openclaw.ssh-tunnelटनल रोकें:
launchctl bootout gui/$UID/ai.openclaw.ssh-tunnel| Config entry | यह क्या करता है |
|---|---|
LocalForward 18789 127.0.0.1:18789 |
लोकल पोर्ट 18789 को रिमोट पोर्ट 18789 पर फ़ॉरवर्ड करता है |
ssh -N |
रिमोट कमांड चलाए बिना SSH (केवल port-forwarding) |
KeepAlive |
टनल क्रैश होने पर उसे अपने-आप रीस्टार्ट करता है |
RunAtLoad |
लॉगिन पर LaunchAgent लोड होने पर टनल शुरू करता है |