Authentifizieren von Junos PyEZ-Benutzern
Junos PyEZ-Anwendungen können Benutzer mit einem Passwort oder anderen standardmäßigen SSH-Authentifizierungsmechanismen authentifizieren.
Übersicht über die Junos PyEZ-Benutzerauthentifizierung
Mit Junos PyEZ können Sie sich über eine serielle Konsole, Telnet oder eine NETCONF-Sitzung über SSH direkt mit Junos-Geräten verbinden und diese verwalten. Junos PyEZ unterstützt auch die Verbindung mit einem Gerät über eine Telnet- oder SSH-Verbindung zu einem Konsolenserver, der mit dem Port des Geräts CONSOLE verbunden ist. Darüber hinaus kann Junos PyEZ eine Verbindung zu einem Gerät über ein Zwischengerät herstellen, z. B. über eine Bastion oder einen Jump-Host.
Die Remotegeräte müssen in der Lage sein, den Benutzer je nach Verbindungsmethode mit einem Kennwort oder anderen standardmäßigen SSH-Authentifizierungsmechanismen zu authentifizieren. Wenn Sie Junos-Geräte über eine SSH-Verbindung verwalten, ist die bequemste und sicherste Art, auf ein Gerät zuzugreifen, die Konfiguration von SSH-Schlüsseln. SSH-Schlüssel ermöglichen es dem Remote-Gerät, vertrauenswürdige Benutzer zu identifizieren.
Sie können Gerätevorgänge mit jedem Benutzerkonto durchfü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. Wenn Sie keinen Benutzer angeben, verwendet der Benutzer standardmäßig den Wert der $USER Umgebungsvariablen.
Für SSH-Verbindungen fragt Junos PyEZ automatisch die Standard-SSH-Konfigurationsdatei unter ~/.ssh/config ab, falls vorhanden. Sie können auch in die Device Argumentliste aufnehmenssh_config, um eine andere Konfigurationsdatei anzugeben. Junos PyEZ verwendet alle relevanten Einstellungen in der SSH-Konfigurationsdatei, die nicht von den Argumenten in der Device Argumentliste überschrieben werden, wie z. B. der Benutzer oder die Identitätsdatei.
Wenn SSH zum Herstellen einer Verbindung mit einem Gerät verwendet wird, versucht Junos PyEZ zuerst die auf dem öffentlichen SSH-Schlüssel basierende SSH-Authentifizierung und dann die kennwortbasierte Authentifizierung. Wenn die kennwortbasierte Authentifizierung verwendet wird, wird das angegebene Kennwort als Gerätekennwort verwendet. Wenn SSH-Schlüssel verwendet werden, ist das angegebene Passwort die Passphrase zum Entsperren des privaten Schlüssels. Sie müssen kein Kennwort angeben, wenn Sie den Schlüssel in einen SSH-Schlüsselagenten laden oder wenn der private SSH-Schlüssel eine leere Passphrase hat. Wir empfehlen jedoch nicht, private SSH-Schlüssel mit leeren Passphrasen zu verwenden.
Rufen Sie Anmeldeinformationen auf sichere Weise ab, die für Ihre Umgebung geeignet ist. Es empfiehlt sich, bei jeder Ausführung des Skripts zur Eingabe von Anmeldeinformationen aufzufordern, anstatt sie in einem unverschlüsselten Format zu speichern.
In den folgenden Abschnitten werden die verschiedenen Methoden zur Authentifizierung erläutert.
Authentifizieren von Junos PyEZ-Benutzern mit einem Passwort
So authentifizieren Sie einen Junos PyEZ-Benutzer mit einem Passwort:
Authentifizieren von Junos PyEZ-Benutzern mit SSH-Schlüsseln
Um SSH-Schlüssel in einer Junos PyEZ-Anwendung zu verwenden, müssen Sie die Schlüssel zuerst auf dem Konfigurationsverwaltungsserver generieren. Konfigurieren Sie dann den öffentlichen Schlüssel auf jedem Gerät, mit dem der Junos PyEZ-Client eine Verbindung herstellen soll. Zu den Geräten kann ein Junos-Gerät, ein Konsolenserver oder ein Bastion- oder Jump-Host gehören. Um die Schlüssel zu verwenden, 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 einen Kennwortschutz verwenden oder darauf verzichten. Wenn die Device Argumente kein Kennwort angeben oder auf eine SSH-Schlüsseldatei verweisen, überprüft Junos PyEZ zuerst die SSH-Schlüssel, die aktiv im SSH-Schlüssel-Agent geladen sind, und sucht dann am Standardspeicherort nach SSH-Schlüsseln. Wenn Sie eine Verbindung zu einem Konsolenserver herstellen, müssen die SSH-Schlüssel kennwortgeschützt sein.
In den folgenden Abschnitten werden die Schritte zum Generieren der SSH-Schlüssel, zum Konfigurieren der Schlüssel auf Remotegerä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 Konfigurationsmanagement-Server und konfigurieren den öffentlichen Schlüssel auf Remotegeräten:
Referenz-SSH-Schlüssel in Junos PyEZ-Anwendungen
Nachdem Sie das SSH-Schlüsselpaar generiert und den öffentlichen Schlüssel auf dem Remote-Gerät konfiguriert haben, können Junos PyEZ-Anwendungen den Schlüssel verwenden, um eine Verbindung mit dem Gerät herzustellen. Um den Schlüssel zu verwenden, schließen Sie die entsprechenden Argumente in den Device Konstruktor ein. Die Device Argumente werden bestimmt durch:
-
Der Speicherort des Schlüssels
-
Ob der Schlüssel aktiv in einen SSH-Schlüsselagenten geladen wird, z. B. ssh-agent
-
ob der Schlüssel passwortgeschützt ist
-
Gibt an, ob die SSH-Konfigurationsdatei des Benutzers bereits Einstellungen für diesen Host definiert hat
In den folgenden Abschnitten werden die verschiedenen Szenarien skizziert:
- Verwenden eines SSH-Schlüsselagenten mit aktiv geladenen Schlüsseln
- SSH-Schlüssel ohne Passwortschutz verwenden
- Verwenden Sie passwortgeschützte SSH-Schlüssel
Verwenden eines SSH-Schlüsselagenten mit aktiv geladenen Schlüsseln
Sie können einen SSH-Schlüssel-Agent oder einen Authentifizierungs-Agent verwenden, um private Schlüssel sicher zu speichern und zu vermeiden, dass die Passphrase für kennwortgeschützte Schlüssel wiederholt eingegeben werden muss. Ein Junos PyEZ-Client kann eine Verbindung zu einem Gerät herstellen, indem SSH-Schlüssel verwendet werden, die aktiv in den SSH-Agent geladen werden. Wenn die Device Argumente kein Kennwort angeben oder auf eine SSH-Schlüsseldatei verweisen, überprüft Junos PyEZ standardmäßig zuerst die SSH-Schlüssel, die aktiv im SSH-Schlüssel-Agent geladen werden, und sucht dann am Standardspeicherort nach SSH-Schlüsseln. Beachten Sie, dass Device die SSH-Schlüsseldatei explizit in der Argumentliste oder über Einstellungen in der SSH-Konfigurationsdatei festgelegt werden kann.
So stellen Sie eine Verbindung zu einem Gerät her, indem SSH-Schlüssel verwendet werden, die aktiv in den nativen SSH-Schlüsselagenten geladen werden:
-
Um eine direkte Verbindung zu einem Junos-Gerät herzustellen, müssen Sie nur den erforderlichen Hostnamen oder die IP-Adresse in der
DeviceArgumentliste angeben.dev = Device(host='router.example.com')
-
Um eine Verbindung zu einem Junos-Gerät über eine Bastion oder einen Jump-Host herzustellen, legen Sie den Hostnamen oder die IP-Adresse des Junos-Geräts fest
hostund fügen Sie das Argument ein, dasproxy_commanddie Verbindung über den Jump-Host definiert.dev = Device(host='router.example.com', proxy_command="ssh -W %h:%p -q jumphost.example.com")
Der Device Konstruktor unterstützt auch das allow_agent Argument, um eine genauere Kontrolle darüber zu ermöglichen, wann der SSH-Schlüsselagent verwendet werden soll. Tabelle 1 beschreibt die Einstellungen.
| allow_agent Werte | Verhalten |
|---|---|
|
|
Die SSH-Verbindung verwendet Schlüssel im SSH-Agent nur, wenn die |
|
|
Die SSH-Verbindung verwendet Schlüssel, die im SSH-Agent geladen werden. |
|
|
Die SSH-Verbindung verwendet keine Schlüssel aus dem SSH-Agent. |
Angenommen, Sie laden SSH-Schlüssel für einen Host in den SSH-Schlüsselagenten. Darüber hinaus enthält Ihre SSH-Konfigurationsdatei einen Hosteintrag, der die IdentityFile Option mit der privaten Schlüsseldatei für diesen Host definiert. In Ihrer Junos PyEZ-Anwendung erstellen Sie eine Instanz von Device und definieren nur das host Argument. Verwendet standardmäßig die private Schlüsseldatei, Device die durch definiert ist IdentityFile. Da die Device Argumente auf eine private Schlüsseldatei verweisen, überprüft Junos PyEZ den SSH-Schlüsselagenten nicht. Wenn die private Schlüsseldatei über eine Passphrase verfügt, schlägt die Verbindung fehl, da kein Kennwort angegeben wird. Um also den SSH-Agent zu verwenden, aber die IdentityFile Option in der SSH-Konfigurationsdatei beizubehalten, können allow_agent=TrueSie .
dev = Device(host='router.example.com', allow_agent=True)
SSH-Schlüssel ohne Passwortschutz verwenden
Junos PyEZ ermöglicht es einem Client, eine direkte Verbindung zu einem Junos-Gerät herzustellen, indem private SSH-Schlüssel verwendet werden, die keinen Passwortschutz haben. Wir empfehlen jedoch nicht, private SSH-Schlüssel mit einer leeren Passphrase zu verwenden. Junos PyEZ unterstützt keine Verbindung zu einem Konsolenserver über private SSH-Schlüssel mit einer leeren Passphrase.
So stellen Sie eine Verbindung zu einem Junos-Gerät her, indem SSH-Schlüssel verwendet werden, die sich am Standardspeicherort befinden und nicht über einen Kennwortschutz verfügen:
-
In der
DeviceArgumentliste müssen Sie nur den erforderlichen Hostnamen oder die IP-Adresse angeben.dev = Device(host='router.example.com')
Junos PyEZ überprüft zuerst die SSH-Schlüssel, die im aktiven SSH-Schlüsselagenten geladen sind, und überprüft dann die SSH-Schlüssel am Standardspeicherort.
So stellen Sie eine Verbindung zu einem Junos-Gerät her, indem SSH-Schlüssel verwendet werden, die sich nicht am Standardspeicherort befinden und keinen Passwortschutz haben:
-
Legen Sie in der
DeviceArgumentliste dasssh_private_key_fileArgument 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 lokalen Pfad der privaten SSH-Schlüsseldatei für einen bestimmten Host angibt, können Sie das
ssh_private_key_fileArgument in derDeviceArgumentliste weglassen. Das Einfügen desssh_private_key_fileArguments überschreibt alle vorhandenenIdentityFileWerte, die für einen Host in der SSH-Konfigurationsdatei des Benutzers definiert sind.
Verwenden Sie passwortgeschützte SSH-Schlüssel
Junos PyEZ-Clients können kennwortgeschützte SSH-Schlüssel verwenden, um eine direkte Verbindung zu einem Junos-Gerät, zu einem Junos-Gerät über einen Bastion- oder Jump-Host oder zu einem mit dem Gerät verbundenen Konsolenserver herzustellen. In den folgenden Abschnitten wird erläutert, wie Sie die Device Argumente für kennwortgeschützte SSH-Schlüssel explizit definieren. Informationen zur Verwendung von kennwortgeschützten Schlüsseln, die in einem aktiven SSH-Schlüsselagent geladen wurden, finden Sie unter Verwenden eines SSH-Schlüsselagenten mit aktiv geladenen Schlüsseln.
- Direkte Verbindung zu einem Junos-Gerät
- Verbindung über einen Jump Host herstellen
- Verbindung über einen Konsolenserver herstellen
Direkte Verbindung zu einem Junos-Gerät
So verbinden Sie sich mit einem passwortgeschützten SSH-Schlüssel direkt mit einem Junos-Gerät:
-
Fügen Sie Code ein, der zur Eingabe des Kennworts für den privaten SSH-Schlüssel auffordert und den Wert in einer Variablen speichert.
from jnpr.junos import Device from getpass import getpass key_password = getpass('Password for SSH private key file: ')
-
In der
DeviceArgumentliste:-
Legen Sie das
passwdArgument so fest, dass es auf die Variable verweist, die die Passphrase der SSH-Schlüsseldatei enthält. -
Legen Sie das
ssh_private_key_fileArgument auf den Pfad des privaten Schlüssels fest, wenn sich der Schlüssel nicht am Standardspeicherort befindet und die SSH-Konfigurationsdatei den Pfad der privaten Schlüsseldatei nicht bereits definiert.
from jnpr.junos import Device from getpass import getpass key_password = getpass('Password for SSH private key file: ') dev = Device(host='router.example.com', passwd=key_password, ssh_private_key_file='/home/user/.ssh/id_rsa_dc') dev.open() # ... dev.close()
-
Verbindung über einen Jump Host herstellen
So stellen Sie eine Verbindung zu einem Junos-Gerät über eine Bastion oder einen Jump-Host her, indem Sie kennwortgeschützte SSH-Schlüssel für beide Geräte verwenden:
-
Fügen Sie Code ein, der zur Eingabe des Kennworts für den privaten SSH-Schlüssel für das Netzwerkgerät auffordert und den Wert in einer Variablen speichert.
from jnpr.junos import Device from getpass import getpass host = "router1.example.com" junos_passwd = getpass("SSH key passphrase for network device: ")
-
In der
DeviceArgumentliste:-
Legen Sie das
hostArgument auf den Hostnamen oder die IP-Adresse des Junos-Geräts fest. -
Legen Sie das
passwdArgument so fest, dass es auf die Variable verweist, die die Passphrase für die SSH-Schlüsseldatei für das Junos-Gerät enthält. -
Legen Sie das
ssh_private_key_fileArgument auf den Pfad des privaten Schlüssels für das Junos-Gerät fest, wenn sich der Schlüssel nicht am Standardspeicherort befindet und die SSH-Konfigurationsdatei den Pfad der privaten Schlüsseldatei nicht bereits definiert. -
Fügen Sie das
proxy_commandArgument ein und definieren Sie die Verbindung für den Jump-Host, einschließlich der Benutzer- und Identitätsdatei, falls erforderlich.
from jnpr.junos import Device from getpass import getpass host = "router1.example.com" junos_passwd = getpass("SSH key passphrase for network device: ") dev = Device( host=host, passwd=junos_passwd, ssh_private_key_file="/home/user/.ssh/id_rsa_junos", proxy_command="ssh -i /home/user/.ssh/id_rsa_jump -W %h:%p -q user@jumphost.example.com" ) dev.open() print(dev.facts) dev.close()
-
Wenn Sie das Skript ausführen, fordert das Skript zur Eingabe der Passphrasen der privaten Schlüssel auf.
Verbindung über einen Konsolenserver herstellen
So stellen Sie eine Verbindung zu einem Junos-Gerät über einen Konsolenserver her, der eine kennwortgeschützte SSH-Schlüsseldatei verwendet:
-
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 Passworts für den privaten 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: ') cs_password = getpass('Console server key passphrase: ')
-
In der
DeviceArgumentliste:-
Legen Sie das
hostArgument auf den Hostnamen oder die IP-Adresse des Konsolenservers fest. -
Legen Sie die
userArgumente andpasswdauf die Variablen fest, die die Anmeldeinformationen für Junos OS enthalten. -
Setzen Sie das
cs_userArgument auf die Variable, die den Benutzernamen des Konsolenservers enthält. -
Setzen Sie das
cs_passwdArgument auf die Variable, die die Passphrase der SSH-Schlüsseldatei enthält. -
Legen Sie das
ssh_private_key_fileArgument auf den Pfad des privaten Schlüssels fest, wenn sich der Schlüssel nicht am Standardspeicherort befindet und die SSH-Konfigurationsdatei den Pfad der privaten Schlüsseldatei nicht bereits definiert. - Legen Sie das
portArgument auf den TCP-Port fest, der dem TTY-Gerät auf dem Konsolenserver zugeordnet 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: ') cs_password = getpass('Console server key passphrase: ') with Device(host='cs.example.com', user=junos_username, passwd=junos_password, cs_user=cs_username, cs_passwd=cs_password, ssh_private_key_file='/home/user/.ssh/id_rsa_dc', port=3007) as dev: print (dev.facts) # ...
-