Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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

ZUSAMMENFASSUNG 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 Befehle für den Betriebsmodus, die Informationen zurückgeben, die den Informationen ähneln, die von vielen Shell-Befehlen zurückgegeben werden. Daher ist der Zugriff auf die UNIX-Shell auf Junos-Geräten in der Regel nicht erforderlich. In einigen Fällen muss ein Benutzer oder eine Anwendung jedoch auf die Shell zugreifen und Shell-Befehle ausführen oder CLI-Befehle von der Shell ausführen.

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

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

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

  • Devicehost ist auf 'localhost' gesetzt.

  • Deviceport auf 830 gesetzt ist.

  • Deviceport ist nicht definiert.

Ausführen von Befehlen über die Shell

Die StartShell run() Methode führt einen Shellbefehl 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 Argument this="string" 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 , wenn 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 zuerst 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 der Kürze halber gekürzt.

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

Angeben des Shell-Typs

Ab Junos PyEZ, Version 2.6.4, wird das shell_type Argument in Remote-Skripten unterstützt, StartShell um den Shell-Typ anzugeben. StartShell Unterstützt die folgenden Shell-Typen:

  • C-Schale (csh)

  • Bourne-Muschel (Asche)

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

So geben Sie eine Zeitüberschreitung an

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

Die erwartete Zeichenfolge ist der im Argument this 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 die Dauer des Timeouts, bevor es die Befehlsausgabe erfasst, wie unter Ausführen nicht wiederkehrender Shellbefehle beschrieben.

Gestaffelte Befehlsausführung

Es kann vorkommen, dass Sie mehrere Aufrufe der run() Methode ausführen oder in einer Schleife durchlaufen möchten. Um die Ausgabe zu stabilisieren, können Sie das Argument sleep 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 eine Gleitkommazahl für eine Genauigkeit von unter einer Sekunde definieren sleep .

Ausführen von nicht wiederkehrenden Shell-Befehlen

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

Sie können nicht zurückgegebene Shell-Befehle mit der StartShell run() Methode ausführen, indem Sie das Argument this=None. Wenn Sie das Argument this=None einschließen, wartet die Methode bis zum angegebenen Timeoutwert, 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 Argument this weglassen oder es auf eine bestimmte Zeichenfolge oder ein bestimmtes Muster festlegen, gibt die Methode möglicherweise eine Teilausgabe für einen nicht zurückgegebenen Befehl zurück, wenn sie in der Befehlsausgabe auf eine Standardeingabeaufforderung oder das angegebene Zeichenfolgenmuster stößt.

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.

Tabelle "Änderungshistorie"

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

Loslassen
Beschreibung
2.6.8
Ab Junos PyEZ, Version 2.6.8, stellt die StartShell Instanz eine Verbindung zu demselben Port her, der in der Device Instanz definiert ist, es sei denn, der Host ist auf localhost festgelegt oder der Port ist 830 oder nicht definiert.