Remote-Administration leicht gemacht: Einführung in JSON-RPC und opsi-cli

Remote-Administration leicht gemacht: Einführung in JSON-RPC und opsi-cli

Suchen Sie nach einem effizienteren Weg, um Ihren opsi-Server remote anzusprechen? Dieser Blogbeitrag stellt die Vorteile von JSON-RPC vor, einem zustandslosen und schlanken Protokoll, das die Übertragung von Daten zwischen einem Server und einem Client vereinfacht. Der Artikel erklärt den Umgang mit dem opsi-cli-Kommando jsonrpc: eine einfache Möglichkeit, JSON-RPC-Methoden auf einem opsi-Server auszuführen. Das alles funktioniert unter Windows, Linux und macOS – damit benötigen Sie keinen SSH-Client mehr zur Verwaltung Ihrer opsi-Umgebung.

Effiziente Fernwartung: opsi-cli und JSON-RPC

Eines der coolsten Features von opsi-cli ist die Möglichkeit, die Fernwartung eines opsi-Servers zu vereinfachen. Der Griff zu PuTTY oder einem anderen SSH-Client entfällt damit, und Sie müssen nicht länger opsi-admin-Befehle von Hand eingeben. Stattdessen führen Sie einfach mit opsi-cli Methoden auf dem opsi-Server über JSON-RPC aus.

Vielleicht kennen Sie die JSON-RPC-Methoden schon, die opsi-admin verwendet. opsi-cli haben wir so entwickelt, dass es Zugang zu denselben Methoden bietet. Darüber hinaus unterstützt opsi-cli fortschrittlichere Ausgabeformate und Filteroptionen als opsi-admin in einer SSH-Sitzung. So wird die Navigation deutlich angenehmer und die Befehlsausgabe ist besser zu verstehen.

opsi-cli gehört zu den opsi-utils und steht außerdem als Paket in unseren Repositorys zur Verfügung.

Jetzt herunterladen

opsi-cli für den Fernzugriff zum opsi-Server einrichten

Sie können mit opsi-cli auf lokale und entfernte opsi-Server zugreifen. Zunächst stellen Sie die erforderlichen Zugangsdaten bereit. Verwenden Sie den Befehl config, um die Konfiguration von opsi-cli anzuzeigen und zu ändern. Um eine Tabelle mit allen gespeicherten Zugangsdaten anzuzeigen (das Passwort ist unkenntlich gemacht), geben Sie den folgenden Befehl ein:

opsi-cli config service list

Um einen neuen Dienst einzurichten, führen Sie diesen Befehl aus:

opsi-cli config service add --name testsystem --username <adminuser> --password <strong_password> https://192.168.56.1:4447

testsystem ist ein beliebiger Name, um schnell auf den Server zu verweisen. Ersetzen Sie <adminuser>, <strong_password> und die in diesem Beispiel gezeigte URL durch die passenden Werte für Ihre Umgebung. Anschließend sollte der Befehl opsi-cli config service list die Zugangsdaten des Servers anzeigen.

Note

Da Sie Zugangsdaten für mehrere Server speichern können, sollten Sie den richtigen Standardserver für die Verbindung festlegen:

opsi-cli config set service testsystem

Sie können auch die URL des Servers anstelle des Namen (testsystem) angeben.

Der Befehl jsonrpc

Mit dem Kommando jsonrpc greifen Sie auf JSON-RPC-Methoden zu und führen diese auf dem opsi-Server aus. Es unterstützt zwei Unterkommandos:

  • opsi-cli jsonrpc methods: Gibt eine Liste aller verfügbaren API-Methoden und ihrer Parameter aus.
  • opsi-cli jsonrpc execute <method>: Führt die angegebene Methode aus.

Um eine Liste aller verfügbaren Methoden mit ihren obligatorischen und optionalen Parametern anzuzeigen, führen Sie den folgenden Befehl aus:

opsi-cli jsonrpc methods

Diese Liste zeigt auch an, ob eine Methode als “veraltet” gekennzeichnet ist und schlägt eine Alternative als empfohlene Ausweichlösung vor. Dieser Befehl kann also als Referenz verwendet werden. Schauen wir uns nun einige Beispiele für das Ausführen einer JSON-RPC-Methode an.

Um eine bestimmte Methode auszuführen, geben Sie ihren Namen nach dem Befehl “opsi-cli jsonrpc execute” an, zum Beispiel so:

doerrer@me:~$ opsi-cli jsonrpc execute getClientIDs
[
  "client-linux.domain.local",
  "client-macos.domain.local",
  "client-win10.domain.local"
]

Der Befehl erzeugt eine gut formatierte und einfach zu lesende Ausgabe.

Tip

Das Standardformat der Ausgabe ist JSON, aber wir haben Farben und Zeileneinrückungen hinzugefügt, um die Lesbarkeit zu verbessern.

opsi-cli ermöglicht JSON-RPC-Aufrufe von Ihrem Linux-, macOS- oder Windows-Rechner aus.

Beispiel: Meldungen auf opsi-Clients anzeigen

Sie können den Befehl opsi-cli jsonrpc execute zum Beispiel verwenden, um eine Nachricht auf dem Desktop eines opsi-Clients auszugeben. Um “Have a nice day” an den opsi-Client client-linux.domain.local zu senden, geben Sie Folgendes ein:

doerrer@me:~$ opsi-cli jsonrpc execute hostControlSafe_showPopup "have a nice day" client-linux.domain.local
{
  "client-linux.domain.local": {
    "result": null,
    "error": null
  }
}

Wenn die aufgerufene JSON-RPC-Methode keine Ausgabe erzeugt, ist das Ergebnis die JSON-RPC-Antwort, wobei diese eventuelle Fehler anzeigt. Wenn also result etwas enthält, wird nur das angezeigt (zum Beispiel die angeforderten Daten). Wenn nicht, wird der “Rohzustand” angezeigt.

Das vorige Beispiel zeigt "result": null an, was im Wesentlichen bedeutet, dass die Methode kein Ergebnis hat.

Beispiel: Informationen zum Host anzeigen

Das nächste Beispiel ist ein wenig komplexer. Dieser Befehl (Ausgabe weggelassen) zeigt Host-Informationen für alle OpsiConfigserver- und OpsiDepotserver-Objekte an:

opsi-cli jsonrpc execute host_getObjects [] '{"type":["OpsiConfigserver","OpsiDepotserver"]}

Um die Ausgabe besser lesbar zu machen und den Output auf ein paar wesentliche Attribute zu begrenzen, können Sie die beiden Parameter --attributes und --output-format verwenden:

doerrer@me:~$ opsi-cli --attributes=id,ipAddress,type --output-format=table jsonrpc execute host_getObjects [] '{"type":["OpsiConfigserver","OpsiDepotserver"]}'
╭──────────────────────────┬──────────────┬──────────────────╮
│ id                       │ ipAddress    │ type             │
├──────────────────────────┼──────────────┼──────────────────┤
│ opsi-server.domain.local │ 192.168.56.1 │ OpsiConfigserver │
│ opsi-depot.domain.local  │ 192.168.56.2 │ OpsiDepotserver  │
╰──────────────────────────┴──────────────┴──────────────────╯
  • --attributes dient zur Angabe der Felder, die in der Ausgabe enthalten sein sollen ( durch Kommata getrennte Liste)
  • --output-format ändert das Aussehen des angezeigten Ergebnisses (verfügbare Formate: auto, json, pretty-json, msgpack, table, und csv)

opsi-cli in Skripten verwenden

Um die Ausgabe einer JSON-RPC-Methode in der Konsole weiterzuverarbeiten, wählen Sie am besten json, msgpackodercsv` als Format. Schauen wir uns dazu ein Beispiel an:

opsi-cli --output-format=json jsonrpc execute host_getObjects [] '{"id": "client-win10.domain.local"}' | sed -e 's/"notes":"[^"]*"/"notes":"modified by opsi-cli"/' | opsi-cli jsonrpc execute host_updateObjects

Das Host-Objekt für den opsi-Client client-win10.domain.local wird aus der Datenbank ausgelesen. Die Ausgabe im JSON-Format wird über eine Pipe an den nächsten Prozess weitergeleitet. Der im Beispiel gezeigte sed-Befehl ändert "notes": "created by opsi-deploy-client-agent" in "notes": "modified by opsi-cli".

Diese geänderte JSON-Darstellung eines Host-Objekts wird dann an einen anderen opsi-cli-Befehl weitergegeben, der eine JSON-RPC-Methode ausführt, um das entsprechende Host-Objekt in der Datenbank zu aktualisieren. Wenn also das nächste Mal host_getObjects für client-win10.domain.local aufgerufen wird, enthält das Datenfeld notes die neue Zeichenfolge "modified by opsi-cli".

Tipps und Tricks

In diesem letzten Abschnitt haben wir ein paar Tipps und Tricks zusammengestellt:

  • Wenn Sie mehrere opsi-Server verwalten, können Sie deren Zugangsdaten speichern und mit dem Befehl opsi-cli config set service <opsi_server_name> zwischen ihnen wechseln. Alternativ können Sie auch den Parameter --service verwenden: opsi-cli --service=<opsi_server_name> jsonrpc execute <method>
  • Sie können die Taste [Tab] für die automatische Vervollständigung und Vorschläge für JSON-RPC-Methoden und ihre Argumente verwenden. Lesen Sie dazu auch unseren Blogbeitrag, um mehr über die Autovervollständigungs zu erfahren.
  • Wenn Sie große Datenmengen speichern oder automatisch verarbeiten wollen, empfehlen wir die Option --output-format=msgpack. Sie verbessert die Leistung und erzeugt das kompakteste aller verfügbaren Ausgabeformate.
  • JSON-RPC-Methoden sind in der Regel recht effizient, aber es entsteht ein Overhead bei der Netzwerk-Kommunikation und der Zusammenstellung der Daten. Versuchen Sie, das Senden einer großen Anzahl von JSON-RPC-Methoden (z. B. in einer Schleife) zu vermeiden. Es ist besser, eine große Anfrage zu senden (und dann die Daten lokal weiter zu verarbeiten) als viele kleine Anfragen zu senden.

Viel Spaß beim Ausprobieren! Sie haben Feedback zu diesem Artikel oder eine Frage? Dann besuchen Sie das opsi-Forum .

Zum opsi-Forum

Verwandte Beiträge

opsi-cli: Schneller Arbeiten mit der Autovervollständigung

opsi-cli: Schneller Arbeiten mit der Autovervollständigung

Wie in unserem letzten Blogbeitrag angekündigt, haben wir ein neues Kommandozeilentool für die Arbeit in opsi-Umgebungen veröffentlicht. Es ist in Python implementiert und bietet eine wirklich coole Autovervollständigung, die wir in diesem Blogpost vorstellen.

Mehr lesen
opsi bei T-DOSE 2023: Ein Rückblick

opsi bei T-DOSE 2023: Ein Rückblick

Am 22. und 23. April fand die T-DOSE 2023 an ihrem neuen Standort, der Weeffabriek in Geldrop bei Eindhoven, statt. T-DOSE (Technical Dutch Open Source Event) ist eine jährlich wiederkehrende Technologie-Konferenz; Terry Strooband und ich waren vor Ort.

Mehr lesen
Wir stellen vor: ein neuer Look für opsi

Wir stellen vor: ein neuer Look für opsi

Pünktlich zum runden Geburtstag bekommt opsi ein neues Design. 20 Jahre lang hat uns das alte Logo begleitet: auf der Website, auf Tassen, Stiften, Notizblöcken und als Sticker auf etlichen Laptops von Entwickler*innen und Anwender*innen. Jetzt ist es Zeit für einen modernen Look, frische Farben und ein neues Logo.

Mehr lesen