Gateway
Vom Gateway verwaltete Kopplung
Bei der Gateway-eigenen Kopplung ist der Gateway die maßgebliche Quelle dafür, welche Nodes beitreten dürfen. UIs (macOS-App, zukünftige Clients) sind nur Frontends, die ausstehende Anfragen genehmigen oder ablehnen.
Wichtig: WS-Nodes verwenden beim connect die Gerätekopplung (Rolle node).
node.pair.* ist ein separater Kopplungsspeicher und steuert nicht den WS-Handshake.
Nur Clients, die explizit node.pair.* aufrufen, verwenden diesen Ablauf.
Konzepte
- Ausstehende Anfrage: Ein Node hat angefragt beizutreten; eine Genehmigung ist erforderlich.
- Gekoppelter Node: genehmigter Node mit ausgegebenem Authentifizierungstoken.
- Transport: Der Gateway-WS-Endpunkt leitet Anfragen weiter, entscheidet aber nicht über Mitgliedschaft. (Die Unterstützung für die ältere TCP-Bridge wurde entfernt.)
So funktioniert die Kopplung
- Ein Node verbindet sich mit dem Gateway-WS und fordert die Kopplung an.
- Der Gateway speichert eine ausstehende Anfrage und gibt
node.pair.requestedaus. - Sie genehmigen oder lehnen die Anfrage ab (CLI oder UI).
- Bei Genehmigung gibt der Gateway ein neues Token aus (Tokens werden bei erneuter Kopplung rotiert).
- Der Node verbindet sich erneut mit dem Token und ist nun „gekoppelt“.
Ausstehende Anfragen laufen nach 5 Minuten automatisch ab.
CLI-Workflow (für Headless-Umgebungen geeignet)
openclaw nodes pending
openclaw nodes approve <requestId>
openclaw nodes reject <requestId>
openclaw nodes status
openclaw nodes remove --node <id|name|ip>
openclaw nodes rename --node <id|name|ip> --name "Living Room iPad"
nodes status zeigt gekoppelte/verbundene Nodes und ihre Fähigkeiten an.
API-Oberfläche (Gateway-Protokoll)
Ereignisse:
node.pair.requested- wird ausgegeben, wenn eine neue ausstehende Anfrage erstellt wird.node.pair.resolved- wird ausgegeben, wenn eine Anfrage genehmigt/abgelehnt/abgelaufen ist.
Methoden:
node.pair.request- eine ausstehende Anfrage erstellen oder wiederverwenden.node.pair.list- ausstehende + gekoppelte Nodes auflisten (operator.pairing).node.pair.approve- eine ausstehende Anfrage genehmigen (gibt Token aus).node.pair.reject- eine ausstehende Anfrage ablehnen.node.pair.remove- einen veralteten Eintrag eines gekoppelten Nodes entfernen.node.pair.verify-{ nodeId, token }verifizieren.
Hinweise:
node.pair.requestist pro Node idempotent: Wiederholte Aufrufe geben dieselbe ausstehende Anfrage zurück.- Wiederholte Anfragen für denselben ausstehenden Node aktualisieren außerdem die gespeicherten Node-Metadaten und den neuesten allowlisteten Snapshot der deklarierten Befehle für die Operator-Sichtbarkeit.
- Eine Genehmigung erzeugt immer ein frisches Token; von
node.pair.requestwird nie ein Token zurückgegeben. - Operator-Scope-Ebenen und Prüfungen zum Genehmigungszeitpunkt sind unter Operator-Scopes zusammengefasst.
- Anfragen können
silent: trueals Hinweis für automatische Genehmigungsabläufe enthalten. node.pair.approveverwendet die deklarierten Befehle der ausstehenden Anfrage, um zusätzliche Genehmigungs-Scopes zu erzwingen:- Anfrage ohne Befehle:
operator.pairing - Anfrage mit Nicht-Exec-Befehl:
operator.pairing+operator.write - Anfrage mit
system.run/system.run.prepare/system.which:operator.pairing+operator.admin
- Anfrage ohne Befehle:
Gating von Node-Befehlen (2026.3.31+)
Wenn sich ein Node zum ersten Mal verbindet, wird die Kopplung automatisch angefragt. Bis die Kopplungsanfrage genehmigt ist, werden alle ausstehenden Node-Befehle von diesem Node herausgefiltert und nicht ausgeführt. Sobald durch die Kopplungsgenehmigung Vertrauen hergestellt ist, werden die vom Node deklarierten Befehle vorbehaltlich der normalen Befehlsrichtlinie verfügbar.
Das bedeutet:
- Nodes, die sich zuvor allein auf Gerätekopplung verlassen haben, um Befehle offenzulegen, müssen nun die Node-Kopplung abschließen.
- Befehle, die vor der Kopplungsgenehmigung in die Warteschlange gestellt wurden, werden verworfen, nicht zurückgestellt.
Vertrauensgrenzen für Node-Ereignisse (2026.3.31+)
Von Nodes ausgehende Zusammenfassungen und zugehörige Sitzungsereignisse sind auf die vorgesehene vertrauenswürdige Oberfläche beschränkt. Benachrichtigungsgesteuerte oder von Nodes ausgelöste Abläufe, die sich zuvor auf breiteren Zugriff auf Host- oder Sitzungstools verlassen haben, müssen möglicherweise angepasst werden. Diese Härtung stellt sicher, dass Node-Ereignisse keinen Zugriff auf Tools auf Host-Ebene über das hinaus eskalieren können, was die Vertrauensgrenze des Nodes zulässt.
Dauerhafte Node-Präsenzaktualisierungen folgen derselben Identitätsgrenze. Das Ereignis node.presence.alive wird
nur von authentifizierten Node-Gerätesitzungen akzeptiert und aktualisiert Kopplungsmetadaten nur dann, wenn die
Geräte-/Node-Identität bereits gekoppelt ist. Selbst deklarierte client.id-Werte reichen nicht aus, um den
Zuletzt-gesehen-Status zu schreiben.
Automatische Genehmigung (macOS-App)
Die macOS-App kann optional eine stille Genehmigung versuchen, wenn:
- die Anfrage als
silentmarkiert ist, und - die App eine SSH-Verbindung zum Gateway-Host mit demselben Benutzer verifizieren kann.
Wenn die stille Genehmigung fehlschlägt, fällt sie auf die normale „Genehmigen/Ablehnen“-Aufforderung zurück.
Automatische Genehmigung für Trusted-CIDR-Geräte
WS-Gerätekopplung für role: node bleibt standardmäßig manuell. Für private
Node-Netzwerke, bei denen der Gateway dem Netzwerkpfad bereits vertraut, können
Operatoren sich mit expliziten CIDRs oder exakten IPs anmelden:
{
gateway: {
nodes: {
pairing: {
autoApproveCidrs: ["192.168.1.0/24"],
},
},
},
}
Sicherheitsgrenze:
- Deaktiviert, wenn
gateway.nodes.pairing.autoApproveCidrsnicht gesetzt ist. - Es gibt keinen pauschalen automatischen Genehmigungsmodus für LAN oder private Netzwerke.
- Nur frische
role: node-Gerätekopplung ohne angeforderte Scopes ist berechtigt. - Operator-, Browser-, Control-UI- und WebChat-Clients bleiben manuell.
- Rollen-, Scope-, Metadaten- und Public-Key-Upgrades bleiben manuell.
- Trusted-Proxy-Headerpfade über same-host loopback sind nicht berechtigt, weil dieser Pfad von lokalen Aufrufern gefälscht werden kann.
Automatische Genehmigung von Metadaten-Upgrades
Wenn ein bereits gekoppeltes Gerät sich mit ausschließlich nicht sensiblen Metadatenänderungen
erneut verbindet (zum Beispiel Anzeigename oder Hinweise zur Client-Plattform), behandelt OpenClaw
dies als metadata-upgrade. Die stille automatische Genehmigung ist eng begrenzt: Sie gilt nur
für vertrauenswürdige Nicht-Browser-Local-Reconnects, die bereits den Besitz lokaler
oder geteilter Zugangsdaten nachgewiesen haben, einschließlich Reconnects nativer same-host Apps nach Änderungen
an OS-Versionsmetadaten. Browser-/Control-UI-Clients und Remote-Clients verwenden weiterhin
den expliziten Ablauf zur erneuten Genehmigung. Scope-Upgrades (read zu write/admin) und
Public-Key-Änderungen sind nicht für die automatische Genehmigung von Metadaten-Upgrades berechtigt -
sie bleiben explizite Anfragen zur erneuten Genehmigung.
QR-Kopplungshilfen
/pair qr rendert die Kopplungsnutzlast als strukturierte Medien, sodass mobile 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 bereinigt, sodass nodes pending nach einem Widerruf keine verwaisten Zeilen anzeigt.
Lokalität und weitergeleitete Header
Gateway-Kopplung behandelt eine Verbindung nur dann als loopback, wenn sowohl der rohe Socket
als auch etwaige Upstream-Proxy-Nachweise übereinstimmen. Wenn eine Anfrage über loopback eingeht, aber
Header X-Forwarded-For / X-Forwarded-Host / X-Forwarded-Proto enthält,
die auf einen nicht lokalen Ursprung verweisen, disqualifiziert dieser Nachweis durch weitergeleitete Header
den loopback-Lokalitätsanspruch. Der Kopplungspfad erfordert dann eine explizite Genehmigung,
statt die Anfrage stillschweigend als same-host Connect zu behandeln. Siehe
Trusted Proxy Auth für die entsprechende Regel bei
Operator-Authentifizierung.
Speicher (lokal, privat)
Der Kopplungsstatus wird im Gateway-Statusverzeichnis gespeichert (Standard ~/.openclaw):
~/.openclaw/nodes/paired.json~/.openclaw/nodes/pending.json
Wenn Sie OPENCLAW_STATE_DIR überschreiben, wird der Ordner nodes/ entsprechend verschoben.
Sicherheitshinweise:
- Tokens sind Geheimnisse; behandeln Sie
paired.jsonals sensibel. - Das Rotieren eines Tokens erfordert eine erneute Genehmigung (oder das Löschen des Node-Eintrags).
Transportverhalten
- Der Transport ist zustandslos; er speichert keine Mitgliedschaft.
- Wenn der Gateway offline ist oder die Kopplung deaktiviert ist, können Nodes nicht gekoppelt werden.
- Wenn der Gateway im Remote-Modus ist, erfolgt die Kopplung weiterhin gegen den Speicher des Remote-Gateways.