Gateway
Gateway เป็นเจ้าของการจับคู่
ในการจับคู่ที่ Gateway เป็นเจ้าของ Gateway คือแหล่งข้อมูลจริงสำหรับกำหนดว่าโหนดใด ได้รับอนุญาตให้เข้าร่วม UI (แอป macOS, ไคลเอนต์ในอนาคต) เป็นเพียงส่วนหน้า ที่อนุมัติหรือปฏิเสธคำขอที่รอดำเนินการ
สำคัญ: โหนด WS ใช้ การจับคู่อุปกรณ์ (บทบาท node) ระหว่าง connect
node.pair.* เป็นที่เก็บการจับคู่แยกต่างหากและ ไม่ได้ ควบคุมการผ่าน WS handshake
เฉพาะไคลเอนต์ที่เรียก node.pair.* อย่างชัดเจนเท่านั้นที่ใช้ขั้นตอนนี้
แนวคิด
- คำขอที่รอดำเนินการ: โหนดขอเข้าร่วม ต้องได้รับการอนุมัติ
- โหนดที่จับคู่แล้ว: โหนดที่ได้รับอนุมัติพร้อมโทเค็นยืนยันตัวตนที่ออกให้
- Transport: จุดปลายทาง WS ของ Gateway ส่งต่อคำขอแต่ไม่ตัดสิน การเป็นสมาชิก (การรองรับสะพาน TCP เดิมถูกนำออกแล้ว)
การจับคู่ทำงานอย่างไร
- โหนดเชื่อมต่อกับ Gateway WS และขอจับคู่
- Gateway จัดเก็บ คำขอที่รอดำเนินการ และปล่อย
node.pair.requested - คุณอนุมัติหรือปฏิเสธคำขอ (CLI หรือ UI)
- เมื่ออนุมัติ Gateway จะออก โทเค็นใหม่ (โทเค็นจะถูกหมุนเวียนเมื่อจับคู่ใหม่)
- โหนดเชื่อมต่อใหม่โดยใช้โทเค็น และตอนนี้ถือว่า "จับคู่แล้ว"
คำขอที่รอดำเนินการจะหมดอายุโดยอัตโนมัติหลังจาก 5 นาที
เวิร์กโฟลว์ CLI (เหมาะกับโหมดไม่มีหน้าจอ)
openclaw nodes pendingopenclaw nodes approve <requestId>openclaw nodes reject <requestId>openclaw nodes statusopenclaw nodes remove --node <id|name|ip>openclaw nodes rename --node <id|name|ip> --name "Living Room iPad"nodes status แสดงโหนดที่จับคู่/เชื่อมต่อแล้วและความสามารถของโหนดเหล่านั้น
พื้นผิว API (โปรโตคอล Gateway)
อีเวนต์:
node.pair.requested- ปล่อยเมื่อมีการสร้างคำขอที่รอดำเนินการใหม่node.pair.resolved- ปล่อยเมื่อคำขอได้รับการอนุมัติ/ปฏิเสธ/หมดอายุ
เมธอด:
node.pair.request- สร้างหรือนำคำขอที่รอดำเนินการกลับมาใช้ซ้ำnode.pair.list- แสดงรายการคำขอที่รอดำเนินการ + โหนดที่จับคู่แล้ว (operator.pairing)node.pair.approve- อนุมัติคำขอที่รอดำเนินการ (ออกโทเค็น)node.pair.reject- ปฏิเสธคำขอที่รอดำเนินการnode.pair.remove- ลบโหนดที่จับคู่แล้ว สำหรับการจับคู่ที่มีอุปกรณ์รองรับ การกระทำนี้ เพิกถอนบทบาทnodeของอุปกรณ์: เปลี่ยนแปลงdevices/paired.jsonและ ทำให้เซสชันบทบาทโหนดของอุปกรณ์นั้นไม่ถูกต้อง/ตัดการเชื่อมต่อ อุปกรณ์ หลายบทบาท (เช่น มีoperatorด้วย) จะยังคงแถวของตัวเองไว้และเสียเฉพาะบทบาทnodeส่วนแถวอุปกรณ์ที่มีเฉพาะโหนดจะถูกลบ นอกจากนี้ยังลบรายการการจับคู่โหนดเดิม ที่ Gateway เป็นเจ้าของซึ่งตรงกันด้วย Authz:operator.pairingสามารถลบ แถวโหนดที่ไม่ใช่ผู้ปฏิบัติการได้ ส่วนผู้เรียกด้วยโทเค็นอุปกรณ์ที่เพิกถอนบทบาทโหนด ของตนเอง บนอุปกรณ์หลายบทบาทต้องมีoperator.adminเพิ่มเติมnode.pair.verify- ตรวจสอบ{ nodeId, token }
หมายเหตุ:
node.pair.requestเป็น idempotent ต่อโหนด: การเรียกซ้ำจะคืน คำขอที่รอดำเนินการเดียวกัน- คำขอซ้ำสำหรับโหนดที่รอดำเนินการเดียวกันยังรีเฟรช metadata ของโหนดที่จัดเก็บไว้ และ snapshot คำสั่งที่ประกาศล่าสุดซึ่งอยู่ใน allowlist เพื่อให้ผู้ปฏิบัติการมองเห็น
- การอนุมัติจะสร้างโทเค็นใหม่เสมอ ทุกครั้ง; จะไม่มีการคืนโทเค็นจาก
node.pair.request - ระดับขอบเขตผู้ปฏิบัติการและการตรวจสอบตอนอนุมัติสรุปไว้ใน ขอบเขตผู้ปฏิบัติการ
- คำขออาจใส่
silent: trueเป็นคำใบ้สำหรับขั้นตอนการอนุมัติอัตโนมัติ node.pair.approveใช้คำสั่งที่ประกาศไว้ในคำขอที่รอดำเนินการเพื่อบังคับใช้ ขอบเขตการอนุมัติเพิ่มเติม:- คำขอที่ไม่มีคำสั่ง:
operator.pairing - คำขอคำสั่งที่ไม่ใช่ exec:
operator.pairing+operator.write - คำขอ
system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- คำขอที่ไม่มีคำสั่ง:
การควบคุมคำสั่งโหนด (2026.3.31+)
เมื่อโหนดเชื่อมต่อเป็นครั้งแรก จะมีการขอจับคู่โดยอัตโนมัติ จนกว่าคำขอจับคู่จะได้รับอนุมัติ คำสั่งโหนดที่รอดำเนินการทั้งหมดจากโหนดนั้นจะถูกกรองและจะไม่ทำงาน เมื่อสร้างความเชื่อถือผ่านการอนุมัติการจับคู่แล้ว คำสั่งที่โหนดประกาศไว้จะพร้อมใช้งานภายใต้นโยบายคำสั่งปกติ
หมายความว่า:
- โหนดที่ก่อนหน้านี้อาศัยเพียงการจับคู่อุปกรณ์เพื่อเปิดเผยคำสั่ง ต้องดำเนินการจับคู่โหนดให้เสร็จสิ้นแล้ว
- คำสั่งที่เข้าคิวไว้ก่อนการอนุมัติการจับคู่จะถูกทิ้ง ไม่ใช่เลื่อนออกไป
ขอบเขตความเชื่อถือของอีเวนต์โหนด (2026.3.31+)
สรุปที่มาจากโหนดและอีเวนต์เซสชันที่เกี่ยวข้องถูกจำกัดไว้เฉพาะพื้นผิวที่เชื่อถือได้ตามเจตนา ขั้นตอนที่ขับเคลื่อนด้วยการแจ้งเตือนหรือถูกทริกเกอร์โดยโหนดซึ่งก่อนหน้านี้อาศัยการเข้าถึงเครื่องโฮสต์หรือเครื่องมือเซสชันที่กว้างกว่า อาจต้องปรับแก้ การเสริมความแข็งแกร่งนี้ทำให้แน่ใจว่าอีเวนต์โหนดไม่สามารถยกระดับเป็นการเข้าถึงเครื่องมือระดับโฮสต์เกินกว่าที่ขอบเขตความเชื่อถือของโหนดอนุญาต
การอัปเดตสถานะการมีอยู่ของโหนดแบบคงทนทำตามขอบเขตอัตลักษณ์เดียวกัน อีเวนต์ node.presence.alive จะ
ยอมรับเฉพาะจากเซสชันอุปกรณ์โหนดที่ผ่านการยืนยันตัวตน และอัปเดต metadata การจับคู่เฉพาะเมื่อ
อัตลักษณ์อุปกรณ์/โหนดถูกจับคู่ไว้แล้ว ค่า client.id ที่ประกาศเองไม่เพียงพอสำหรับเขียน
สถานะที่เห็นครั้งล่าสุด
การอนุมัติอัตโนมัติ (แอป macOS)
แอป macOS สามารถลอง อนุมัติแบบเงียบ ได้ตามตัวเลือกเมื่อ:
- คำขอถูกทำเครื่องหมาย
silent, และ - แอปสามารถตรวจสอบการเชื่อมต่อ SSH ไปยังโฮสต์ Gateway โดยใช้ผู้ใช้เดียวกันได้
หากการอนุมัติแบบเงียบล้มเหลว จะถอยกลับไปใช้พรอมป์ "อนุมัติ/ปฏิเสธ" ตามปกติ
การอนุมัติอุปกรณ์อัตโนมัติด้วย CIDR ที่เชื่อถือได้
การจับคู่อุปกรณ์ WS สำหรับ role: node ยังคงเป็นแบบทำเองโดยค่าเริ่มต้น สำหรับเครือข่าย
โหนดส่วนตัวที่ Gateway เชื่อถือเส้นทางเครือข่ายอยู่แล้ว ผู้ปฏิบัติการสามารถ
เลือกใช้ด้วย CIDR หรือ IP ที่เจาะจงอย่างชัดเจน:
{ gateway: { nodes: { pairing: { autoApproveCidrs: ["192.168.1.0/24"], }, }, },}ขอบเขตความปลอดภัย:
- ปิดใช้งานเมื่อไม่ได้ตั้งค่า
gateway.nodes.pairing.autoApproveCidrs - ไม่มีโหมดอนุมัติอัตโนมัติแบบครอบคลุมทั้ง LAN หรือเครือข่ายส่วนตัว
- เฉพาะการจับคู่อุปกรณ์
role: nodeใหม่ที่ไม่มีขอบเขตที่ร้องขอเท่านั้นที่เข้าเงื่อนไข - ไคลเอนต์ผู้ปฏิบัติการ, เบราว์เซอร์, Control UI และ WebChat ยังคงเป็นแบบทำเอง
- การอัปเกรดบทบาท, ขอบเขต, metadata และกุญแจสาธารณะยังคงเป็นแบบทำเอง
- เส้นทางเฮดเดอร์พร็อกซีที่เชื่อถือได้ของ same-host loopback ไม่เข้าเงื่อนไข เพราะ เส้นทางนั้นสามารถถูกปลอมโดยผู้เรียกในเครื่องได้
การอนุมัติอัตโนมัติสำหรับการอัปเกรด metadata
เมื่ออุปกรณ์ที่จับคู่แล้วเชื่อมต่อใหม่โดยมีเพียงการเปลี่ยนแปลง metadata ที่ไม่อ่อนไหว
(เช่น ชื่อที่แสดงหรือคำใบ้แพลตฟอร์มของไคลเอนต์) OpenClaw จะถือว่า
เป็น metadata-upgrade การอนุมัติอัตโนมัติแบบเงียบมีขอบเขตแคบ: ใช้เฉพาะ
กับการเชื่อมต่อใหม่ในเครื่องที่ไม่ใช่เบราว์เซอร์และเชื่อถือได้ ซึ่งพิสูจน์การครอบครองข้อมูลประจำตัวในเครื่อง
หรือที่ใช้ร่วมกันแล้ว รวมถึงการเชื่อมต่อใหม่ของแอปเนทีฟบนโฮสต์เดียวกันหลังจาก metadata เวอร์ชัน OS
เปลี่ยนแปลง ไคลเอนต์เบราว์เซอร์/Control UI และไคลเอนต์ระยะไกลยังคง
ใช้ขั้นตอนการอนุมัติใหม่อย่างชัดเจน การอัปเกรดขอบเขต (อ่านเป็นเขียน/ผู้ดูแล) และ
การเปลี่ยนกุญแจสาธารณะ ไม่ เข้าเงื่อนไขสำหรับการอนุมัติอัตโนมัติแบบ metadata-upgrade -
ยังคงเป็นคำขออนุมัติใหม่อย่างชัดเจน
ตัวช่วยจับคู่ QR
/pair qr แสดงผล payload การจับคู่เป็นสื่อแบบมีโครงสร้างเพื่อให้ไคลเอนต์มือถือและ
เบราว์เซอร์สแกนได้โดยตรง
การลบอุปกรณ์จะกวาดคำขอจับคู่ที่รอดำเนินการเก่าทั้งหมดสำหรับ
id อุปกรณ์นั้นด้วย ดังนั้น nodes pending จะไม่แสดงแถวกำพร้าหลังจากการเพิกถอน
ตำแหน่งภายในเครื่องและเฮดเดอร์ที่ส่งต่อ
การจับคู่ Gateway จะถือว่าการเชื่อมต่อเป็น loopback เฉพาะเมื่อทั้งซ็อกเก็ตดิบ
และหลักฐานพร็อกซีต้นทางใด ๆ เห็นตรงกัน หากคำขอมาถึงบน loopback แต่
มีหลักฐานเฮดเดอร์ Forwarded, X-Forwarded-* ใด ๆ หรือ X-Real-IP
หลักฐานเฮดเดอร์ที่ส่งต่อนั้นจะทำให้ข้ออ้างตำแหน่ง loopback ไม่เข้าเงื่อนไข เส้นทางการจับคู่
จึงต้องได้รับการอนุมัติอย่างชัดเจนแทนที่จะถือว่าคำขอเป็นการเชื่อมต่อจากโฮสต์เดียวกันแบบเงียบ ๆ
ดู การยืนยันตัวตนพร็อกซีที่เชื่อถือได้ สำหรับ
กฎเทียบเท่าในการยืนยันตัวตนผู้ปฏิบัติการ
ที่เก็บข้อมูล (ภายในเครื่อง, ส่วนตัว)
สถานะการจับคู่ถูกจัดเก็บใต้ไดเรกทอรีสถานะของ Gateway (ค่าเริ่มต้น ~/.openclaw):
~/.openclaw/nodes/paired.json~/.openclaw/nodes/pending.json
หากคุณ override OPENCLAW_STATE_DIR โฟลเดอร์ nodes/ จะย้ายตามไปด้วย
หมายเหตุด้านความปลอดภัย:
- โทเค็นเป็นความลับ; ให้ถือว่า
paired.jsonเป็นข้อมูลอ่อนไหว - การหมุนเวียนโทเค็นต้องได้รับการอนุมัติใหม่ (หรือลบรายการโหนด)
พฤติกรรม Transport
- Transport เป็นแบบ ไร้สถานะ; ไม่จัดเก็บการเป็นสมาชิก
- หาก Gateway ออฟไลน์หรือปิดใช้งานการจับคู่ โหนดจะจับคู่ไม่ได้
- หาก Gateway อยู่ในโหมดระยะไกล การจับคู่ยังคงเกิดขึ้นกับที่เก็บของ Gateway ระยะไกล