การเข้าถึงระยะไกล (SSH, อุโมงค์, และ tailnet)¶
รีโปนี้รองรับ “รีโมตผ่านSSH” โดยคงให้มี Gateway (ตัวหลัก) เพียงตัวเดียวทำงานบนโฮสต์เฉพาะ (เดสก์ท็อป/เซิร์ฟเวอร์) และให้ไคลเอนต์เชื่อมต่อเข้ามา
- สำหรับ ผู้ดูแลระบบ (คุณ/แอปmacOS): การทำอุโมงค์SSHเป็นทางเลือกสำรองสากล
- สำหรับ โหนด (iOS/Android และอุปกรณ์ในอนาคต): เชื่อมต่อกับ Gateway WebSocket (ผ่านLAN/tailnet หรืออุโมงค์SSHตามความจำเป็น)
แนวคิดหลัก¶
- Gateway WebSocket จะ bind กับ loopback บนพอร์ตที่คุณกำหนด (ค่าเริ่มต้น 18789)
- สำหรับการใช้งานระยะไกล ให้ forward พอร์ต loopback นั้นผ่าน SSH (หรือใช้ tailnet/VPN เพื่อลดการทำอุโมงค์)
การตั้งค่า VPN/tailnet ที่พบบ่อย (ตำแหน่งที่เอเจนต์ทำงาน)¶
มองว่า โฮสต์เกตเวย์ คือ “ที่ที่เอเจนต์อาศัยอยู่” มันเป็นเจ้าของเซสชัน โปรไฟล์การยืนยันตัวตน แชนเนล และสถานะ แล็ปท็อป/เดสก์ท็อปของคุณ (และโหนด) เชื่อมต่อไปยังโฮสต์นั้น
1. Gateway เปิดตลอดใน tailnet ของคุณ (VPS หรือโฮมเซิร์ฟเวอร์)¶
รัน Gateway บนโฮสต์ถาวรและเข้าถึงผ่าน Tailscale หรือ SSH
- ประสบการณ์ใช้งานดีที่สุด: คงค่า
gateway.bind: "loopback"และใช้ Tailscale Serve สำหรับ Control UI - ทางเลือกสำรอง: คง loopback + อุโมงค์SSH จากเครื่องใดก็ได้ที่ต้องการเข้าถึง
- ตัวอย่าง: exe.dev (VM ตั้งค่าง่าย) หรือ Hetzner (VPS สำหรับโปรดักชัน)
เหมาะอย่างยิ่งเมื่อแล็ปท็อปของคุณพักเครื่องบ่อย แต่ต้องการให้เอเจนต์ทำงานตลอด
2. เดสก์ท็อปที่บ้านรัน Gateway, แล็ปท็อปเป็นตัวควบคุมระยะไกล¶
แล็ปท็อป ไม่ รันเอเจนต์ แต่เชื่อมต่อจากระยะไกล: มันเชื่อมต่อจากระยะไกล:
- ใช้โหมด Remote over SSH ของแอปmacOS (Settings → General → “OpenClaw runs”)
- แอปจะเปิดและจัดการอุโมงค์ให้ ทำให้ WebChat + การตรวจสุขภาพ “ทำงานได้ทันที”
Runbook: macOS remote access
3. แล็ปท็อปรัน Gateway, เข้าถึงจากเครื่องอื่น¶
คง Gateway ไว้ภายในเครื่องแต่เปิดให้เข้าถึงอย่างปลอดภัย:
- ทำอุโมงค์SSH เข้าหาแล็ปท็อปจากเครื่องอื่น หรือ
- ใช้ Tailscale Serve สำหรับ Control UI และคง Gateway เป็น loopback เท่านั้น
คู่มือ: Tailscale และ Web overview
การไหลของคำสั่ง (อะไรทำงานที่ไหน)¶
บริการ Gateway เพียงตัวเดียวเป็นเจ้าของสถานะ + ช่องทาง โหนดเป็นอุปกรณ์ต่อพ่วง โหนดเป็นอุปกรณ์ต่อพ่วง
ตัวอย่างการไหล (Telegram → โหนด):
- ข้อความจาก Telegram มาถึง Gateway
- Gateway รัน เอเจนต์ และตัดสินใจว่าจะเรียกเครื่องมือของโหนดหรือไม่
- Gateway เรียก โหนด ผ่าน Gateway WebSocket (RPC
node.*) - โหนดส่งผลลัพธ์กลับมา; Gateway ตอบกลับไปยัง Telegram
หมายเหตุ:
- โหนดไม่รันบริการGateway ควรมีGatewayเพียงหนึ่งตัวต่อโฮสต์ เว้นแต่คุณตั้งใจรันโปรไฟล์แยก (ดู Multiple gateways)
- โหมด “node mode” ของแอปmacOS เป็นเพียงไคลเอนต์โหนดผ่าน Gateway WebSocket
อุโมงค์SSH (CLI + เครื่องมือ)¶
สร้างอุโมงค์ภายในเครื่องไปยัง Gateway WS ระยะไกล:
ssh -N -L 18789:127.0.0.1:18789 user@host
เมื่ออุโมงค์พร้อมใช้งาน:
openclaw healthและopenclaw status --deepจะเข้าถึง Gateway ระยะไกลผ่านws://127.0.0.1:18789openclaw gateway {status,health,send,agent,call}สามารถกำหนดเป้าหมายไปยัง URL ที่ถูก forward ผ่าน--urlเมื่อจำเป็น
หมายเหตุ: แทนที่ 18789 ด้วย gateway.port ที่คุณกำหนดค่าไว้ (หรือ --port/OPENCLAW_GATEWAY_PORT)
หมายเหตุ: แทนที่ 18789 ด้วย gateway.port ที่คุณกำหนด (หรือ --port/OPENCLAW_GATEWAY_PORT)
หมายเหตุ: เมื่อคุณส่ง --url CLI จะไม่ย้อนกลับไปใช้คอนฟิกหรือข้อมูลประจำตัวจากตัวแปรสภาพแวดล้อม
โปรดระบุ --token หรือ --password อย่างชัดเจน การขาดข้อมูลประจำตัวที่ระบุชัดถือเป็นข้อผิดพลาด
ระบุ --token หรือ --password อย่างชัดเจน การขาดข้อมูลรับรองที่ระบุอย่างชัดเจนถือเป็นข้อผิดพลาด
ค่าเริ่มต้นของ CLI สำหรับรีโมต¶
คุณสามารถบันทึกเป้าหมายรีโมตเพื่อให้คำสั่ง CLI ใช้เป็นค่าเริ่มต้นได้:
{
gateway: {
mode: "remote",
remote: {
url: "ws://127.0.0.1:18789",
token: "your-token",
},
},
}
เมื่อ Gateway เป็น loopback เท่านั้น ให้คง URL ไว้ที่ ws://127.0.0.1:18789 และเปิดอุโมงค์SSH ก่อน
Chat UI ผ่าน SSH¶
WebChat ไม่ได้ใช้พอร์ต HTTP แยกอีกต่อไป WebChat ไม่ได้ใช้พอร์ตHTTPแยกต่างหากอีกต่อไป UI แชต SwiftUI จะเชื่อมต่อโดยตรงกับ Gateway WebSocket
- Forward
18789ผ่าน SSH (ดูด้านบน) จากนั้นให้ไคลเอนต์เชื่อมต่อไปที่ws://127.0.0.1:18789 - บน macOS แนะนำให้ใช้โหมด “Remote over SSH” ของแอป ซึ่งจัดการอุโมงค์ให้อัตโนมัติ
แอปmacOS “Remote over SSH”¶
แอปเมนูบาร์บน macOS สามารถจัดการการตั้งค่าเดียวกันได้ครบวงจร (ตรวจสถานะระยะไกล, WebChat, และการ forward Voice Wake)
Runbook: macOS remote access
กฎด้านความปลอดภัย (รีโมต/VPN)¶
สรุปสั้น ๆ: คง Gateway เป็น loopback เท่านั้น เว้นแต่คุณมั่นใจว่าจำเป็นต้อง bind
- Loopback + SSH/Tailscale Serve เป็นค่าเริ่มต้นที่ปลอดภัยที่สุด (ไม่มีการเปิดสาธารณะ)
- การ bind ที่ไม่ใช่ loopback (
lan/tailnet/customหรือautoเมื่อไม่สามารถใช้ loopback ได้) ต้องใช้โทเคน/รหัสผ่านสำหรับการยืนยันตัวตน gateway.remote.tokenใช้ เฉพาะ สำหรับการเรียก CLI ระยะไกล — ไม่ เปิดใช้งานการยืนยันตัวตนภายในเครื่องgateway.remote.tlsFingerprintจะ pin ใบรับรองTLSระยะไกลเมื่อใช้wss://- Tailscale Serve สามารถยืนยันตัวตนผ่าน identity headers เมื่อ
gateway.auth.allowTailscale: trueตั้งค่าเป็นfalseหากคุณต้องการใช้โทเคน/รหัสผ่านแทน ตั้งค่าเป็นfalseหากคุณต้องการใช้โทเคน/รหัสผ่านแทน - ปฏิบัติต่อการควบคุมผ่านเบราว์เซอร์เหมือนการเข้าถึงของผู้ปฏิบัติงาน: จำกัดเฉพาะ tailnet + การจับคู่โหนดอย่างรอบคอบ
เจาะลึก: Security