Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Verbindung zu Junos-Geräten mit Junos PyEZ

Junos PyEZ ist ein Mikroframework für Python, mit dem Sie Junos-Geräte verwalten können. Junos PyEZ modelliert jedes Gerät als Instanz der jnpr.junos.device.Device-Klasse . Mit Device der Klasse können Sie eine Verbindung zu einem Junos-Gerät über eine serielle Konsolenverbindung, telnet oder durch Einrichten einer NETCONF-Sitzung über SSH herstellen. Darüber hinaus unterstützt Junos PyEZ auch die Verbindung mit dem Gerät über eine Telnet- oder SSH-Verbindung mit einem Konsolenserver. Ein Konsolenserver, auch bekannt als Terminalserver, ist ein spezielles Gerät, das eine Netzwerkverbindung zum Out-of-Band-Management-Konsolenport eines Geräts bereitstellt.

Dieses Thema bietet einen Überblick über die von Junos PyEZ unterstützten Verbindungsmethoden und erklärt, wie die verschiedenen Methoden zur Verbindung mit einem Junos-Gerät verwendet werden. Die Junos PyEZ-Beispiele verwenden verschiedene Authentifizierungsmethoden, detaillierte Informationen zur Authentifizierung eines Benutzers finden Sie unter Authentifizieren von Junos PyEZ-Benutzern.

Überblick über die Verbindungsmethoden

Mit Junos PyEZ können Sie eine Verbindung zu einem Junos-Gerät über eine serielle Konsolenverbindung, ein Telnet oder eine NETCONF-Sitzung über SSH herstellen. Sie müssen eine serielle Konsolenverbindung verwenden, wenn Sie physisch mit dem CONSOLE-Port auf einem Gerät verbunden sind. Sie können Telnet oder SSH verwenden, um eine Verbindung zur Verwaltungsschnittstelle des Geräts oder zu einem Konsolenserver herzustellen, der mit dem KONSOLENport des Geräts verbunden ist. Darüber hinaus unterstützt Junos PyEZ ausgehende SSH-Verbindungen, bei denen das Junos-Gerät die Verbindung mit der Client-Managementanwendung initiiert.

Neue oder zeroisierte Geräte mit werksseitiger Standardkonfiguration erfordern den Zugriff über eine Konsolenverbindung. So können Sie junos PyEZ verwenden, um zunächst ein Gerät zu konfigurieren, das noch nicht für den Remotezugriff konfiguriert ist, indem Sie entweder eine serielle Konsolenverbindung verwenden, wenn Sie direkt mit dem Gerät verbunden sind, oder über Telnet oder SSH über einen Konsolenserver, der mit dem Gerät verbunden ist.

Junos PyEZ verwendet standardmäßig SSH, um eine Verbindung zu einem Gerät herzustellen. Um einen anderen Verbindungstyp anzugeben, müssen Sie den mode Parameter in die Device Argumentliste aufnehmen. Wenn Sie telnet zu einem Gerät möchten, fügen Sie das mode='telnet' Argument ein. Um eine Verbindung mit einem Gerät über eine serielle Konsolenverbindung herzustellen, schließen Sie das mode='serial' Argument an. Tabelle 1 fasst die Verbindungsmethoden von Junos PyEZ, deren Standardwerte für bestimmte Parameter, alle erforderlichen Junos OS-Konfigurationen und die Junos PyEZ-Version zusammen, in der die Unterstützung für diese Verbindungsmethode erstmals eingeführt wurde.

Tabelle 1: Verbindungsmodi für Junos PyEZ

Verbindungsmodus

Wert des Argumentes mode

Standard-Port

Erforderliche Junos OS-Konfiguration

Erste unterstützte Junos PyEZ-Version

NETCONF über SSH (Standard)

830

[edit system services]
netconf {
    ssh;
}

1.0.0

Serielle Konsolenverbindung

Serielle

/dev/ttyUSB0

2.0.0 (*nix)

2.4.0 (Windows)

Telnet zu Junos-Gerät

Telnet

23

[edit system services]
telnet;

2.0.0

Telnet über einen Konsolenserver

Telnet

23

2.0.0

SSH über einen Konsolenserver

22

2.2.0

Ausgehendes SSH

[edit system services]
outbound-ssh {     
    ...
}

2.2.0

Hinweis:

Bevor Sie über Telnet oder NETCONF über SSH auf die Verwaltungsschnittstelle eines Geräts zugreifen können, müssen Sie zunächst den entsprechenden Dienst auf Hierarchieebene [edit system services] aktivieren. Weitere Informationen finden Sie unter Einrichten von Junos PyEZ Managed Nodes. Da Telnet Klartext-Kennwörter verwendet (wodurch eine potenzielle Sicherheitslücke entsteht), empfehlen wir, SSH zu verwenden.

Hinweis:

Es liegt in der Verantwortung des Benutzers, die Authentifizierungsnachweise für Benutzername und Kennwort sicher zu erhalten, die für ihre Umgebung geeignet sind. Es ist best Practices, diese Authentifizierungsinformationen bei jedem Aufruf des Skripts einzufordern, anstatt die Anmeldeinformationen in einem unverschlüsselten Format zu speichern.

Junos PyEZ unterstützt die Verwendung von Kontextmanagern (with... as Syntax) für alle Verbindungsmethoden. Wenn Sie einen Kontext-Manager verwenden, ruft Junos PyEZ automatisch die open() Verbindungen zum Gerät auf und close() trennt sie vom Gerät. Wenn Sie keinen Kontext-Manager verwenden, müssen Sie die und close() die open() Methoden in Ihrer Anwendung explizit aufrufen. Wir empfehlen, dass Sie einen Kontext-Manager für Konsolenverbindungen verwenden, da der Kontext-Manager das Schließen der Verbindung automatisch übernimmt, und ein Ausfall beim Schließen der Verbindung zu unvorhersehbaren Ergebnissen führen kann.

Verstehen der Verbindungseigenschaften von Junos PyEZ

Wenn Sie eine Verbindung zu einem Junos-Gerät herstellen, speichert Junos PyEZ Informationen über die aktuelle Verbindung als Eigenschaften der Device Instanz. Tabelle 2 zeigt die verfügbaren Verbindungseigenschaften.

Tabelle 2: Geräteeigenschaften

Eigenschaft

Beschreibung

connected

Boolesche Angabe des aktuellen Verbindungszustands. Kehrt bei Verbindung zurück True .

hostname

Zeichenfolge, die den Hostnamen des Geräts angibt, mit dem die Anwendung verbunden ist.

master

Boolesche Rückkehr True , wenn die Routing-Engine, mit der die Anwendung verbunden ist, die primäre Routing-Engine ist.

port

Ganzzahl oder Zeichenfolge, die den für die Verbindung verwendeten Port angibt.

re_name

Zeichenfolge, die den Namen der Routing-Engine angibt, mit der die Anwendung verbunden ist.

timeout

Ganzzahl, die den RPC-Timeout-Wert in Sekunden angibt.

uptime

Ganzzahl, die die Anzahl der Sekunden seit dem Start der aktuellen Routing-Engine darstellt. Diese Eigenschaft ist ab Junos PyEZ Version 2.1.5 verfügbar.

user

Zeichenfolge, die den Benutzer angibt, der auf das Junos-Gerät zutritt.

Beispielsweise können Sie nach der Verbindung mit einem Gerät die connected Eigenschaft abfragen, um den aktuellen Zustand der Verbindung zurückzugeben. A SessionListener überwacht die Sitzung und reagiert auf Übertragungsfehler, indem eine TransportError Ausnahme ausgelöst und die Device.connected Eigenschaft auf Falsefestgelegt wird.

Der folgende Beispielcode druckt den Wert der connected Eigenschaft nach der Verbindung mit einem Junos-Gerät und erneut nach dem Schließen der Sitzung.

Wenn Sie das Programm ausführen, kehrt die connected Eigenschaft zurück True , während die Anwendung mit dem Gerät verbunden ist, und kehrt nach dem Schließen der Verbindung zurück False .

Verbinden Sie sich mit einem Gerät über SSH

Die Junos PyEZ-Klasse Device unterstützt die Verwendung von SSH zur Verbindung mit einem Junos-Gerät. Sie können eine NETCONF-Sitzung über SSH mit der Verwaltungsschnittstelle des Geräts einrichten oder eine SSH-Verbindung mit einem Konsolenserver herstellen, der direkt mit dem KONSOLENport des Geräts verbunden ist. Der SSH-Server muss in der Lage sein, den Benutzer mithilfe von Standard-SSH-Authentifizierungsmechanismen zu authentifizieren, wie in Authenticate Junos PyEZ Users beschrieben. Um eine NETCONF-Sitzung über SSH einzurichten, müssen Sie auch die in Junos PyEZ Managed Nodes festgelegten Anforderungen erfüllen.

Junos PyEZ fragt die Standard-SSH-Konfigurationsdatei automatisch bei ~/.ssh/config ab, falls eine vorhanden ist. Bei der Verwendung von SSH zur Verbindung mit einem Junos-Gerät oder mit einem mit dem Gerät verbundenen Konsolenserver versucht Junos PyEZ zunächst eine SSH-basierte Authentifizierung mit öffentlichem Schlüssel und dann die kennwortbasierte Authentifizierung. Wenn eine kennwortbasierte Authentifizierung verwendet wird, wird das angegebene Kennwort als Gerätekennwort verwendet. Wenn SSH-Schlüssel verwendet werden, wird das angegebene Kennwort als Passphrase zum Entsperren des privaten Schlüssels verwendet. Wenn der private SSH-Schlüssel über eine leere Passphrase verfügt, ist kein Kennwort erforderlich. Private SSH-Schlüssel mit leeren Passphrasen werden jedoch nicht empfohlen.

Um eine NETCONF-Sitzung über SSH mit einem Junos-Gerät einzurichten und die Gerätedaten in einer Junos PyEZ-Anwendung mit Python 3 auszudrucken:

  1. Importieren Sie die Device Klasse und alle anderen Module oder Objekte, die für Ihre Aufgaben erforderlich sind.
  2. Erstellen Sie die Geräteinstanz, und geben Sie den Hostnamen, alle für die Authentifizierung erforderlichen Parameter und optionale Parameter an.
  3. Verbinden Sie sich mit dem Gerät, indem Sie beispielsweise die open() Methode aufrufen:
  4. Drucken Sie die Gerätedaten aus.
  5. Schließen Sie die Verbindung zum Gerät, nachdem Sie alle erforderlichen Aufgaben ausgeführt haben.

Das Ganze des Beispielprogramms wird hier vorgestellt:

Alternativ können Sie einen Kontext-Manager verwenden, wenn Sie eine Verbindung zum Gerät herstellen, der die open() Und-Methoden close() automatisch aufruft. Zum Beispiel:

Junos PyEZ ermöglicht einem Client auch die Verbindung zu einem Junos-Gerät über eine SSH-Verbindung mit einem Konsolenserver. In diesem Fall müssen Sie die Anmeldeinformationen für den Konsolenserver angeben, indem Sie die Argumente und cs_passwd die cs_user Argumente in die Device Argumentliste einbeziehen. Wenn SSH-Schlüssel verwendet werden, setzen Sie das cs_passwd Argument auf die Variable, die die Passphrase für den privaten Schlüssel enthält.

Der Konsolenserver verbindet sich über eine serielle Verbindung mit dem Junos-Gerät, was langsam sein kann. Junos PyEZ-Verbindungen über einen Konsolenserver haben einen Standard-Timeout-Wert von 0,5 Sekunden. Infolgedessen müssen Sie möglicherweise das Timeout-Intervall für die Verbindung erhöhen, indem Sie das Device timeout=seconds Argument einbeziehen, um ausreichend Zeit für die Clientanwendung zum Herstellen der Verbindung einzuräumen.

Das folgende Python 3-Beispiel authentifiziert sich mit dem Konsolenserver und dann mit dem Junos-Gerät. Das Timeout der Verbindung wird auf sechs Sekunden festgelegt, sodass der Client ausreichend Zeit hat, um die Verbindung herzustellen.

Junos PyEZ fragt die Standard-SSH-Konfigurationsdatei automatisch bei ~/.ssh/config ab, falls eine vorhanden ist. Sie können jedoch beim Erstellen der Geräteinstanz eine andere SSH-Konfigurationsdatei angeben, indem Sie den ssh_config Parameter in die Device Argumentliste einbeziehen. Zum Beispiel:

Junos PyEZ bietet auch Unterstützung für ProxyClient, mit dem Sie über einen Vermittler-Host, der Netcat unterstützt, auf ein Zielgerät zugreifen können. Dies ist nützlich, wenn Sie sich nur über den Zwischenhost beim Zielgerät anmelden können.

Fügen Sie zur Konfiguration von ProxyClient die entsprechenden Informationen in die SSH-Konfigurationsdatei hinzu. Zum Beispiel:

Verbindung zu einem Gerät über ausgehendes SSH

Sie können ein Junos-Gerät so konfigurieren, dass es eine TCP/IP-Verbindung mit einer Client-Managementanwendung initiiert, die blockiert wird, wenn der Client versucht, die Verbindung zu initiieren (z. B. wenn sich das Gerät hinter einer Firewall befindet). Die outbound-ssh Konfiguration weist das Gerät an, eine TCP/IP-Verbindung mit der Client-Managementanwendung zu erstellen und die Identität des Geräts weiterzuleiten. Sobald die Verbindung hergestellt ist, fungiert die Verwaltungsanwendung als Client und initiiert die SSH-Sequenz, und das Gerät fungiert als Server und authentifiziert den Client.

Hinweis:

Es gibt keinen Initiationsbefehl mit ausgehendem SSH. Sobald ausgehendes SSH konfiguriert und zugesagt wurde, beginnt das Gerät, eine ausgehende SSH-Verbindung basierend auf der zugesagten Konfiguration zu initiieren. Das Gerät versucht wiederholt, diese Verbindung zu erstellen, bis sie erfolgreich ist. Wenn die Verbindung zwischen dem Gerät und der Client-Managementanwendung unterbrochen wird, versucht das Gerät erneut, eine neue ausgehende SSH-Verbindung zu erstellen, bis dies erfolgreich ist. Diese Verbindung wird aufrechterhalten, bis der ausgehende SSH-Stanza aus der Konfiguration entfernt wird.

Um das Junos-Gerät für ausgehende SSH-Verbindungen zu konfigurieren, fügen Sie die outbound-ssh Anweisung auf hierarchieebene [edit system services] ein. Im folgenden Beispiel versucht das Junos-Gerät, eine Verbindung zum Host bei 198.51.100.101 am Port 2200 zu initiieren:

Um eine Verbindung mit dem Junos-Gerät mit ausgehendem SSH herzustellen, setzt die Junos PyEZ-Anwendung das sock_fd Argument im Device Konstruktor gleich dem Dateideskriptor eines vorhandenen Sockets und lässt entweder das host Argument aus, oder setzt es auf None.

Das folgende Junos PyEZ-Beispiel hört den konfigurierten TCP-Port für eingehende SSH-Sitzungen von Junos-Geräten ab. Die Anwendung akzeptiert eine eingehende Verbindung und ruft den Dateideskriptor des Sockets für diese Verbindung ab, die für den Wert des sock_fd Arguments verwendet wird. Die Clientanwendung stellt die SSH-Verbindung mit dem Gerät her, erfasst und druckt die Fakten des Geräts, trennt sich vom Gerät und wartet auf weitere Verbindungen.

Detaillierte Informationen zur Konfiguration ausgehender SSH auf Junos-Geräten finden Sie unter Konfigurieren des ausgehenden SSH-Service.

Mit Telnet eine Verbindung zu einem Gerät herstellen

Die Junos PyEZ-Klasse Device unterstützt die Verbindung zu einem Junos-Gerät über Telnet, das einen unverschlüsselten Zugriff auf das Netzwerkgerät bietet. Sie können telnet zur Verwaltungsschnittstelle des Geräts oder zu einem Konsolenserver, der direkt mit dem KONSOLENport des Geräts verbunden ist. Sie müssen den Telnet-Dienst auf der [edit system services] Hierarchieebene auf allen Geräten konfigurieren, die Zugriff auf die Verwaltungsschnittstelle benötigen. Durch den Zugriff auf das Gerät über einen Konsolenserver können Sie zunächst ein neues oder zeroisiertes Gerät konfigurieren, das noch nicht für den Remotezugriff konfiguriert ist.

Um Junos PyEZ zum Telnet zu einem Junos-Gerät zu verwenden, müssen Sie in die Argumentliste aufgenommen mode='telnet' werden und optional den port Parameter angeben, um einen Port anzugeben.Device Wenn Sie den Parameter angebenmode='telnet', aber den port Parameter auslassen, ist der Wert für port standardmäßig 23. Wenn sich die Anwendung über einen Konsolenserver verbindet, geben Sie den Port an, über den sich der Konsolenserver mit dem Junos-Gerät verbindet.

So verwenden Sie Junos PyEZ zum Telnet auf einem Junos-Gerät und drucken Sie die Gerätedaten in einer Junos PyEZ-Anwendung mit Python 3 aus:

  1. Importieren Sie die Device Klasse und alle anderen Module oder Objekte, die für Ihre Aufgaben erforderlich sind.
  2. Erstellen Sie die Geräteinstanz mit dem mode='telnet' Argument, geben Sie den Verbindungsport an, wenn er sich vom Standard unterscheidet, und geben Sie den Hostnamen, alle für die Authentifizierung erforderlichen Parameter und optionale Parameter an.
  3. Verbinden Sie sich mit dem Gerät, indem Sie die open() Methode aufrufen.
  4. Drucken Sie die Gerätedaten aus.
  5. Schließen Sie die Verbindung zum Gerät, nachdem Sie alle erforderlichen Aufgaben ausgeführt haben.

Das Ganze des Beispielprogramms wird hier vorgestellt:

Alternativ können Sie bei einer Verbindung mit dem Gerät einen Kontextmanager verwenden, der das Öffnen und Schließen der Verbindung übernimmt. Zum Beispiel:

Wenn Sie sich mit einem Konsolenserver verbinden, der eine Bannernachricht sendet, müssen Sie in einigen Fällen die Enter-Taste drücken, nachdem die Nachricht die Anmeldeeingabe erreicht hat. Wenn eine Junos PyEZ-Anwendung eine Telnet-Sitzung mit einem Konsolenserver öffnet, bei der der Benutzer die Enter-Taste nach einer Bannernachricht drücken muss, kann es sein, dass die Anwendung die Anmeldeaufforderung nicht erhält, wodurch die Verbindung hängen bleibt.

Ab Junos PyEZ Version 2.6.2 verarbeitet Junos PyEZ automatisch das Konsolenserver-Banner. In Junos PyEZ Releases 2.1.0 bis 2.6.1 kann eine Junos PyEZ-Anwendung in die Argumentliste aufgenommen werden, um Telnet an einen Konsolenserver zu senden console_has_banner=True , der Device eine Banner-Nachricht sendet.

Wenn Sie das console_has_banner=True Argument einbeziehen und die Anwendung bei der ersten Verbindung keine Anmeldeaufforderung erhält, wartet die Anwendung 5 Sekunden und gibt dann ein Newline-Zeichen (\n) aus, sodass der Konsolenserver die Anmeldeeingabeaufforderung ausgibt. Wenn Sie das Argument weglassen und die Verbindung hängt, gibt die Anwendung stattdessen die <close-session/> RPC aus, um die Verbindung zu beenden.

Verbindung zu einem Gerät über eine serielle Konsolenverbindung herstellen

Mit der Junos PyEZ-Klasse Device können Sie eine Verbindung zu einem Junos-Gerät über eine serielle Konsolenverbindung herstellen. Dies ist nützlich, wenn Sie zunächst ein neues oder zeroisiertes Gerät konfigurieren müssen, das noch nicht für den Remotezugriff konfiguriert ist. Um diese Verbindungsmethode zu verwenden, müssen Sie über den KONSOLENport physisch mit dem Gerät verbunden sein. Detaillierte Anweisungen zur Verbindung mit dem KONSOLENport auf Ihrem Gerät finden Sie in der Hardwaredokumentation für Ihr jeweiliges Gerät.

Hinweis:

Junos PyEZ unterstützt die Verwendung von Kontextmanagern für serielle Konsolenverbindungen. Es wird empfohlen, einen Kontext-Manager für Konsolenverbindungen zu verwenden, da der Kontextmanager das Öffnen und Schließen der Verbindung automatisch übernimmt. Wenn die Verbindung nicht geschlossen wird, kann dies zu unvorhersehbaren Ergebnissen führen.

Um junos PyEZ zur Verbindung mit einem Junos-Gerät über eine serielle Konsolenverbindung zu verwenden, müssen Sie in die Argumentliste aufgenommen mode='serial' werden und optional den port Parameter angeben, um einen Port anzugeben.Device Wenn Sie den Parameter angebenmode='serial', aber auslassenport, wird der Wert für port die Standardeinstellungen auf /dev/ttyUSB0.

Um eine Verbindung zu einem Junos-Gerät über eine serielle Konsolenverbindung herzustellen und auch eine Konfiguration auf dem Gerät in einer Junos PyEZ-Anwendung mit Python 3 zu laden und zu bestätigen:

  1. Importieren Sie die Device Klasse und alle anderen Module oder Objekte, die für Ihre Aufgaben erforderlich sind.
  2. Erstellen Sie die Geräteinstanz mit dem mode='serial' Argument, geben Sie den Anschlussport an, wenn er sich vom Standard unterscheidet, und geben Sie alle für die Authentifizierung erforderlichen Parameter und optionalen Parameter an.
    Hinweis:

    Alle Plattformen, auf denen Junos OS ausgeführt wird, haben standardmäßig nur den Stammbenutzer ohne Kennwort konfiguriert. Verwenden Sie user='root' für neue oder zeroisierte Geräte den Parameter, und lassen Sie sie aus passwd .

  3. Laden Und bestätigen Sie die Konfiguration auf dem Gerät.
  4. Fügen Sie alle erforderlichen Fehlerhandings bei.

Das Ganze des Beispielprogramms wird hier vorgestellt: