Configuration

การจับคู่

"การจับคู่" คือขั้นตอนการอนุมัติสิทธิ์เข้าถึงอย่างชัดเจนของ OpenClaw ใช้ในสองตำแหน่ง:

  1. การจับคู่ DM (ใครบ้างที่ได้รับอนุญาตให้คุยกับบอต)
  2. การจับคู่ Node (อุปกรณ์/Node ใดบ้างที่ได้รับอนุญาตให้เข้าร่วมเครือข่าย Gateway)

บริบทด้านความปลอดภัย: ความปลอดภัย

1) การจับคู่ DM (การเข้าถึงแชตขาเข้า)

เมื่อช่องทางถูกกำหนดค่าด้วยนโยบาย DM pairing ผู้ส่งที่ไม่รู้จักจะได้รับโค้ดสั้น และข้อความของพวกเขาจะ ไม่ถูกประมวลผล จนกว่าคุณจะอนุมัติ

นโยบาย DM เริ่มต้นมีเอกสารไว้ที่: ความปลอดภัย

dmPolicy: "open" จะเป็นสาธารณะก็ต่อเมื่อ allowlist DM ที่มีผลรวม "*" อยู่ด้วย การตั้งค่าและการตรวจสอบความถูกต้องต้องใช้ไวลด์การ์ดนั้นสำหรับการกำหนดค่า public-open หากสถานะที่มีอยู่มี open พร้อมรายการ allowFrom แบบเจาะจง runtime จะยังคงอนุญาตเฉพาะผู้ส่งเหล่านั้นเท่านั้น และการอนุมัติใน pairing-store จะไม่ขยายสิทธิ์เข้าถึง open

โค้ดจับคู่:

  • 8 อักขระ ตัวพิมพ์ใหญ่ ไม่มีอักขระที่สับสนได้ง่าย (0O1I)
  • หมดอายุหลัง 1 ชั่วโมง บอตจะส่งข้อความจับคู่เฉพาะเมื่อมีการสร้างคำขอใหม่เท่านั้น (โดยประมาณหนึ่งครั้งต่อชั่วโมงต่อผู้ส่ง)
  • คำขอจับคู่ DM ที่รอดำเนินการถูกจำกัดไว้ที่ 3 รายการต่อช่องทาง โดยค่าเริ่มต้น คำขอเพิ่มเติมจะถูกเพิกเฉยจนกว่าจะมีรายการหนึ่งหมดอายุหรือได้รับการอนุมัติ

อนุมัติผู้ส่ง

bash
openclaw pairing list telegramopenclaw pairing approve telegram <CODE>

หากยังไม่มีการกำหนดค่าเจ้าของคำสั่ง การอนุมัติโค้ดจับคู่ DM จะบูตสแตรป commands.ownerAllowFrom ไปยังผู้ส่งที่ได้รับอนุมัติด้วย เช่น telegram:123456789 ซึ่งทำให้การตั้งค่าครั้งแรกมีเจ้าของที่ชัดเจนสำหรับคำสั่งที่มีสิทธิ์พิเศษและพรอมป์อนุมัติ exec หลังจากมีเจ้าของแล้ว การอนุมัติการจับคู่ในภายหลังจะให้เฉพาะสิทธิ์เข้าถึง DM เท่านั้น โดยจะไม่เพิ่มเจ้าของเพิ่มเติม

ช่องทางที่รองรับ: discord, feishu, googlechat, imessage, irc, line, matrix, mattermost, msteams, nextcloud-talk, nostr, openclaw-weixin, signal, slack, synology-chat, telegram, twitch, whatsapp, zalo, zalouser

กลุ่มผู้ส่งที่นำกลับมาใช้ซ้ำได้

ใช้ accessGroups ระดับบนสุดเมื่อชุดผู้ส่งที่เชื่อถือได้เดียวกันควรถูกใช้กับ หลายช่องทางข้อความ หรือกับทั้ง allowlist ของ DM และกลุ่ม

กลุ่มแบบคงที่ใช้ type: "message.senders" และถูกอ้างอิงด้วย accessGroup:<name> จาก allowlist ของช่องทาง:

json5
{  accessGroups: {    operators: {      type: "message.senders",      members: {        discord: ["discord:123456789012345678"],        telegram: ["987654321"],        whatsapp: ["+15551234567"],      },    },  },  channels: {    telegram: { dmPolicy: "allowlist", allowFrom: ["accessGroup:operators"] },    whatsapp: { groupPolicy: "allowlist", groupAllowFrom: ["accessGroup:operators"] },  },}

กลุ่มสิทธิ์เข้าถึงมีเอกสารโดยละเอียดที่นี่: กลุ่มสิทธิ์เข้าถึง

ตำแหน่งที่จัดเก็บสถานะ

จัดเก็บภายใต้ ~/.openclaw/credentials/:

  • คำขอที่รอดำเนินการ: <channel>-pairing.json
  • ที่เก็บ allowlist ที่อนุมัติแล้ว:
    • บัญชีเริ่มต้น: <channel>-allowFrom.json
    • บัญชีที่ไม่ใช่ค่าเริ่มต้น: <channel>-<accountId>-allowFrom.json

พฤติกรรมการกำหนดขอบเขตบัญชี:

  • บัญชีที่ไม่ใช่ค่าเริ่มต้นอ่าน/เขียนเฉพาะไฟล์ allowlist ที่กำหนดขอบเขตของตน
  • บัญชีเริ่มต้นใช้ไฟล์ allowlist แบบไม่กำหนดขอบเขตตามช่องทาง

ให้ถือว่าสิ่งเหล่านี้เป็นข้อมูลอ่อนไหว (เพราะควบคุมสิทธิ์เข้าถึงผู้ช่วยของคุณ)

2) การจับคู่อุปกรณ์ Node (Node iOS/Android/macOS/headless)

Node เชื่อมต่อกับ Gateway ในฐานะ อุปกรณ์ ด้วย role: node Gateway สร้างคำขอจับคู่อุปกรณ์ที่ต้องได้รับการอนุมัติ

จับคู่ผ่าน Telegram (แนะนำสำหรับ iOS)

หากคุณใช้ Plugin device-pair คุณสามารถทำการจับคู่อุปกรณ์ครั้งแรกได้ทั้งหมดจาก Telegram:

  1. ใน Telegram ให้ส่งข้อความถึงบอตของคุณ: /pair
  2. บอตตอบกลับด้วยสองข้อความ: ข้อความคำแนะนำและข้อความ โค้ดตั้งค่า แยกต่างหาก (คัดลอก/วางใน Telegram ได้ง่าย)
  3. บนโทรศัพท์ของคุณ เปิดแอป OpenClaw iOS → Settings → Gateway
  4. สแกน QR code หรือวางโค้ดตั้งค่าและเชื่อมต่อ
  5. กลับไปที่ Telegram: /pair pending (ตรวจสอบ ID คำขอ บทบาท และขอบเขต) จากนั้นอนุมัติ

โค้ดตั้งค่าเป็น payload JSON ที่เข้ารหัส base64 ซึ่งประกอบด้วย:

  • url: URL WebSocket ของ Gateway (ws://... หรือ wss://...)
  • bootstrapToken: โทเค็นบูตสแตรปแบบอายุสั้นสำหรับอุปกรณ์เดียวที่ใช้สำหรับ handshake การจับคู่ครั้งแรก

โทเค็นบูตสแตรปนั้นพาโปรไฟล์บูตสแตรปการจับคู่ในตัวมาด้วย:

  • โทเค็น node หลักที่ส่งต่อให้ยังคงเป็น scopes: []
  • โทเค็น operator ใด ๆ ที่ส่งต่อให้ยังคงถูกจำกัดอยู่กับ allowlist บูตสแตรป: operator.approvals, operator.read, operator.talk.secrets, operator.write
  • การตรวจสอบ scope ของบูตสแตรปมีคำนำหน้าตามบทบาท ไม่ใช่ pool scope แบบแบนเดียว: รายการ scope ของ operator จะตอบสนองเฉพาะคำขอ operator เท่านั้น และบทบาทที่ไม่ใช่ operator ยังต้องขอ scope ภายใต้คำนำหน้าบทบาทของตนเอง
  • การหมุนเวียน/เพิกถอนโทเค็นในภายหลังยังคงถูกจำกัดทั้งโดยสัญญาบทบาทที่อุปกรณ์ได้รับอนุมัติ และ scope operator ของเซสชันผู้เรียก

ปฏิบัติกับโค้ดตั้งค่าเหมือนรหัสผ่านในช่วงที่ยังใช้ได้

สำหรับการจับคู่มือถือผ่าน Tailscale, สาธารณะ หรือระยะไกลอื่น ๆ ให้ใช้ Tailscale Serve/Funnel หรือ URL Gateway wss:// อื่น โค้ดตั้งค่าแบบข้อความธรรมดา ws:// จะยอมรับเฉพาะ local loopback, ที่อยู่ LAN ส่วนตัว, โฮสต์ Bonjour .local และโฮสต์ Android emulator เท่านั้น ที่อยู่ CGNAT ของ tailnet, ชื่อ .ts.net และโฮสต์สาธารณะยังคง ปิดไม่ให้ผ่านก่อนออก QR/โค้ดตั้งค่า

อนุมัติอุปกรณ์ Node

bash
openclaw devices listopenclaw devices approve <requestId>openclaw devices reject <requestId>

เมื่อการอนุมัติแบบชัดเจนถูกปฏิเสธเพราะเซสชันอุปกรณ์ที่จับคู่แล้วซึ่งอนุมัติ ถูกเปิดด้วย scope สำหรับการจับคู่เท่านั้น CLI จะลองส่งคำขอเดิมซ้ำด้วย operator.admin วิธีนี้ทำให้อุปกรณ์ที่จับคู่แล้วและมีความสามารถระดับ admin สามารถกู้คืนการจับคู่ Control UI/เบราว์เซอร์ใหม่ได้โดยไม่ต้องแก้ไข devices/paired.json ด้วยมือ Gateway ยังคงตรวจสอบการเชื่อมต่อที่ลองซ้ำ โทเค็นที่ไม่สามารถยืนยันตัวตน ด้วย operator.admin จะยังคงถูกบล็อก

หากอุปกรณ์เดิมลองใหม่ด้วยรายละเอียดการยืนยันตัวตนที่ต่างออกไป (เช่น บทบาท/scope/public key ต่างกัน) คำขอที่รอดำเนินการก่อนหน้าจะถูกแทนที่ และจะมีการสร้าง requestId ใหม่

การอนุมัติอัตโนมัติสำหรับ Node แบบ trusted-CIDR ที่เป็นตัวเลือก

การจับคู่อุปกรณ์ยังคงเป็นแบบทำเองโดยค่าเริ่มต้น สำหรับเครือข่าย Node ที่ควบคุมอย่างเข้มงวด คุณสามารถเลือกใช้การอนุมัติอัตโนมัติสำหรับ Node ครั้งแรกด้วย CIDR หรือ IP แบบเจาะจงอย่างชัดเจน:

json5
{  gateway: {    nodes: {      pairing: {        autoApproveCidrs: ["192.168.1.0/24"],      },    },  },}

สิ่งนี้ใช้เฉพาะกับคำขอจับคู่ role: node ใหม่ที่ไม่มี scope ที่ร้องขอเท่านั้น ไคลเอนต์ Operator, เบราว์เซอร์, Control UI และ WebChat ยังต้องการ การอนุมัติด้วยมือ การเปลี่ยนบทบาท, scope, metadata และ public-key ยังต้องการ การอนุมัติด้วยมือ

ที่จัดเก็บสถานะการจับคู่ Node

จัดเก็บภายใต้ ~/.openclaw/devices/:

  • pending.json (อายุสั้น; คำขอที่รอดำเนินการจะหมดอายุ)
  • paired.json (อุปกรณ์ที่จับคู่แล้ว + โทเค็น)

หมายเหตุ

  • API เดิม node.pair.* (CLI: openclaw nodes pending|approve|reject|remove|rename) เป็น ที่เก็บการจับคู่แยกต่างหากที่ Gateway เป็นเจ้าของ Node แบบ WS ยังต้องใช้การจับคู่อุปกรณ์
  • ระเบียนการจับคู่คือแหล่งความจริงถาวรสำหรับบทบาทที่อนุมัติ โทเค็นอุปกรณ์ที่ใช้งานอยู่ ยังคงถูกจำกัดอยู่กับชุดบทบาทที่อนุมัตินั้น รายการโทเค็นหลงเหลือ นอกบทบาทที่อนุมัติจะไม่สร้างสิทธิ์เข้าถึงใหม่

เอกสารที่เกี่ยวข้อง

Was this useful?