---
read_when:
    - การตั้งค่าหรือการดีบักการควบคุม Mac ระยะไกล
summary: โฟลว์ของแอป macOS สำหรับควบคุม Gateway OpenClaw ระยะไกลผ่าน SSH
title: การควบคุมระยะไกล
x-i18n:
    generated_at: "2026-05-06T09:22:48Z"
    model: gpt-5.5
    provider: openai
    source_hash: bd7eb110f4c3e6a52b4b9baeccce4ef9d02c01104c188940c28f245bc161894a
    source_path: platforms/mac/remote.md
    workflow: 16
---

โฟลว์นี้ทำให้แอป macOS ทำหน้าที่เป็นรีโมตคอนโทรลเต็มรูปแบบสำหรับ OpenClaw gateway ที่ทำงานอยู่บนโฮสต์อื่น (เดสก์ท็อป/เซิร์ฟเวอร์) ได้ นี่คือฟีเจอร์ **รีโมตผ่าน SSH** (การรันแบบรีโมต) ของแอป ฟีเจอร์ทั้งหมด ไม่ว่าจะเป็นการตรวจสอบสุขภาพ การส่งต่อการปลุกด้วยเสียง และเว็บแชต จะใช้การกำหนดค่า SSH รีโมตเดียวกันจาก _การตั้งค่า → ทั่วไป_

## โหมด

- **ภายในเครื่อง (Mac เครื่องนี้)**: ทุกอย่างทำงานบนแล็ปท็อป ไม่มี SSH เกี่ยวข้อง
- **รีโมตผ่าน SSH (ค่าเริ่มต้น)**: คำสั่ง OpenClaw จะถูกเรียกใช้บนโฮสต์รีโมต แอป Mac เปิดการเชื่อมต่อ SSH ด้วย `-o BatchMode` พร้อม identity/key ที่คุณเลือกและการส่งต่อพอร์ตภายในเครื่อง
- **รีโมตโดยตรง (ws/wss)**: ไม่มีอุโมงค์ SSH แอป Mac เชื่อมต่อกับ URL ของ gateway โดยตรง (เช่น ผ่าน Tailscale Serve หรือ reverse proxy HTTPS สาธารณะ)

## ทรานสปอร์ตรีโมต

โหมดรีโมตรองรับทรานสปอร์ตสองแบบ:

- **อุโมงค์ SSH** (ค่าเริ่มต้น): ใช้ `ssh -N -L ...` เพื่อส่งต่อพอร์ตของ gateway ไปยัง localhost gateway จะเห็น IP ของ node เป็น `127.0.0.1` เพราะอุโมงค์เป็น loopback
- **โดยตรง (ws/wss)**: เชื่อมต่อไปยัง URL ของ gateway โดยตรง gateway จะเห็น IP ไคลเอนต์จริง

ในโหมดอุโมงค์ SSH ชื่อโฮสต์ LAN/tailnet ที่ค้นพบจะถูกบันทึกเป็น
`gateway.remote.sshTarget` แอปจะคง `gateway.remote.url` ไว้ที่ endpoint
ของอุโมงค์ภายในเครื่อง เช่น `ws://127.0.0.1:18789` เพื่อให้ CLI, เว็บแชต และ
บริการ node-host ภายในเครื่องทั้งหมดใช้ทรานสปอร์ต loopback ที่ปลอดภัยเดียวกัน

การทำงานอัตโนมัติของเบราว์เซอร์ในโหมดรีโมตเป็นของโฮสต์ node ของ CLI ไม่ใช่
node ของแอป macOS แบบเนทีฟ แอปจะเริ่มบริการโฮสต์ node ที่ติดตั้งไว้เมื่อ
เป็นไปได้ หากคุณต้องการควบคุมเบราว์เซอร์จาก Mac เครื่องนั้น ให้ติดตั้ง/เริ่มด้วย
`openclaw node install ...` และ `openclaw node start` (หรือรัน
`openclaw node run ...` ใน foreground) จากนั้นกำหนดเป้าหมายไปยัง
node ที่รองรับเบราว์เซอร์นั้น

## ข้อกำหนดเบื้องต้นบนโฮสต์รีโมต

1. ติดตั้ง Node + pnpm และ build/ติดตั้ง OpenClaw CLI (`pnpm install && pnpm build && pnpm link --global`)
2. ตรวจสอบให้แน่ใจว่า `openclaw` อยู่บน PATH สำหรับ shell แบบไม่โต้ตอบ (symlink ไปยัง `/usr/local/bin` หรือ `/opt/homebrew/bin` หากจำเป็น)
3. เปิด SSH ด้วย key auth เราแนะนำ IP ของ **Tailscale** เพื่อให้เข้าถึงได้นิ่งนอก LAN

## การตั้งค่าแอป macOS

1. เปิด _การตั้งค่า → ทั่วไป_
2. ใต้ **OpenClaw ทำงานที่** ให้เลือก **รีโมตผ่าน SSH** และตั้งค่า:
   - **ทรานสปอร์ต**: **อุโมงค์ SSH** หรือ **โดยตรง (ws/wss)**
   - **เป้าหมาย SSH**: `user@host` (มี `:port` ได้ตามต้องการ)
     - หาก gateway อยู่บน LAN เดียวกันและประกาศ Bonjour ให้เลือกจากรายการที่ค้นพบเพื่อเติมช่องนี้อัตโนมัติ
   - **URL ของ Gateway** (เฉพาะโดยตรง): `wss://gateway.example.ts.net` (หรือ `ws://...` สำหรับภายในเครื่อง/LAN)
   - **ไฟล์ identity** (ขั้นสูง): พาธไปยัง key ของคุณ
   - **รูทโปรเจกต์** (ขั้นสูง): พาธ checkout รีโมตที่ใช้สำหรับคำสั่ง
   - **พาธ CLI** (ขั้นสูง): พาธเสริมไปยัง entrypoint/binary `openclaw` ที่รันได้ (เติมอัตโนมัติเมื่อมีการประกาศ)
3. กด **ทดสอบรีโมต** ความสำเร็จหมายความว่า `openclaw status --json` ฝั่งรีโมตรันได้ถูกต้อง ความล้มเหลวมักหมายถึงปัญหา PATH/CLI; exit 127 หมายความว่าพบ CLI บนรีโมตไม่ได้
4. การตรวจสอบสุขภาพและเว็บแชตจะรันผ่านอุโมงค์ SSH นี้โดยอัตโนมัติ

## เว็บแชต

- **อุโมงค์ SSH**: เว็บแชตเชื่อมต่อกับ gateway ผ่านพอร์ตควบคุม WebSocket ที่ถูกส่งต่อ (ค่าเริ่มต้น 18789)
- **โดยตรง (ws/wss)**: เว็บแชตเชื่อมต่อไปยัง URL ของ gateway ที่กำหนดค่าไว้โดยตรง
- ไม่มีเซิร์ฟเวอร์ HTTP WebChat แยกต่างหากอีกต่อไป

## สิทธิ์

- โฮสต์รีโมตต้องมีการอนุมัติ TCC เดียวกับภายในเครื่อง (Automation, Accessibility, Screen Recording, Microphone, Speech Recognition, Notifications) รัน onboarding บนเครื่องนั้นเพื่อให้สิทธิ์ครั้งเดียว
- Node จะประกาศสถานะสิทธิ์ของตนผ่าน `node.list` / `node.describe` เพื่อให้ agent รู้ว่ามีอะไรพร้อมใช้งาน

## หมายเหตุด้านความปลอดภัย

- ควรใช้การ bind แบบ loopback บนโฮสต์รีโมตและเชื่อมต่อผ่าน SSH หรือ Tailscale
- การทำอุโมงค์ SSH ใช้การตรวจสอบ host-key แบบเข้มงวด ให้ trust host key ก่อนเพื่อให้มีอยู่ใน `~/.ssh/known_hosts`
- หากคุณ bind Gateway กับอินเทอร์เฟซที่ไม่ใช่ loopback ให้กำหนดให้ต้องมี Gateway auth ที่ถูกต้อง: token, password หรือ reverse proxy ที่รับรู้ตัวตนด้วย `gateway.auth.mode: "trusted-proxy"`
- ดู [ความปลอดภัย](/th/gateway/security) และ [Tailscale](/th/gateway/tailscale)

## โฟลว์เข้าสู่ระบบ WhatsApp (รีโมต)

- รัน `openclaw channels login --verbose` **บนโฮสต์รีโมต** สแกน QR ด้วย WhatsApp บนโทรศัพท์ของคุณ
- รันเข้าสู่ระบบใหม่บนโฮสต์นั้นหาก auth หมดอายุ การตรวจสอบสุขภาพจะแสดงปัญหาการเชื่อมโยง

## การแก้ไขปัญหา

- **exit 127 / ไม่พบ**: `openclaw` ไม่ได้อยู่บน PATH สำหรับ shell ที่ไม่ใช่ login เพิ่มลงใน `/etc/paths`, shell rc ของคุณ หรือ symlink ไปยัง `/usr/local/bin`/`/opt/homebrew/bin`
- **Health probe ล้มเหลว**: ตรวจสอบการเข้าถึง SSH, PATH และว่า Baileys เข้าสู่ระบบแล้ว (`openclaw status --json`)
- **เว็บแชตค้าง**: ยืนยันว่า gateway กำลังทำงานบนโฮสต์รีโมตและพอร์ตที่ส่งต่อตรงกับพอร์ต WS ของ gateway; UI ต้องมีการเชื่อมต่อ WS ที่สุขภาพดี
- **IP ของ Node แสดง 127.0.0.1**: เป็นสิ่งที่คาดไว้เมื่อใช้อุโมงค์ SSH เปลี่ยน **ทรานสปอร์ต** เป็น **โดยตรง (ws/wss)** หากคุณต้องการให้ gateway เห็น IP ไคลเอนต์จริง
- **แดชบอร์ดทำงาน แต่ความสามารถของ Mac ออฟไลน์**: หมายความว่าการเชื่อมต่อ operator/control ของแอปยังสุขภาพดี แต่การเชื่อมต่อ node คู่กันไม่ได้เชื่อมต่อหรือขาดพื้นผิวคำสั่ง เปิดส่วนอุปกรณ์ในแถบเมนูและตรวจสอบว่า Mac เป็น `paired · disconnected` หรือไม่ สำหรับ endpoint Tailscale Serve แบบ `wss://*.ts.net` แอปจะตรวจจับ TLS leaf pin รุ่นเก่าที่ค้างหลังการหมุนเวียนใบรับรอง ล้าง pin ที่ค้างเมื่อ macOS trust ใบรับรองใหม่ และลองใหม่โดยอัตโนมัติ หากใบรับรองไม่ได้รับ trust จากระบบหรือโฮสต์ไม่ใช่ชื่อ Tailscale Serve ให้ตรวจสอบใบรับรองหรือเปลี่ยนไปใช้ **รีโมตผ่าน SSH**
- **การปลุกด้วยเสียง**: วลี trigger จะถูกส่งต่อโดยอัตโนมัติในโหมดรีโมต ไม่ต้องใช้ตัวส่งต่อแยกต่างหาก

## เสียงแจ้งเตือน

เลือกเสียงต่อการแจ้งเตือนจากสคริปต์ด้วย `openclaw` และ `node.invoke` เช่น:

```bash
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glass
```

ไม่มีตัวสลับ "เสียงเริ่มต้น" แบบ global ในแอปอีกต่อไป ผู้เรียกเลือกเสียง (หรือไม่เลือกเสียง) ต่อคำขอ

## ที่เกี่ยวข้อง

- [แอป macOS](/th/platforms/macos)
- [การเข้าถึงรีโมต](/th/gateway/remote)
