Authentifizieren von Junos PyEZ-Benutzern
ZUSAMMENFASSUNG Junos PyEZ-Anwendungen können Benutzer mithilfe von SSH-Standardauthentifizierungsmechanismen authentifizieren, einschließlich Kennwörtern und SSH-Schlüsseln.
Übersicht über die Junos PyEZ-Benutzerauthentifizierung
Mit Junos PyEZ können Sie über eine serielle Konsolenverbindung, Telnet oder eine NETCONF-Sitzung über SSH eine direkte Verbindung zu Junos-Geräten herstellen und diese verwalten. Darüber hinaus unterstützt Junos PyEZ auch die Verbindung mit dem Gerät über eine Telnet- oder SSH-Verbindung mit einem Konsolenserver, der mit dem Port des Geräts CONSOLE
verbunden ist. Das Gerät muss in der Lage sein, den Benutzer je nach Verbindungsmethode entweder mit einem Kennwort oder anderen standardmäßigen SSH-Authentifizierungsmechanismen zu authentifizieren. Wenn Sie Junos-Geräte über eine SSH-Verbindung verwalten, ist die Konfiguration von SSH-Schlüsseln die bequemste und sicherste Möglichkeit, auf ein Gerät zuzugreifen. SSH-Schlüssel ermöglichen es dem Remote-Gerät, vertrauenswürdige Benutzer zu identifizieren.
Sie können Gerätevorgänge mit jedem Benutzerkonto ausführen, das Zugriff auf das verwaltete Junos-Gerät hat. Sie können den Benutzer explizit definieren, wenn Sie eine neue Instanz der jnpr.junos.device.Device
Klasse erstellen, oder wenn Sie keinen Benutzer in der Parameterliste angeben, wird der Benutzer standardmäßig auf $USER
.
Bei SSH-Verbindungen fragt Junos PyEZ automatisch die SSH-Standardkonfigurationsdatei unter ~/.ssh/config ab, sofern eine vorhanden ist, es sei denn, die Device
Argumentliste enthält das ssh_config
Argument zum Angeben einer anderen Konfigurationsdatei. Junos PyEZ verwendet alle relevanten Einstellungen in der SSH-Konfigurationsdatei für die angegebene Verbindung, die nicht durch die Argumente in der Device
Argumentliste überschrieben werden, z. B. den Benutzer oder die Identitätsdatei.
Wenn der Junos PyEZ-Client SSH verwendet, um eine Verbindung zum 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 SSH-Schlüssel verwendet werden, wird das angegebene Passwort als Passphrase zum Entsperren des privaten Schlüssels verwendet. Wenn die kennwortbasierte Authentifizierung verwendet wird, wird das angegebene Kennwort als Gerätekennwort verwendet. Wenn die SSH-Authentifizierung mit öffentlichem Schlüssel verwendet wird und der private SSH-Schlüssel eine leere Passphrase aufweist, ist kein Kennwort erforderlich. Private SSH-Schlüssel mit leeren Passphrasen werden jedoch nicht empfohlen.
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.
Authentifizieren von Junos PyEZ-Benutzern mithilfe eines Kennworts
So authentifizieren Sie einen Junos PyEZ-Benutzer mit einem Kennwort:
Authentifizieren von Junos PyEZ-Benutzern mithilfe von SSH-Schlüsseln
Um SSH-Schlüssel in einer Junos PyEZ-Anwendung zu verwenden, müssen Sie zunächst die Schlüssel auf dem Konfigurationsverwaltungsserver generieren und den öffentlichen Schlüssel auf jedem Gerät konfigurieren, mit dem der Junos PyEZ-Client eine Verbindung herstellt. Um eine direkte Verbindung mit dem Junos-Gerät herzustellen, konfigurieren Sie den Schlüssel auf diesem Gerät. Um über einen Konsolenserver eine Verbindung zu einem Junos-Gerät herzustellen, konfigurieren Sie den Schlüssel auf dem Konsolenserver. Um die Schlüssel verwenden zu können, müssen Sie die entsprechenden Argumente in die Device
Argumentliste aufnehmen.
Junos PyEZ kann SSH-Schlüssel verwenden, die aktiv in einen SSH-Schlüsselagenten geladen werden, Schlüssel, die entweder am Standardspeicherort oder an einem benutzerdefinierten Speicherort generiert werden, und Schlüssel, die entweder einen Kennwortschutz verwenden oder darauf verzichten. Wenn Sie eine direkte Verbindung zu einem Junos-Gerät herstellen und die Device
Argumente kein Kennwort oder keine SSH-Schlüsseldatei angeben, überprüft Junos PyEZ zuerst die SSH-Schlüssel, die aktiv im SSH-Schlüssel-Agent geladen sind, und prüft dann, ob SSH-Schlüssel am Standardspeicherort vorhanden sind. Beim Herstellen einer Verbindung zu einem Konsolenserver werden nur kennwortgeschützte Schlüssel unterstützt.
In den folgenden Abschnitten werden die Schritte zum Generieren der SSH-Schlüssel, zum Konfigurieren der Schlüssel auf Junos-Geräten und zum Verwenden der Schlüssel zum Herstellen einer Verbindung mit dem verwalteten Gerät beschrieben:
Generieren und Konfigurieren von SSH-Schlüsseln
So generieren Sie SSH-Schlüssel auf dem Konfigurationsverwaltungsserver und konfigurieren den öffentlichen Schlüssel auf Junos-Geräten:
Referenz-SSH-Schlüssel in Junos PyEZ-Anwendungen
Nachdem Sie das SSH-Schlüsselpaar generiert und den öffentlichen Schlüssel auf dem Remotegerät konfiguriert haben, können Sie den Schlüssel verwenden, um eine Verbindung mit dem Gerät herzustellen, indem Sie die entsprechenden Argumente in den Device
Konstruktorcode aufnehmen. Die Device
Argumente werden durch den Speicherort des Schlüssels bestimmt, ob der Schlüssel kennwortgeschützt ist, ob der Schlüssel aktiv in einen SSH-Schlüsselagenten wie ssh-agent geladen ist und ob die SSH-Konfigurationsdatei des Benutzers bereits Einstellungen für diesen Host definiert. In den folgenden Abschnitten werden die verschiedenen Szenarien beschrieben:
- Authentifizieren des Benutzers mithilfe eines SSH-Schlüsselagenten mit aktiv geladenen Schlüsseln
- Authentifizieren Sie den Benutzer mit SSH-Schlüsseln ohne Passwortschutz
- Authentifizieren des Benutzers mithilfe kennwortgeschützter SSH-Schlüsseldateien
Authentifizieren des Benutzers mithilfe eines SSH-Schlüsselagenten mit aktiv geladenen Schlüsseln
Sie können einen SSH-Schlüsselagenten verwenden, um private Schlüssel sicher zu speichern und die wiederholte Eingabe der Passphrase für kennwortgeschützte Schlüssel zu vermeiden. Junos PyEZ ermöglicht es einem Client, sich mithilfe von SSH-Schlüsseln, die aktiv in einen SSH-Schlüsselagenten geladen werden, direkt mit einem Junos-Gerät zu verbinden. Wenn beim Herstellen einer Verbindung mit einem Junos-Gerät die Device
Argumente kein Kennwort oder keine SSH-Schlüsseldatei angeben, überprüft Junos PyEZ zuerst die SSH-Schlüssel, die aktiv im SSH-Schlüssel-Agent geladen sind, und sucht dann nach SSH-Schlüsseln am Standardspeicherort.
So verwenden Sie SSH-Schlüssel, die aktiv in den nativen SSH-Schlüssel-Agent geladen werden, um eine direkte Verbindung zu einem Junos-Gerät herzustellen:
In der
Device
Argumentliste müssen Sie nur den erforderlichen Hostnamen und alle gewünschten Variablen angeben.dev = Device(host='router.example.com')
Authentifizieren Sie den Benutzer mit SSH-Schlüsseln ohne Passwortschutz
Junos PyEZ ermöglicht es einem Client, eine direkte Verbindung zu einem Junos-Gerät herzustellen, indem er private SSH-Schlüssel verwendet, die keinen Kennwortschutz haben, obwohl wir die Verwendung von privaten SSH-Schlüsseln mit einer leeren Passphrase nicht empfehlen. Junos PyEZ unterstützt nicht die Verbindung zu einem Konsolenserver über private SSH-Schlüssel mit einer leeren Passphrase.
So stellen Sie eine Verbindung zu einem Junos-Gerät mithilfe von SSH-Schlüsseln her, die sich am Standardspeicherort befinden und keinen Kennwortschutz haben:
In der
Device
Argumentliste müssen Sie nur den erforderlichen Hostnamen und alle gewünschten Variablen angeben.dev = Device(host='router.example.com')
Junos PyEZ prüft zuerst die SSH-Schlüssel, die in einen aktiven SSH-Schlüssel-Agenten geladen werden, und prüft dann die SSH-Schlüssel am Standardspeicherort.
So stellen Sie eine Verbindung zu einem Junos-Gerät mithilfe von SSH-Schlüsseln her, die sich nicht am Standardspeicherort befinden und nicht über einen Kennwortschutz verfügen:
Legen Sie in der
Device
Argumentliste dasssh_private_key_file
Argument auf den Pfad des privaten SSH-Schlüssels fest.dev = Device(host='router.example.com', ssh_private_key_file='/home/user/.ssh/id_rsa_dc')
Hinweis:Wenn die SSH-Konfigurationsdatei des Benutzers bereits den Dateipfad des lokalen privaten SSH-Schlüssels für einen bestimmten Host angibt, können Sie das Argument
ssh_private_key_file
in derDevice
Argumentliste weglassen. Durch das Einschließen desssh_private_key_file
Arguments werden alle vorhandenenIdentityFile
Werte überschrieben, die für einen Host in der SSH-Konfigurationsdatei des Benutzers definiert sind.
Authentifizieren des Benutzers mithilfe kennwortgeschützter SSH-Schlüsseldateien
Junos PyEZ-Clients können kennwortgeschützte SSH-Schlüsseldateien verwenden, um eine direkte Verbindung zu einem Junos-Gerät oder zu einem Konsolenserver herzustellen, der mit dem Gerät verbunden ist.
So stellen Sie über eine kennwortgeschützte SSH-Schlüsseldatei eine direkte Verbindung zu einem Junos-Gerät her:
So stellen Sie über einen Konsolenserver eine Verbindung zu einem Junos-Gerät her und verwenden eine kennwortgeschützte SSH-Schlüsseldatei:
-
Fügen Sie Code ein, der zur Eingabe der Anmeldeinformationen für das Junos-Gerät auffordert und jeden Wert in einer Variablen speichert.
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ')
Fügen Sie Code ein, der zur Eingabe des Benutzernamens des Konsolenservers und des Kennworts für den privaten SSH-Schlüssel auffordert und jeden Wert in einer Variablen speichert.
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ') cs_username = input('Console server username: ') key_password = getpass('Password for SSH private key file: ')
In der Liste der
Device
Konstruktorargumente:Legen Sie das Argument
host
auf den Hostnamen oder die IP-Adresse des Konsolenservers festLegen Sie die
user
Argumente andpasswd
auf die Variablen fest, die die Anmeldeinformationen für Junos OS enthalten.Setzen Sie das Argument
cs_user
auf die Variable, die den Benutzernamen des Konsolenservers enthältSetzen Sie das Argument
cs_passwd
auf die Variable, die das Kennwort für die SSH-Schlüsseldatei enthältSetzen Sie das
ssh_private_key_file
Argument auf den Pfad des privaten Schlüssels, wenn sich der Schlüssel nicht am Standardspeicherort befindet und der Dateipfad nicht bereits in der SSH-Konfigurationsdatei des Benutzers definiert ist
from jnpr.junos import Device from getpass import getpass junos_username = input('Junos OS username: ') junos_password = getpass('Junos OS password: ') cs_username = input('Console server username: ') key_password = getpass('Password for SSH private key file: ') with Device(host='router.example.com', user=junos_username, passwd=junos_password, cs_user=cs_username, cs_passwd=key_password, ssh_private_key_file='/home/user/.ssh/id_rsa_dc') as dev: print (dev.facts) # ...