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.
Verbindungsmodus |
Wert des |
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 |
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.
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.
Eigenschaft |
Beschreibung |
---|---|
|
Boolescher Wert, der den aktuellen Status der Verbindung angibt. Kehrt zurück |
|
Zeichenfolge, die den Hostnamen des Geräts angibt, mit dem die Anwendung verbunden ist. |
|
Boolescher Wert, der zurückgegeben wird |
|
Ganzzahl oder Zeichenfolge, die den für die Verbindung verwendeten Port angibt. |
|
Zeichenfolge, die den Namen des Routingmoduls angibt, mit dem die Anwendung verbunden ist. |
|
Ganzzahl, die den RPC-Timeoutwert in Sekunden angibt. |
|
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. |
|
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.
from jnpr.junos import Device dev = Device(host='router.example.net') dev.open() print (dev.connected) dev.close() print (dev.connected)
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.
user@host:~$ python connect.py True False
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:
Das vollständige Beispielprogramm finden Sie hier:
import sys from getpass import getpass from jnpr.junos import Device from jnpr.junos.exception import ConnectError hostname = input("Device hostname: ") junos_username = input("Junos OS username: ") junos_password = getpass("Junos OS or SSH key password: ") dev = Device(host=hostname, user=junos_username, passwd=junos_password) try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) sys.exit(1) except Exception as err: print (err) sys.exit(1) print (dev.facts) dev.close()
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:
import sys from getpass import getpass from jnpr.junos import Device from jnpr.junos.exception import ConnectError hostname = input("Device hostname: ") junos_username = input("Junos OS username: ") junos_password = getpass("Junos OS or SSH key password: ") try: with Device(host=hostname, user=junos_username, passwd=junos_password) as dev: print (dev.facts) except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) sys.exit(1) except Exception as err: print (err) sys.exit(1)
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.
import sys from getpass import getpass from jnpr.junos import Device from jnpr.junos.exception import ConnectError hostname = input("Console server hostname: ") cs_username = input("Console server username: ") cs_password = getpass("Console server or SSH key password: ") junos_username = input("Junos OS username: ") junos_password = getpass("Junos OS password: ") try: with Device(host=hostname, user=junos_username, passwd=junos_password, cs_user=cs_username, cs_passwd=cs_password, timeout=6) as dev: print (dev.facts) except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) sys.exit(1) except Exception as err: print (err) sys.exit(1)
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:
ssh_config_file = "~/.ssh/config_dc" dev = Device(host='198.51.100.1', ssh_config=ssh_config_file)
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:
[user1@server ~]$ cat ~/.ssh/config Host 198.51.100.1 User user1 ProxyCommand ssh -l user1 198.51.100.2 nc %h 22 2>/dev/null
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.
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:
user@router1> show configuration system services outbound-ssh client nms1 { device-id router1; secret "$9$h1/ceWbs4UDkGD/Cpu1I-Vb"; ## SECRET-DATA services netconf; 198.51.100.101 port 2200; }
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.
import socket from jnpr.junos import Device from jnpr.junos.exception import ConnectError from getpass import getpass from pprint import pprint """ Listen on TCP port 2200 for incoming SSH session with a Junos device. Upon connecting, collect and print the devices facts, then disconnect from that device and wait for more connections. """ def launch_junos_proxy(client, addr): val = { 'MSG-ID': None, 'MSG-VER': None, 'DEVICE-ID': None, 'HOST-KEY': None, 'HMAC': None } msg = '' count = 0 while count < 5: c = client.recv(1) c = c.decode("utf-8") msg += str(c) if c == '\n': count += 1 for line in msg.splitlines(): (key, value) = line.split(': ') val[key] = value print("{}: {}".format(key, val[key])) return client.fileno() def main(): PORT = 2200 junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ') s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(('', PORT)) s.listen(5) print('\nListening on port %d for incoming sessions ...' % (PORT)) sock_fd = 0 while True: client, addr = s.accept() print('\nGot a connection from %s:%d' % (addr[0], addr[1])) sock_fd = launch_junos_proxy(client, addr) print('Logging in ...') try: with Device(host=None, sock_fd=sock_fd, user=junos_username, passwd=junos_password) as dev: pprint(dev.facts) except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) if __name__ == "__main__": main()
user@nms1:~$ python3 junos-pyez-outbound-ssh.py Junos OS username: user Junos OS password: Listening on port 2200 for incoming sessions ... Got a connection from 10.10.0.5:57881 MSG-ID : DEVICE-CONN-INFO MSG-VER : V1 DEVICE-ID : router1 HOST-KEY : ssh-rsa AAAAB...0aF4Mk= HMAC : 4e61201ec27a8312104f63bfaf77a4478a892c82 Logging in ... {'2RE': True, 'HOME': '/var/home/user', 'RE0': {'last_reboot_reason': 'Router rebooted after a normal shutdown.', 'mastership_state': 'master', 'model': 'RE-MX-104', 'status': 'OK', 'up_time': '2 days, 6 hours, 22 minutes, 22 seconds'}, 'RE1': {'last_reboot_reason': 'Router rebooted after a normal shutdown.', 'mastership_state': 'backup', 'model': 'RE-MX-104', 'status': 'OK', 'up_time': '2 days, 6 hours, 22 minutes, 12 seconds'}, 'RE_hw_mi': False, 'current_re': ['re0', 'master', 'node', 'fwdd', 'member', 'pfem'], 'domain': 'example.com', 'fqdn': 'router1.example.com', 'hostname': 'router1', ...
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:
Das vollständige Beispielprogramm finden Sie hier:
import sys from getpass import getpass from jnpr.junos import Device hostname = input("Device hostname: ") junos_username = input("Junos OS username: ") junos_password = getpass("Junos OS password: ") dev = Device(host=hostname, user=junos_username, passwd=junos_password, mode='telnet', port='23') try: dev.open() except Exception as err: print (err) sys.exit(1) print (dev.facts) dev.close()
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:
import sys from getpass import getpass from jnpr.junos import Device hostname = input("Device hostname: ") junos_username = input("Junos OS username: ") junos_password = getpass("Junos OS password: ") try: with Device(host=hostname, user=junos_username, passwd=junos_password, mode='telnet', port='23') as dev: print (dev.facts) except Exception as err: print (err) sys.exit(1)
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.
dev = Device(host=hostname, user=username, passwd=password, mode='telnet', console_has_banner=True)
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.
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/ttyUSB0
der 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:
Das vollständige Beispielprogramm finden Sie hier:
import sys from getpass import getpass from jnpr.junos import Device from jnpr.junos.utils.config import Config junos_username = input("Junos OS username: ") junos_password = getpass("Junos OS password: ") try: with Device(mode='serial', port='port', user=junos_username, passwd=junos_password) as dev: print (dev.facts) cu = Config(dev) cu.lock() cu.load(path='/tmp/config_mx.conf') cu.commit() cu.unlock() except Exception as err: print (err) sys.exit(1)