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 غیرفعال کنید:
{ nodeHost: { browserProxy: { enabled: false, }, },}اجرا (پیشزمینه)
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).
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: نصب مجدد/بازنویسی در صورت نصب قبلی
مدیریت سرویس:
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
مراجعه کنید.
در غیر این صورت، بهصورت دستی تأیید کنید:
openclaw devices listopenclaw devices approve <requestId>هویت محلی Node را که Gateway با آن راستیآزمایی میکند، بررسی کنید:
openclaw node identity --jsonاین فرمان شناسهٔ دستگاه و کلید عمومی را از identity/device.json چاپ میکند و
هرگز فایلهای هویت را ایجاد یا تغییر نمیدهد.
در شبکههای Node با کنترل سختگیرانه، گردانندهٔ Gateway میتواند صراحتاً تأیید خودکار نخستین جفتسازی Node از CIDRهای مورد اعتماد را فعال کند:
{ 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:
- روی Gateway، فرمان
openclaw nodes remove --node <id|name|ip>را اجرا کنید. - روی Node، سرویس نصبشده را با
openclaw node restartراهاندازی مجدد کنید، یا فرمان پیشزمینهٔopenclaw node runرا متوقف و دوباره اجرا کنید. این کار جریان جفتسازی دستگاه را آغاز میکند. اگرopenclaw devices listدرخواستی نشان نمیدهد و Node خطایAUTH_DEVICE_TOKEN_MISMATCHرا گزارش میکند، آن را یک بار دیگر راهاندازی یا اجرا کنید. تلاش ردشده، توکن محلیِ اکنون لغوشده را پاک میکند؛ تلاش بعدی میتواند درخواست جفتسازی بدهد. - روی Gateway، فرمان
openclaw devices listو سپسopenclaw devices approve <deviceRequestId>را اجرا کنید. - Node را دوباره راهاندازی یا اجرا کنید. کلاینتی که برای جفتسازی متوقف شده است پس از تأیید بهطور خودکار ادامه نمییابد؛ این اتصال مجدد، درخواست جداگانهٔ سطح فرمان را ایجاد میکند.
- روی 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 اجرا
میکند تغییر یابد.