Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Herstellen einer Verbindung zu Junos-Geräten über Junos PyEZ

ZUSAMMENFASSUNG Stellen Sie eine Verbindung zu einem Junos-Gerät oder zu einem angeschlossenen Konsolenserver her, indem Sie unterschiedliche Verbindungsmethoden und Protokolle in einer Junos PyEZ-Anwendung verwenden.

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

Dieses Thema bietet einen Überblick über die von Junos PyEZ unterstützten Verbindungsmethoden und erläutert, wie die verschiedenen Methoden zum Herstellen einer Verbindung mit einem Junos-Gerät verwendet werden. In den Junos PyEZ-Beispielen werden verschiedene Authentifizierungsmethoden verwendet, aber ausführliche Informationen zur Authentifizierung eines Benutzers finden Sie unter Authentifizieren von Junos PyEZ-Benutzern.

Übersicht über die Verbindungsmethoden

Mit Junos PyEZ können Sie über eine serielle Konsolenverbindung, Telnet oder eine NETCONF-Sitzung über SSH eine Verbindung zu einem Junos-Gerät herstellen. Sie müssen eine serielle Konsolenverbindung verwenden, wenn Sie physisch mit dem CONSOLE-Port eines Geräts 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 CONSOLE-Port 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 Clientverwaltungsanwendung initiiert.

Neue oder auf Null gesetzte Geräte mit werkseitigen Standardkonfigurationen erfordern den Zugriff über eine Konsolenverbindung. Daher können Sie Junos PyEZ verwenden, um ein Gerät, das noch nicht für den Remotezugriff konfiguriert ist, zunächst zu konfigurieren, 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.

Standardmäßig verwendet Junos PyEZ SSH, um eine Verbindung zu einem Gerät herzustellen. Wenn Sie einen anderen Verbindungstyp angeben möchten, müssen Sie den mode Parameter in die Device Argumentliste aufnehmen. Um eine Telnet-Verbindung zu einem Gerät herzustellen, schließen Sie das Argument mode='telnet' ein. Wenn Sie über eine serielle Konsolenverbindung eine Verbindung zu einem Gerät herstellen möchten, schließen Sie das Argument mode='serial' ein. Tabelle 1 fasst die Junos PyEZ-Verbindungsmethoden, ihre 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: Junos PyEZ-Verbindungsmodi

Verbindungsmodus

Wert des mode Arguments

Standard-Port

Erforderliche Junos OS-Konfiguration

Erste unterstützte Version von Junos PyEZ

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 SSH über Telnet oder NETCONF 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 Klartextkennwörter verwendet (und somit eine potenzielle Sicherheitslücke darstellt), empfehlen wir die Verwendung von SSH.

Hinweis:

Es liegt in der Verantwortung des Benutzers, die Anmeldeinformationen für die Authentifizierung mit Benutzername und Kennwort auf sichere Weise zu erhalten, die für seine Umgebung geeignet ist. Es empfiehlt sich, bei jedem Aufruf des Skripts zur Eingabe dieser Authentifizierungsanmeldeinformationen aufzufordern, 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() und-Methoden close() auf, um eine Verbindung mit dem Gerät herzustellen und von ihm zu trennen. Wenn Sie keinen Kontext-Manager verwenden, müssen Sie die open() and-Methoden close() in der Anwendung explizit aufrufen. Es wird empfohlen, einen Kontext-Manager für Konsolenverbindungen zu verwenden, da der Kontext-Manager das Schließen der Verbindung automatisch handhabt und ein Fehler beim Schließen der Verbindung zu unvorhersehbaren Ergebnissen führen kann.

Grundlegendes zu den 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. In Tabelle 2 sind die verfügbaren Verbindungseigenschaften aufgeführt.

Tabelle 2: Geräteeigenschaften

Eigenschaft

Beschreibung

connected

Boolescher Wert, der den aktuellen Status der Verbindung angibt. Kehrt zurück True , wenn eine Verbindung hergestellt ist.

hostname

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

master

Boolescher Wert, der zurückgegeben wird True , wenn das Routingmodul, mit dem die Anwendung verbunden ist, das primäre Routingmodul ist.

port

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

re_name

Zeichenfolge, die den Namen des Routingmoduls angibt, mit dem die Anwendung verbunden ist.

timeout

Ganzzahl, die den RPC-Timeoutwert in Sekunden angibt.

uptime

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

user

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

Beispielsweise können Sie nach dem Herstellen einer Verbindung mit einem Gerät die connected Eigenschaft abfragen, um den aktuellen Status der Verbindung zurückzugeben. A SessionListener überwacht die Sitzung und reagiert auf Transportfehler, indem eine Ausnahme ausgelöst TransportError und die Device.connected Eigenschaft auf festgelegt wird False.

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

Wenn Sie das Programm ausführen, wird die connected Eigenschaft zurückgegeben True , während die Anwendung mit dem Gerät verbunden ist, und kehrt zurück, False nachdem die Verbindung geschlossen wurde.

Herstellen einer Verbindung zu einem Gerät über SSH

Die Junos PyEZ-Klasse Device unterstützt die Verwendung von SSH zum Herstellen einer Verbindung mit einem Junos-Gerät. Sie können eine NETCONF-Sitzung über SSH mit der Verwaltungsschnittstelle des Geräts oder eine SSH-Verbindung mit einem Konsolenserver herstellen, der direkt mit dem CONSOLE-Port des Geräts verbunden ist. Der SSH-Server muss in der Lage sein, den Benutzer mithilfe von SSH-Standardauthentifizierungsmechanismen zu authentifizieren, wie unter Authentifizieren von Junos PyEZ-Benutzern beschrieben. Um eine NETCONF-Sitzung über SSH einzurichten, müssen Sie außerdem die Anforderungen erfüllen, die unter Einrichten von Junos PyEZ Managed Nodes beschrieben sind.

Junos PyEZ fragt automatisch die SSH-Standardkonfigurationsdatei unter ~/.ssh/config ab, sofern vorhanden. Wenn Sie SSH verwenden, um eine Verbindung zu einem Junos-Gerät oder zu einem Konsolenserver herzustellen, der mit dem Gerät verbunden ist, versucht Junos PyEZ zunächst, eine SSH-Authentifizierung mit öffentlichen Schlüsseln und dann eine kennwortbasierte Authentifizierung durchzuführen. Wenn die kennwortbasierte Authentifizierung verwendet wird, wird das angegebene Kennwort als Gerätekennwort verwendet. Wenn SSH-Schlüssel verwendet werden, wird das angegebene Passwort als Passphrase zum Entsperren des privaten Schlüssels verwendet. Wenn der private SSH-Schlüssel eine leere Passphrase enthält, ist kein Kennwort erforderlich. Private SSH-Schlüssel mit leeren Passphrasen werden jedoch nicht empfohlen.

So richten Sie eine NETCONF-Sitzung über SSH mit einem Junos-Gerät ein und drucken die Gerätefakten in einer Junos PyEZ-Anwendung mit Python 3:

  1. Importieren Sie die Klasse und alle anderen Module oder Objekte, die Device 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 alle optionalen Parameter an.
  3. Stellen Sie eine Verbindung mit dem Gerät her, indem Sie die open() Methode aufrufen, z. B.:
  4. Drucken Sie die Gerätefakten.
  5. Nachdem Sie alle erforderlichen Aufgaben ausgeführt haben, schließen Sie die Verbindung zum Gerät.

Das vollständige Beispielprogramm finden Sie hier:

Alternativ können Sie beim Herstellen einer Verbindung mit dem Gerät einen Kontextmanager verwenden, der automatisch die open() und-Methoden close() aufruft. Zum Beispiel:

Junos PyEZ ermöglicht es einem Client auch, über eine SSH-Verbindung zu einem Konsolenserver eine Verbindung zu einem Junos-Gerät herzustellen. In diesem Fall müssen Sie die Anmeldeinformationen für den Konsolenserver angeben, indem Sie die cs_user Argumente und cs_passwd in die Device Argumentliste aufnehmen. 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 stellt über eine serielle Verbindung eine Verbindung mit dem Junos-Gerät her, was langsam sein kann. Junos PyEZ-Verbindungen über einen Konsolenserver haben einen Standardwert für das Verbindungs-Timeout von 0,5 Sekunden. Daher müssen Sie möglicherweise das Verbindungstimeoutintervall erhöhen, indem Sie das Device timeout=seconds Argument einschließen, um der Clientanwendung genügend Zeit zum Herstellen der Verbindung zu geben.

Im folgenden Python 3-Beispiel wird die Authentifizierung beim Konsolenserver und dann beim Junos-Gerät durchgeführt. Das Verbindungstimeout wird auf sechs Sekunden festgelegt, damit der Client genügend Zeit hat, die Verbindung herzustellen.

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

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

Um ProxyCommand zu konfigurieren, fügen Sie der SSH-Konfigurationsdatei die entsprechenden Informationen hinzu. Zum Beispiel:

Herstellen einer 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 Clientverwaltungsanwendung initiiert, die blockiert wird, wenn der Client versucht, die Verbindung herzustellen (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 Clientverwaltungsanwendung herzustellen 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 Junos-Gerät fungiert als Server und authentifiziert den Client.

Hinweis:

Nachdem Sie ausgehende SSH-Verbindungen auf dem Junos-Gerät konfiguriert und festgeschrieben haben, beginnt das Gerät, eine ausgehende SSH-Verbindung basierend auf der festgeschriebenen Konfiguration zu initiieren. Das Gerät versucht wiederholt, diese Verbindung herzustellen, bis sie erfolgreich ist. Wenn die Verbindung zwischen dem Gerät und der Clientverwaltungsanwendung unterbrochen wird, versucht das Gerät erneut, eine neue ausgehende SSH-Verbindung herzustellen, bis dies erfolgreich ist. Diese Verbindung wird so lange aufrechterhalten, bis die ausgehende SSH-Konfiguration gelöscht oder deaktiviert 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 mit dem Host unter 198.51.100.101 an Port 2200 herzustellen:

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

Im folgenden Junos PyEZ-Beispiel wird der konfigurierte TCP-Port auf eingehende SSH-Sitzungen von Junos-Geräten überwacht. Die Anwendung akzeptiert eine eingehende Verbindung und ruft den Dateideskriptor des Sockets für diese Verbindung ab, der für den Wert des sock_fd Arguments verwendet wird. Die Clientanwendung stellt die SSH-Verbindung mit dem Gerät her, sammelt und druckt die Gerätedaten, trennt die Verbindung zum Gerät und wartet auf weitere Verbindungen.

Ausführliche Informationen zum Konfigurieren von ausgehendem SSH auf Junos-Geräten finden Sie unter Konfigurieren des ausgehenden SSH-Dienstes.

Herstellen einer Verbindung mit einem Gerät über Telnet

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

Um Junos PyEZ für eine Telnet-Verbindung zu einem Junos-Gerät zu verwenden, müssen Sie dies in die Argumentliste aufnehmen mode='telnet' und optional den port Parameter zum Angeben eines Ports angeben.Device Wenn Sie den port Parameter angebenmode='telnet', aber weglassen, ist der Standardwert für port 23. Wenn die Anwendung eine Verbindung über einen Konsolenserver herstellt, geben Sie den Port an, über den der Konsolenserver eine Verbindung mit dem Junos-Gerät herstellt.

So verwenden Sie Junos PyEZ, um eine Telnet-Verbindung zu einem Junos-Gerät herzustellen und die Gerätedaten in einer Junos PyEZ-Anwendung mit Python 3 auszugeben:

  1. Importieren Sie die Klasse und alle anderen Module oder Objekte, die Device für Ihre Aufgaben erforderlich sind.
  2. Erstellen Sie die Geräteinstanz mit dem mode='telnet' Argument, geben Sie den Verbindungsport an, falls er vom Standardport abweicht, und geben Sie den Hostnamen, alle für die Authentifizierung erforderlichen Parameter und alle optionalen Parameter an.
  3. Stellen Sie eine Verbindung mit dem Gerät her, indem Sie die open() Methode aufrufen.
  4. Drucken Sie die Gerätefakten.
  5. Nachdem Sie alle erforderlichen Aufgaben ausgeführt haben, schließen Sie die Verbindung zum Gerät.

Das vollständige Beispielprogramm finden Sie hier:

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

In einigen Fällen, wenn Sie eine Verbindung zu einem Konsolenserver herstellen, der eine Bannermeldung ausgibt, müssen Sie möglicherweise nach der Meldung die Eingabetaste drücken, um die Anmeldeaufforderung zu erreichen. Wenn eine Junos PyEZ-Anwendung eine Telnet-Sitzung mit einem Konsolenserver öffnet, bei der der Benutzer nach einer Bannermeldung die Eingabetaste drücken muss, erhält die Anwendung möglicherweise keine Anmeldeaufforderung, was dazu führen kann, dass die Verbindung hängen bleibt.

Ab Junos PyEZ Version 2.6.2 verarbeitet Junos PyEZ automatisch das Konsolenserverbanner. In den Junos PyEZ-Versionen 2.1.0 bis 2.6.1 kann eine Junos PyEZ-Anwendung eine Telnet-Verbindung zu einem Konsolenserver in die Device Argumentliste aufnehmenconsole_has_banner=True, der eine Bannermeldung ausgibt.

Wenn Sie das Argument console_has_banner=True einschließen und die Anwendung beim ersten Verbindungsaufbau keine Anmeldeaufforderung empfängt, wartet die Anwendung 5 Sekunden und gibt dann einen Zeilenumbruch (\n) aus, sodass der Konsolenserver die Anmeldeaufforderung ausgibt. Wenn Sie das Argument weglassen und die Verbindung hängt, gibt die Anwendung stattdessen den <close-session/> RPC aus, um die Verbindung zu beenden.

Herstellen einer Verbindung mit einem Gerät über eine serielle Konsolenverbindung

Die Junos PyEZ-Klasse Device ermöglicht es Ihnen, über eine serielle Konsolenverbindung eine Verbindung zu einem Junos-Gerät herzustellen, was nützlich ist, wenn Sie zunächst ein neues oder auf Null gesetztes Gerät konfigurieren müssen, das noch nicht für den Remotezugriff konfiguriert ist. Um diese Verbindungsmethode verwenden zu können, müssen Sie physisch über den CONSOLE-Port mit dem Gerät verbunden sein. Ausführliche Anweisungen zum Herstellen einer Verbindung mit dem CONSOLE-Port Ihres Geräts finden Sie in der Hardwaredokumentation für Ihr spezifisches Gerät.

Hinweis:

Junos PyEZ unterstützt die Verwendung von Kontextmanagern für serielle Konsolenverbindungen. Es wird empfohlen, einen Kontextmanager 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 zum Herstellen einer Verbindung mit einem Junos-Gerät über eine serielle Konsolenverbindung zu verwenden, müssen Sie den Parameter zum Angeben eines Ports in die Device Argumentliste und mode='serial' optional port einfügen. Wenn Sie den Parameter angebenmode='serial', aber weglassen, ist /dev/ttyUSB0der Standardwert für port .port

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

  1. Importieren Sie die Klasse und alle anderen Module oder Objekte, die Device für Ihre Aufgaben erforderlich sind.
  2. Erstellen Sie die Geräteinstanz mit dem mode='serial' Argument, geben Sie den Verbindungsport an, falls er vom Standardport abweicht, und geben Sie alle für die Authentifizierung erforderlichen Parameter sowie optionale Parameter an.
    Hinweis:

    Auf allen Plattformen, auf denen Junos OS ausgeführt wird, ist standardmäßig nur der Root-Benutzer ohne Kennwort konfiguriert. Verwenden Sie für neue oder auf Null gesetzte Geräte den Parameter und lassen Sie user='root' ihn passwd weg.

  3. Laden und bestätigen Sie die Konfiguration auf dem Gerät.
  4. Fügen Sie alle erforderlichen Fehlerbehandlungen hinzu.

Das vollständige Beispielprogramm finden Sie hier: