Gateway
Node-Kopplung
Die Node-Kopplung umfasst zwei Ebenen, die beide im Datensatz des gekoppelten Geräts in der SQLite-Statusdatenbank des Gateways gespeichert werden:
- Gerätekopplung (Rolle
node) kontrolliert denconnect-Handshake. Siehe Automatische Gerätegenehmigung für vertrauenswürdige CIDRs weiter unten und Kanalkopplung. - Genehmigung von Node-Fähigkeiten (
node.pair.*) kontrolliert, welche deklarierten Fähigkeiten/Befehle ein verbundener Node bereitstellen darf. Der Gateway ist die maßgebliche Quelle; Benutzeroberflächen (macOS-App, Control UI) dienen als Frontends, die ausstehende Anfragen genehmigen oder ablehnen.
Der frühere eigenständige Speicher für die Node-Kopplung (nodes/paired.json mit einem
Token pro Node, im Januar 2026 aus dem Verbindungspfad entfernt) ist nicht mehr vorhanden:
Gateways führen beim Start einmalig alle verbleibenden Einträge mit den Gerätedatensätzen
zusammen und archivieren die veralteten Dateien mit dem Suffix .migrated. Die Unterstützung
der veralteten TCP-Bridge wurde entfernt.
Funktionsweise der Genehmigung von Fähigkeiten
- Ein Node stellt eine Verbindung zum Gateway-WS her (die Gerätekopplung kontrolliert diesen Schritt).
- Der Gateway vergleicht den Umfang der deklarierten Fähigkeiten/Befehle mit dem
genehmigten Umfang; neue oder erweiterte Umfänge speichern eine ausstehende Anfrage
im Gerätedatensatz und lösen
node.pair.requestedaus. - Sie genehmigen die Anfrage oder lehnen sie ab (über CLI oder Benutzeroberfläche).
- Bis zur Genehmigung bleiben Node-Befehle gefiltert; durch die Genehmigung wird der deklarierte Umfang gemäß der normalen Befehlsrichtlinie verfügbar.
Ausstehende Anfragen laufen automatisch 5 Minuten nach dem letzten Wiederholungsversuch des Nodes ab – bei einem Node, der aktiv versucht, die Verbindung wiederherzustellen, bleibt die eine ausstehende Anfrage bestehen, statt bei jedem Versuch eine neue Anfrage (und Genehmigungsaufforderung) zu erzeugen.
CLI-Arbeitsablauf (für Systeme ohne grafische Oberfläche geeignet)
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 zeigt gekoppelte/verbundene Nodes und deren Fähigkeiten an.
API-Oberfläche (Gateway-Protokoll)
Ereignisse:
node.pair.requested– wird ausgelöst, wenn eine neue ausstehende Anfrage erstellt wird.node.pair.resolved– wird ausgelöst, wenn eine Anfrage genehmigt, abgelehnt oder abgelaufen ist.
Methoden:
node.pair.list– listet ausstehende und gekoppelte Nodes auf (operator.pairing).node.pair.approve– genehmigt eine ausstehende Anfrage.node.pair.reject– lehnt eine ausstehende Anfrage ab.node.pair.remove– entfernt einen gekoppelten Node. Dadurch wird die Rollenodedes Geräts im Speicher für gekoppelte Geräte widerrufen, der genehmigte Node-Umfang wird ebenfalls entfernt und die Sitzungen dieses Geräts mit der Node-Rolle werden ungültig gemacht und getrennt. Bei einem Gerät mit mehreren Rollen (beispielsweise einem Gerät, das auchoperatorbesitzt) bleibt der Datensatz erhalten und nur die Rollenodegeht verloren; der Datensatz eines Geräts, das ausschließlich ein Node ist, wird gelöscht. Autorisierung: Mitoperator.pairingkönnen Node-Datensätze ohne Operator-Rolle entfernt werden; ein Aufrufer mit Gerätetoken, der seine eigene Node-Rolle auf einem Gerät mit mehreren Rollen widerruft, benötigt zusätzlichoperator.admin.node.rename– benennt den für Operatoren sichtbaren Anzeigenamen eines gekoppelten Nodes um.
In Version 2026.7 entfernt: node.pair.request und node.pair.verify. Ausstehende
Anfragen werden vom Gateway selbst während der Node-Verbindung erstellt, und das
eigenständige Token pro Node, dem diese Methoden dienten, existiert nicht mehr; für die
Node-Authentifizierung wird das Gerätekopplungstoken verwendet.
Hinweise:
- Bei Wiederverbindungen mit unverändertem Umfang wird die ausstehende Anfrage wiederverwendet; wiederholte Anfragen aktualisieren die gespeicherten Node-Metadaten und die neueste Positivlisten-Momentaufnahme der deklarierten Befehle zur Einsicht durch Operatoren.
- Die Ebenen der Operator-Berechtigungsumfänge und die Prüfungen zum Genehmigungszeitpunkt sind unter Operator-Berechtigungsumfänge zusammengefasst.
node.pair.approveverwendet die deklarierten Befehle der ausstehenden Anfrage, um zusätzliche Genehmigungsberechtigungen durchzusetzen:- Anfrage ohne Befehle:
operator.pairing - Anfrage mit Befehlen ohne Ausführung:
operator.pairing+operator.write - Anfrage für
system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- Anfrage ohne Befehle:
Steuerung von Node-Befehlen (ab 2026.3.31)
Wenn ein Node zum ersten Mal eine Verbindung herstellt, wird die Kopplung automatisch angefordert. Bis diese Anfrage genehmigt wurde, werden alle ausstehenden Node-Befehle dieses Nodes gefiltert und nicht ausgeführt. Nach Genehmigung der Kopplung werden die deklarierten Befehle des Nodes gemäß der normalen Befehlsrichtlinie verfügbar.
Das bedeutet:
- Nodes, bei denen zuvor allein die Gerätekopplung zur Bereitstellung von Befehlen ausreichte, müssen jetzt zusätzlich die Node-Kopplung abschließen.
- Vor der Kopplungsgenehmigung in die Warteschlange gestellte Befehle werden verworfen und nicht zurückgestellt.
Vertrauensgrenzen für Node-Ereignisse (ab 2026.3.31)
Von Nodes stammende Zusammenfassungen und zugehörige Sitzungsereignisse sind auf den vorgesehenen vertrauenswürdigen Umfang beschränkt. Benachrichtigungsgesteuerte oder von Nodes ausgelöste Abläufe, die zuvor auf einen umfassenderen Zugriff auf Host- oder Sitzungswerkzeuge angewiesen waren, müssen möglicherweise angepasst werden. Diese Absicherung verhindert, dass Node-Ereignisse über die Vertrauensgrenze des Nodes hinaus Zugriff auf Werkzeuge auf Hostebene erlangen.
Dauerhafte Aktualisierungen der Node-Anwesenheit folgen derselben Identitätsgrenze: Das
Ereignis node.presence.alive wird nur von authentifizierten Gerätesitzungen mit Node-Rolle
akzeptiert und aktualisiert Kopplungsmetadaten nur, wenn die Geräte-/Node-Identität bereits
gekoppelt ist. Ein selbst deklarierter Wert für client.id reicht nicht aus, um den Status
der letzten Aktivität zu schreiben.
SSH-verifizierte automatische Gerätegenehmigung (Standard)
Die erstmalige Gerätekopplung mit role: node von einer privaten/CGNAT-Adresse wird
automatisch genehmigt, wenn der Gateway den Besitz des Rechners über SSH nachweisen
kann: Er verbindet sich zurück zum Host der Kopplungsanfrage (BatchMode,
StrictHostKeyChecking=yes), führt dort openclaw node identity --json aus und genehmigt
die Anfrage nur, wenn die ID und der öffentliche Schlüssel des entfernten Geräts exakt mit
der ausstehenden Anfrage übereinstimmen. Der Schlüsselabgleich gewährleistet die Sicherheit:
Alleinige Erreichbarkeit führt niemals zur Genehmigung, sodass Mitnutzer derselben
NAT-Umgebung, andere Benutzer auf einem gemeinsam genutzten Host und LAN-Spoofing
weiterhin die normale Aufforderung auslösen.
Standardmäßig aktiviert. Voraussetzungen für die Ausführung:
- Der Benutzer des Gateway-Prozesses (oder
sshVerify.user) kann sich nicht interaktiv per SSH mit dem Node-Host verbinden (Schlüssel/Agent; Tailscale SSH funktioniert ebenfalls), und der Hostschlüssel ist bereits vertrauenswürdig. openclawkann auf dem entferntenPATHfür ein nicht interaktivessh -lcaufgelöst werden.- Die IP-Adresse der Verbindung ist eine direkte (nicht über einen Proxy geleitete und keine
Loopback-Adresse) private, ULA-, Link-Local- oder CGNAT-Adresse oder entspricht, sofern
festgelegt,
sshVerify.cidrs. - Es gelten dieselben Mindestvoraussetzungen wie für die Genehmigung über vertrauenswürdige CIDRs: ausschließlich neue Node-Kopplungen ohne Berechtigungsumfänge; Upgrades, Browser, Control UI und WebChat zeigen immer eine Aufforderung an.
Während eine Prüfung ausgeführt wird, wird der Node-Client angewiesen, die Versuche
fortzusetzen (wait_then_retry), anstatt für eine manuelle Genehmigung zu pausieren.
Schlägt die Prüfung fehl, fällt der nächste Versuch auf den normalen Ablauf mit Aufforderung
zurück. Für fehlgeschlagene Ziele gilt eine kurze Sperrfrist (5 Minuten nach einer
Schlüsselabweichung).
Bei genehmigten Geräten werden approvedVia: "ssh-verified" und der erste deklarierte
Fähigkeitsumfang im selben Schritt genehmigt – der Schlüsselabgleich weist bereits nach,
dass der Node unter dem Konto des Operators auf einem Rechner ausgeführt wird, der ihm
gehört. Dies entspricht derselben Aussage wie eine manuelle Genehmigung der Fähigkeiten.
Bei späteren Erweiterungen des Umfangs wird weiterhin eine Aufforderung angezeigt.
Absichern oder deaktivieren:
{ gateway: { nodes: { pairing: { // Vollständig deaktivieren: sshVerify: false, // ...oder Umfang und Parameter der Prüfung konfigurieren: // sshVerify: { user: "me", identity: "~/.ssh/probe", timeoutMs: 7000, cidrs: ["10.0.0.0/8"] }, }, }, },}Automatische Genehmigung (macOS-App)
Die macOS-App kann eine stille Genehmigung von Anfragen zu Node-Fähigkeiten versuchen, wenn:
- die Anfrage als
silentmarkiert ist (der Gateway markiert den ersten Fähigkeitsumfang als still, wenn die Gerätekopplung nicht interaktiv genehmigt wurde), und - die App eine SSH-Verbindung zum Gateway-Host mit demselben Benutzer verifizieren kann.
Wenn die stille Genehmigung fehlschlägt, wird stattdessen die normale Aufforderung mit Approve/Reject angezeigt.
Automatische Gerätegenehmigung für vertrauenswürdige CIDRs
Die WS-Gerätekopplung für role: node bleibt standardmäßig manuell. Für private
Node-Netzwerke, in denen der Gateway dem Netzwerkpfad bereits vertraut, können Operatoren
die Funktion mit expliziten CIDRs oder exakten IP-Adressen aktivieren:
{ gateway: { nodes: { pairing: { autoApproveCidrs: ["192.168.1.0/24"], }, }, },}Sicherheitsgrenze:
- Deaktiviert, wenn
gateway.nodes.pairing.autoApproveCidrsnicht festgelegt ist. - Es gibt keinen pauschalen Modus zur automatischen Genehmigung für LANs oder private Netzwerke; die SSH-verifizierte automatische Genehmigung (siehe oben) erfordert einen kryptografischen Abgleich des Geräteschlüssels und niemals nur die räumliche Nähe im Netzwerk.
- Nur eine neue Gerätekopplungsanfrage mit
role: nodeohne angeforderte Berechtigungsumfänge ist zulässig. - Operator-, Browser-, Control-UI- und WebChat-Clients bleiben manuell.
- Upgrades von Rollen, Berechtigungsumfängen, Metadaten und öffentlichen Schlüsseln bleiben manuell.
- Pfade über vertrauenswürdige Proxy-Header mit Loopback auf demselben Host sind nicht zulässig, da dieser Pfad von lokalen Aufrufern manipuliert werden kann.
Bereinigung bei Ablösung stiller Kopplungen
Nicht interaktive Genehmigungen zeichnen ihre Herkunft im Datensatz des gekoppelten Geräts
auf: Genehmigungen durch lokale Richtlinien auf demselben Host als silent,
Node-Genehmigungen über vertrauenswürdige CIDRs als trusted-cidr und SSH-verifizierte
Node-Genehmigungen als ssh-verified. Clients, deren Statusverzeichnis flüchtig ist
(temporäre Home-Verzeichnisse, Container, Sandboxes pro Ausführung), erzeugen bei jeder
Ausführung ein neues Geräteschlüsselpaar und werden bei jeder Ausführung still als
brandneues Gerät erneut gekoppelt – ohne Bereinigung wächst die Liste der gekoppelten
Geräte bei jeder Ausführung um einen veralteten Datensatz.
Wenn der Gateway eine lokale Gerätekopplung still genehmigt, setzt er ältere, mit
silent genehmigte Datensätze außer Betrieb, die demselben Client-Cluster angehören
(übereinstimmende Werte für clientId, clientMode und Anzeigename) und derzeit nicht
verbunden sind. Lokale Clients werden auf dem Gateway-Host selbst ausgeführt, daher kann
der Cluster-Schlüssel nicht mit einem anderen Rechner übereinstimmen. Die Token der außer
Betrieb gesetzten Datensätze verlieren sofort ihre Gültigkeit; alle übereinstimmenden
veralteten Node-Kopplungseinträge werden gelöscht und ein Entfernungsereignis
node.pair.resolved wird übertragen.
Grenzen:
- Nur Datensätze, deren letzte Genehmigung lokal auf demselben Host (
silent) erfolgte, sind sowohl als Auslöser als auch als Ziel zulässig. Kopplungen über vertrauenswürdige CIDRs und SSH-verifizierte Kopplungen überschreiten Hostgrenzen, an denen Anzeigemetadaten keine Rechneridentität darstellen. Daher werden sie niemals automatisch entfernt – verwenden Sie dafür die Bereinigungsfunktion der Control UI oderopenclaw nodes remove. - Vom Eigentümer genehmigte Kopplungen und Kopplungen über QR-/Einrichtungscodes (Bootstrap) werden niemals automatisch entfernt. Datensätze, die genehmigt wurden, bevor die Herkunft aufgezeichnet wurde, bleiben geschützt, auch nach einer späteren stillen erneuten Genehmigung derselben Geräte-ID.
- Derzeit verbundene Geräte werden übersprungen, sodass gleichzeitige lokale Sitzungen mit getrennten Statusverzeichnissen ihre Token behalten, solange sie aktiv sind. Datensätze, die innerhalb der letzten Minute genehmigt wurden, werden ebenfalls übersprungen, damit gleichzeitige Kopplungs-Handshakes einander nicht außer Betrieb setzen können, bevor ihre Verbindungen registriert wurden.
- Betroffene Clients sind konstruktionsbedingt lokal und werden daher bei ihrer nächsten Verbindung erneut still gekoppelt.
Automatische Genehmigung von Metadaten-Upgrades
Wenn ein bereits gekoppeltes Gerät die Verbindung ausschließlich mit Änderungen an nicht
sensiblen Metadaten wiederherstellt (beispielsweise Anzeigename oder Hinweise zur
Clientplattform), behandelt OpenClaw dies als metadata-upgrade. Die stille automatische
Genehmigung ist eng begrenzt: Sie gilt nur für vertrauenswürdige lokale Wiederverbindungen
außerhalb eines Browsers, die bereits den Besitz lokaler oder gemeinsam genutzter
Anmeldedaten nachgewiesen haben. Dazu gehören Wiederverbindungen nativer Apps auf demselben
Host nach Änderungen an den Metadaten der Betriebssystemversion. Browser-/Control-UI-Clients
und entfernte Clients verwenden weiterhin den expliziten Ablauf zur erneuten Genehmigung.
Upgrades von Berechtigungsumfängen (Lesen auf Schreiben/Administration) und Änderungen
öffentlicher Schlüssel sind nicht für die automatische Genehmigung von
Metadaten-Upgrades zulässig; sie bleiben explizite Anfragen zur erneuten Genehmigung.
Hilfsfunktionen für die QR-Kopplung
/pair qr stellt die Kopplungsnutzdaten als strukturierte Medien dar, sodass mobile Clients und Browser-Clients sie direkt scannen können.
Beim Löschen eines Geräts werden außerdem alle veralteten ausstehenden Kopplungsanfragen für diese Geräte-ID entfernt, sodass nodes pending nach einem Widerruf keine verwaisten Zeilen anzeigt.
Lokalität und weitergeleitete Header
Bei der Gateway-Kopplung gilt eine Verbindung nur dann als local loopback, wenn sowohl der unverarbeitete Socket als auch alle Hinweise eines vorgeschalteten Proxys übereinstimmen. Wenn eine Anfrage über local loopback eingeht, aber Hinweise aus den Headern Forwarded, X-Forwarded-* oder X-Real-IP enthält, schließen diese weitergeleiteten Header die Einstufung als local loopback aus, und der Kopplungsvorgang erfordert eine ausdrückliche Genehmigung, anstatt die Anfrage stillschweigend als Verbindung vom selben Host zu behandeln. Die entsprechende Regel für die Operator-Authentifizierung finden Sie unter Authentifizierung über vertrauenswürdige Proxys.
Speicherung (lokal, privat)
Der Kopplungsstatus wird in den Datensätzen der gekoppelten Geräte in der gemeinsam genutzten SQLite-Statusdatenbank im Gateway-Statusverzeichnis gespeichert (standardmäßig ~/.openclaw):
~/.openclaw/state/openclaw.sqlite(gekoppelte Geräte mit Geräteauthentifizierung, genehmigte Node-Oberflächen, ausstehende Oberflächenanfragen, ausstehende Gerätekopplungsanfragen und Bootstrap-Token)
Wenn Sie OPENCLAW_STATE_DIR überschreiben, wird die Datenbank entsprechend verschoben. Gateways, die von Versionen mit JSON-Speichern aktualisiert wurden, importieren diese beim Start und behalten die Archive devices/*.json.migrated und nodes/*.json.migrated bei.
Sicherheitshinweise:
- Geräte-Token sind Geheimnisse; behandeln Sie die Statusdatenbank als vertraulich.
- Zum Rotieren eines Geräte-Tokens werden
openclaw devices rotatebzw.device.token.rotateverwendet.
Transportverhalten
- Der Transport ist zustandslos; er speichert keine Mitgliedschaften.
- Wenn das Gateway offline oder die Kopplung deaktiviert ist, können Nodes nicht gekoppelt werden.
- Im Remote-Modus erfolgt die Kopplung mit dem Speicher des entfernten Gateways.