CLI commands

Node

openclaw node

یک میزبان Node بدون رابط گرافیکی را اجرا کنید که به WebSocketِ Gateway متصل می‌شود و system.run / system.which را روی این دستگاه در دسترس قرار می‌دهد.

چرا از میزبان Node استفاده کنیم؟

هنگامی از میزبان Node استفاده کنید که می‌خواهید عامل‌ها فرمان‌ها را روی دستگاه‌های دیگری در شبکه‌تان اجرا کنند، بدون اینکه برنامهٔ همراه کامل macOS را روی آن‌ها نصب کنید.

موارد استفادهٔ رایج:

  • اجرای فرمان‌ها روی دستگاه‌های راه‌دور Linux/Windows (سرورهای ساخت، دستگاه‌های آزمایشگاه، NAS).
  • حفظ اجرای فرمان در sandbox روی Gateway، اما واگذاری اجراهای تأییدشده به میزبان‌های دیگر.
  • فراهم‌کردن یک مقصد اجرای سبک و بدون رابط گرافیکی برای خودکارسازی یا Nodeهای CI.

اجرا همچنان به‌وسیلهٔ تأییدهای اجرا و فهرست‌های مجاز مختص هر عامل روی میزبان Node محافظت می‌شود؛ بنابراین می‌توانید دسترسی به فرمان‌ها را محدود و صریح نگه دارید.

openclaw node run می‌تواند پس از اتصال، ابزارهای مبتنی بر Plugin یا MCP را منتشر کند. Gateway به‌طور پیش‌فرض به توصیفگرهای Node جفت‌شده اعتماد می‌کند، اما الزام می‌کند فرمان هر توصیفگر در سطح فرمان‌های تأییدشدهٔ Node باقی بماند. عامل هر توصیفگر پذیرفته‌شده را به‌صورت یک ابزار عادی Plugin می‌بیند، اما اجرا همچنان از طریق node.invoke انجام می‌شود؛ بنابراین قطع اتصال Node، ابزار را از اجراهای جدید عامل حذف می‌کند. گردانندگان Gateway می‌توانند انتشار را با gateway.nodes.pluginTools.enabled: false غیرفعال کنند.

برای ابزارهای اعلانی MCP، ساختار معمول سرور MCP را در دستگاه Node زیر nodeHost.mcp.servers در openclaw.json اضافه کنید، سپس میزبان Node را راه‌اندازی مجدد کنید. Node خانوادهٔ فرمانِ مشروط به تأیید mcp.tools.call.v1 را اعلام می‌کند و پس از اتصال، ابزارهای فهرست‌شده را منتشر می‌کند؛ تغییر بعدی فهرست سرورها به جفت‌سازی مجدد نیاز ندارد. به سرورهای MCP میزبانی‌شده روی Node مراجعه کنید.

پراکسی مرورگر (بدون پیکربندی)

اگر browser.enabled روی Node غیرفعال نشده باشد، میزبان‌های Node به‌طور خودکار یک پراکسی مرورگر را اعلام می‌کنند. این قابلیت به عامل اجازه می‌دهد بدون پیکربندی اضافی، خودکارسازی مرورگر را روی آن Node انجام دهد.

به‌طور پیش‌فرض، پراکسی سطح پروفایل عادی مرورگر Node را در دسترس قرار می‌دهد. اگر nodeHost.browserProxy.allowProfiles را تنظیم کنید، پراکسی محدودکننده می‌شود: هدف‌گیری پروفایل‌هایی که در فهرست مجاز نیستند رد می‌شود و مسیرهای ایجاد/حذف پروفایل پایدار از طریق پراکسی مسدود می‌شوند.

در صورت نیاز، آن را روی Node غیرفعال کنید:

json5
{  nodeHost: {    browserProxy: {      enabled: false,    },  },}

اجرا (پیش‌زمینه)

bash
openclaw node run --host <gateway-host> --port 18789

گزینه‌ها:

  • --host <host>: میزبان WebSocketِ Gateway (پیش‌فرض: 127.0.0.1)
  • --port <port>: درگاه WebSocketِ Gateway (پیش‌فرض: 18789)
  • --context-path <path>: مسیر زمینهٔ WebSocketِ Gateway (برای مثال /openclaw-gw). به URL وب‌سوکت افزوده می‌شود.
  • --tls: استفاده از TLS برای اتصال Gateway
  • --no-tls: اجبار اتصال متن ساده به Gateway، حتی هنگامی که پیکربندی محلی Gateway، TLS را فعال کرده است
  • --tls-fingerprint <sha256>: اثر انگشت مورد انتظار گواهی TLS ‏(sha256)
  • --node-id <id>: بازنویسی شناسهٔ قدیمی نمونهٔ کلاینت ذخیره‌شده در node.json (جفت‌سازی را بازنشانی نمی‌کند)
  • --display-name <name>: بازنویسی نام نمایشی Node

احراز هویت Gateway برای میزبان Node

openclaw node run و openclaw node install احراز هویت Gateway را از پیکربندی/متغیرهای محیطی تعیین می‌کنند (فرمان‌های Node پرچم --token/--password ندارند):

  • ابتدا OPENCLAW_GATEWAY_TOKEN / OPENCLAW_GATEWAY_PASSWORD بررسی می‌شوند.
  • سپس پیکربندی محلی به‌عنوان جایگزین بررسی می‌شود: gateway.auth.token / gateway.auth.password.
  • در حالت محلی، میزبان Node عمداً gateway.remote.token / gateway.remote.password را به ارث نمی‌برد.
  • اگر gateway.auth.token / gateway.auth.password صراحتاً از طریق SecretRef پیکربندی شده اما حل‌نشده باشد، تعیین احراز هویت Node به‌صورت بسته شکست می‌خورد (هیچ جایگزین راه‌دوری خطا را پنهان نمی‌کند).
  • در gateway.mode=remote، فیلدهای کلاینت راه‌دور (gateway.remote.token / gateway.remote.password) نیز طبق قواعد تقدم راه‌دور قابل استفاده‌اند.
  • تعیین احراز هویت میزبان Node فقط متغیرهای محیطی OPENCLAW_GATEWAY_* را می‌پذیرد.

برای Nodeای که به یک Gateway متن سادهٔ ws:// متصل می‌شود، local loopback، آدرس‌های IP خصوصی، .local و میزبان‌های Tailnet با الگوی *.ts.net پذیرفته می‌شوند. برای سایر نام‌های DNS خصوصی مورد اعتماد، OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 را تنظیم کنید؛ بدون آن، راه‌اندازی Node به‌صورت بسته شکست می‌خورد و از شما می‌خواهد از wss://، تونل SSH یا Tailscale استفاده کنید. این یک فعال‌سازی اختیاری در محیط فرایند است، نه یک کلید پیکربندی در openclaw.json. اگر این متغیر در محیط فرمان نصب وجود داشته باشد، openclaw node install آن را در سرویس تحت نظارت Node ماندگار می‌کند.

سرویس (پس‌زمینه)

یک میزبان Node بدون رابط گرافیکی را به‌عنوان سرویس کاربر نصب کنید (launchd در macOS،‏ systemd در Linux و Windows Task Scheduler در Windows).

bash
openclaw node install --host <gateway-host> --port 18789

گزینه‌ها:

  • --host <host>: میزبان WebSocketِ Gateway (پیش‌فرض: 127.0.0.1)
  • --port <port>: درگاه WebSocketِ Gateway (پیش‌فرض: 18789)
  • --context-path <path>: مسیر زمینهٔ WebSocketِ Gateway (برای مثال /openclaw-gw). به URL وب‌سوکت افزوده می‌شود.
  • --tls: استفاده از TLS برای اتصال Gateway
  • --tls-fingerprint <sha256>: اثر انگشت مورد انتظار گواهی TLS ‏(sha256)
  • --node-id <id>: بازنویسی شناسهٔ قدیمی نمونهٔ کلاینت ذخیره‌شده در node.json (جفت‌سازی را بازنشانی نمی‌کند)
  • --display-name <name>: بازنویسی نام نمایشی Node
  • --runtime <runtime>: محیط اجرای سرویس (node یا bun)
  • --force: نصب مجدد/بازنویسی در صورت نصب قبلی

مدیریت سرویس:

bash
openclaw node statusopenclaw node startopenclaw node stopopenclaw node restartopenclaw node uninstall

برای یک میزبان Node در پیش‌زمینه (بدون سرویس)، از openclaw node run استفاده کنید.

فرمان‌های سرویس برای خروجی قابل‌خواندن توسط ماشین، --json را می‌پذیرند.

میزبان Node تلاش مجدد پس از راه‌اندازی مجدد Gateway و بسته‌شدن‌های شبکه را درون فرایند انجام می‌دهد. اگر Gateway توقف نهایی احراز هویت به‌دلیل توکن/گذرواژه/bootstrap را گزارش کند، میزبان Node جزئیات بسته‌شدن را ثبت می‌کند و با کد غیرصفر خارج می‌شود تا launchd/systemd/Task Scheduler بتواند آن را با پیکربندی و اطلاعات احراز هویت تازه راه‌اندازی مجدد کند. توقف‌های نیازمند جفت‌سازی در جریان پیش‌زمینه باقی می‌مانند تا درخواست معلق قابل تأیید باشد.

جفت‌سازی

نخستین اتصال، یک درخواست معلق جفت‌سازی دستگاه (role: node) روی Gateway ایجاد می‌کند.

هنگامی که میزبان Gateway بتواند بدون تعامل کاربر از طریق SSH به میزبان Node متصل شود (همان کاربر، کلید میزبان مورد اعتماد)، درخواست معلق به‌طور خودکار تأیید می‌شود: Gateway فرمان openclaw node identity --json را از طریق SSH روی میزبان Node اجرا می‌کند و در صورت تطابق دقیق کلید دستگاه، آن را تأیید می‌کند. این قابلیت به‌طور پیش‌فرض فعال است؛ برای مشاهدهٔ الزامات و روش غیرفعال‌کردن آن (gateway.nodes.pairing.sshVerify: false) به تأیید خودکار دستگاه با راستی‌آزمایی SSH مراجعه کنید.

در غیر این صورت، به‌صورت دستی تأیید کنید:

bash
openclaw devices listopenclaw devices approve <requestId>

هویت محلی Node را که Gateway با آن راستی‌آزمایی می‌کند، بررسی کنید:

bash
openclaw node identity --json

این فرمان شناسهٔ دستگاه و کلید عمومی را از identity/device.json چاپ می‌کند و هرگز فایل‌های هویت را ایجاد یا تغییر نمی‌دهد.

در شبکه‌های Node با کنترل سخت‌گیرانه، گردانندهٔ Gateway می‌تواند صراحتاً تأیید خودکار نخستین جفت‌سازی Node از CIDRهای مورد اعتماد را فعال کند:

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

این قابلیت به‌طور پیش‌فرض غیرفعال است (autoApproveCidrs تنظیم نشده است). فقط برای جفت‌سازی تازهٔ role: node بدون دامنه‌های درخواستی و از یک IP کلاینت مورد اعتماد Gateway اعمال می‌شود. کلاینت‌های گرداننده/مرورگر، رابط کنترل، WebChat و ارتقاهای نقش، دامنه، فراداده یا کلید عمومی همچنان به تأیید دستی نیاز دارند.

اگر Node با جزئیات احراز هویت تغییرکرده (نقش/دامنه‌ها/کلید عمومی) دوباره برای جفت‌سازی تلاش کند، درخواست معلق قبلی جایگزین می‌شود و requestId جدیدی ایجاد می‌شود. پیش از تأیید، دوباره openclaw devices list را اجرا کنید.

وضعیت هویت و جفت‌سازی

Node بدون رابط گرافیکی، شناسهٔ قدیمی نمونهٔ کلاینت خود را از هویت امضاشدهٔ دستگاه که Gateway برای جفت‌سازی و مسیریابی استفاده می‌کند جدا نگه می‌دارد. این فایل‌ها در پوشهٔ وضعیت OpenClaw قرار دارند (به‌طور پیش‌فرض ~/.openclaw، یا در صورت تنظیم $OPENCLAW_STATE_DIR):

فایل هدف
node.json شناسهٔ نمونهٔ کلاینت زیر کلید قدیمی nodeId، نام نمایشی و فرادادهٔ اتصال Gateway. کلاینت این مقدار را به‌صورت instanceId ارسال می‌کند.
identity/device.json جفت‌کلید امضاشدهٔ Ed25519 و شناسهٔ دستگاه مشتق‌شده. برای اتصال‌های امضاشده، این شناسهٔ دستگاه همان شناسهٔ Node مسیریابی‌شده و هویت جفت‌سازی است.
identity/device-auth.json توکن‌های دستگاه جفت‌شده، کلیدگذاری‌شده بر اساس شناسهٔ رمزنگاری‌شدهٔ دستگاه و نقش.

--node-id فقط شناسهٔ نمونهٔ کلاینت را در node.json تغییر می‌دهد. شناسهٔ رمزنگاری‌شدهٔ دستگاه را تغییر نمی‌دهد و احراز هویت جفت‌سازی را پاک نمی‌کند. به همین ترتیب، حذف فقط node.json نیز جفت‌سازی را بازنشانی نمی‌کند. برای لغو و جفت‌سازی مجدد یک Node:

  1. روی Gateway، فرمان openclaw nodes remove --node <id|name|ip> را اجرا کنید.
  2. روی Node، سرویس نصب‌شده را با openclaw node restart راه‌اندازی مجدد کنید، یا فرمان پیش‌زمینهٔ openclaw node run را متوقف و دوباره اجرا کنید. این کار جریان جفت‌سازی دستگاه را آغاز می‌کند. اگر openclaw devices list درخواستی نشان نمی‌دهد و Node خطای AUTH_DEVICE_TOKEN_MISMATCH را گزارش می‌کند، آن را یک بار دیگر راه‌اندازی یا اجرا کنید. تلاش ردشده، توکن محلیِ اکنون لغوشده را پاک می‌کند؛ تلاش بعدی می‌تواند درخواست جفت‌سازی بدهد.
  3. روی Gateway، فرمان openclaw devices list و سپس openclaw devices approve <deviceRequestId> را اجرا کنید.
  4. Node را دوباره راه‌اندازی یا اجرا کنید. کلاینتی که برای جفت‌سازی متوقف شده است پس از تأیید به‌طور خودکار ادامه نمی‌یابد؛ این اتصال مجدد، درخواست جداگانهٔ سطح فرمان را ایجاد می‌کند.
  5. روی Gateway، فرمان openclaw nodes pending و سپس openclaw nodes approve <nodeRequestId> را اجرا کنید.

این دو شناسهٔ درخواست از یکدیگر متمایزند. یک سیاست قابل اعمال CIDR مورد اعتماد می‌تواند مرحلهٔ جفت‌سازی اولیهٔ دستگاه را خودکار تأیید کند؛ تأیید سطح فرمان همچنان یک بررسی جداگانه باقی می‌ماند.

نسخه‌های قدیمی‌تر OpenClaw ممکن بود یک فیلد قدیمی token را در node.json باقی بگذارند. OpenClaw فعلی از آن فیلد استفاده نمی‌کند و دفعهٔ بعد که میزبان Node فایل را ذخیره کند، آن را حذف می‌کند. هر دو فایل زیر identity/ را خصوصی نگه دارید؛ آن‌ها حاوی جفت‌کلید دستگاه و توکن‌های احراز هویت هستند.

تأییدهای اجرا

system.run به تأییدهای اجرای محلی محدود است:

  • $OPENCLAW_STATE_DIR/exec-approvals.json، یا ~/.openclaw/exec-approvals.json در صورت تنظیم‌نبودن متغیر
  • تأییدهای اجرا
  • openclaw approvals --node <id|name|ip> (ویرایش از Gateway)

برای اجرای ناهمگام تأییدشدهٔ Node،‏ OpenClaw پیش از درخواست تأیید یک systemRunPlan استاندارد آماده می‌کند. ارسال بعدی system.run تأییدشده، همان برنامهٔ ذخیره‌شده را دوباره استفاده می‌کند؛ بنابراین تغییر فیلدهای فرمان/cwd/نشست پس از ایجاد درخواست تأیید رد می‌شود، نه اینکه آنچه Node اجرا می‌کند تغییر یابد.

مرتبط

Was this useful?
On this page

On this page