Verwenden von Junos PyEZ für den Zugriff auf die Shell auf Junos-Geräten

Verwenden Sie Junos PyEZ, um eine Verbindung zur Shell auf Junos-Geräten herzustellen und Befehle auszuführen.

StartShell – Übersicht

Die Junos CLI verfügt über viele Betriebsmodusbefehle, die Informationen zurückgeben, die den Informationen ähneln, die von vielen Shell-Befehlen zurückgegeben werden. Daher ist der Zugriff auf die UNIX-Level-Shell auf Junos-Geräten normalerweise nicht erforderlich. In einigen Fällen muss ein Benutzer oder eine Anwendung jedoch möglicherweise auf die Shell zugreifen und Shell-Befehle oder CLI-Befehle über die Shell ausführen.

Das Junos PyEZ-Modul jnpr.junos.utils.start_shell definiert die StartShell Klasse, die es Junos PyEZ-Anwendungen ermöglicht, eine SSH-Verbindung zu einem Junos-Gerät zu initiieren und auf die Shell zuzugreifen. Die StartShell Methoden ermöglichen es der Anwendung, dann Befehle über die Verbindung auszuführen und die Antwort abzurufen.

close() Die StartShell open() und-Methoden bauen eine SSH-Verbindung mit dem Gerät auf und beenden sie. Wenn die Clientanwendung nur Zugriff auf die Shell benötigt, kann sie daher die Aufrufe der Device open() und-Methoden close() auslassen.

In Junos PyEZ Version 2.6.7 und früher stellt die StartShell Instance eine Verbindung zum Standard-SSH-Port 22 her. Ab Junos PyEZ Version 2.6.8 verbindet sich die StartShell Instance mit demselben Port, der in der Device Instance definiert ist, außer in den folgenden Fällen, in denen die Shell-Verbindung immer noch Port 22 verwendet:

  • Devicehost auf "localhost" festgelegt ist.

  • Deviceport auf 830 eingestellt ist.

  • Deviceport ist nicht definiert.

Ausführen von Befehlen aus der Shell

Die StartShell run() Methode führt einen Shell-Befehl aus und wartet auf die Antwort. Standardmäßig wartet die Methode auf eine der standardmäßigen Shell-Eingabeaufforderungen (%, #, > oder $), bevor sie die Befehlsausgabe zurückgibt. Alternativ können Sie das this="string" Argument auf eine bestimmte Zeichenfolge festlegen, und die Methode wartet auf die erwartete Zeichenfolge oder das erwartete Muster, bevor sie die Befehlsausgabe zurückgibt.

Der Rückgabewert ist ein Tupel. Das erste Element ist True , ob der Exitcode 0 ist und False sonst. Das zweite Element ist die Ausgabe des Befehls.

Im folgenden Beispiel wird eine Verbindung zu einem Host hergestellt und zwei Betriebsmodusbefehle von der Shell ausgeführt. Das Skript führt zunächst den request support information Befehl aus und speichert die Ausgabe in einer Datei. Das Skript führt dann den show version Befehl aus, speichert die Ausgabe in der version Variablen und gibt dann den Inhalt der Variablen aus.

Das zurückgegebene Tupel enthält den booleschen Wert, der dem Exitcode für den Befehl entspricht, und die Befehlsausgabe für den show version Befehl. Die Ausgabe in diesem Beispiel ist aus Gründen der Kürze abgeschnitten.

Instanzen der StartShell Klasse können auch als Kontextmanager verwendet werden. In diesem Fall müssen Sie die StartShell open() close() and-Methoden nicht explizit aufrufen. Zum Beispiel:

So geben Sie den Shell-Typ an

Unterstützt ab Junos PyEZ Version 2.6.4 StartShell das shell_type Argument in Remote-Skripten zur Angabe des Shell-Typs. StartShell Unterstützt die folgenden Shell-Typen:

  • C-Shell (csh)

  • Bourne-Muschel (Esche)

Standardmäßig StartShell sind Instanzen vom Typ C Shell (csh). Sie können auch angeben shell_type="sh" , dass eine Schale im Bourne-Stil (Esche) gestartet werden soll. Zum Beispiel:

Festlegen einer Zeitüberschreitung

Sie können das StartShell timeout Argument einschließen, um die Zeitdauer in Sekunden anzugeben, die das Dienstprogramm auf die erwartete Zeichenfolge oder das erwartete Muster warten muss, bevor eine Zeitüberschreitung auftritt. Wenn Sie kein Timeout angeben, beträgt der Standardwert 30 Sekunden.

Die erwartete Zeichenfolge ist der im this Argument definierte Wert. Wenn Sie nicht definieren this, ist die erwartete Zeichenfolge eine der Standard-Shell-Eingabeaufforderungen. Wenn Sie stattdessen den speziellen Wert this=Nonefestlegen, wartet das Gerät für die Dauer des Timeouts, bevor es die Befehlsausgabe erfasst, wie unter Ausführen von nicht wiederkehrenden Shell-Befehlen beschrieben.

So staffeln Sie die Befehlsausführung

Manchmal möchten Sie möglicherweise mehrere Aufrufe der run() Methode ausführen oder in einer Schleife durchführen. Um die Ausgabe zu stabilisieren, können Sie das sleep Argument angeben. Das sleep Argument weist das Gerät an, die angegebene Anzahl von Sekunden zu warten, bevor es Daten aus dem Puffer empfängt. Sie können als Gleitkommazahl für Genauigkeit unter einer Sekunde definieren sleep .

Ausführen von nicht zurückgegebenen Shell-Befehlen

In bestimmten Fällen müssen Sie möglicherweise nicht zurückgegebene Shell-Befehle ausführen, z. B. den monitor traffic Befehl, der Datenverkehr anzeigt, der auf der lokalen Routing-Engine beginnt oder endet. In der Junos CLI zeigt der monitor traffic Befehl die Informationen in Echtzeit an, bis der Benutzer eine Strg+C-Tastatursequenz sendet, um die Paketerfassung zu stoppen.

Sie können Shell-Befehle ohne Rückgabe mit der StartShell run() Methode ausführen, indem Sie das Argument this=Noneeinschließen. Wenn Sie das this=None Argument einschließen, wartet die Methode, bis der angegebene Timeoutwert erreicht ist, um alle Befehlsausgaben von der Shell abzurufen und zurückzugeben. In diesem Fall ist True das erste Element des zurückgegebenen Tupels, wenn das Ergebnis des ausgeführten Shell-Befehls Inhalt zurückgibt, und das zweite Element ist die Befehlsausgabe. Wenn Sie das this Argument weglassen oder es auf eine bestimmte Zeichenfolge oder ein bestimmtes Muster festlegen, gibt die Methode möglicherweise eine teilweise Ausgabe für einen nicht zurückkehrenden Befehl zurück, wenn sie auf eine Standardeingabeaufforderung oder das angegebene Zeichenfolgenmuster in der Befehlsausgabe trifft.

Der folgende Beispielcode führt den monitor traffic interface fxp0 Befehl aus, wartet 15 Sekunden und ruft dann die Befehlsausgabe ab und gibt sie zurück.

Tabellarischer Änderungsverlauf

Die Unterstützung der Funktion hängt von der Plattform und der Version ab, die Sie benutzen. Verwenden Sie den Feature-Explorer , um festzustellen, ob eine Funktion auf Ihrer Plattform unterstützt wird.

Veröffentlichung
Beschreibung
2.6.8
Ab Junos PyEZ Version 2.6.8 verbindet sich die StartShell Instance mit demselben Port, der in der Device Instance definiert ist, es sei denn, der Host ist auf localhost gesetzt oder der Port ist 830 oder undefined.