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.

Hinweis:

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:

  1. Erstellen Sie in Ihrem bevorzugten Editor eine neue Datei mit der Dateierweiterung .py .

    In diesem Beispiel wird der Dateiname junos-pyez-pw.py verwendet.

  2. Fügen Sie Code hinzu, der zur Eingabe des Hostnamens oder der IP-Adresse auffordert, zu der eine Verbindung hergestellt werden soll, sowie des Benutzernamens und des Kennworts für das Junos-Gerät.
  3. Wenn der Junos PyEZ-Client eine Verbindung zum Gerät über eine SSH-Verbindung zu einem Konsolenserver herstellt, fordern Sie den Benutzernamen und das Kennwort des Konsolenservers an.
  4. Wenn der Junos PyEZ-Client eine Verbindung zu einem Port herstellt, der von der Standardeinstellung abweicht, fordern Sie die Portnummer an.
  5. In der Device Konstruktorargumentliste:
    • Setzen Sie das host Argument auf die Variable, die den Hostnamen oder die IP-Adresse des Remote-Geräts enthält.

    • Legen Sie die user Argumente and passwd auf die Variablen fest, die die Anmeldeinformationen für Junos OS enthalten.

    • Wenn der Junos PyEZ-Client über eine SSH-Verbindung zu einem Konsolenserver verbunden ist, legen Sie die cs_user Argumente und cs_passwd auf die Variablen fest, die die Anmeldeinformationen für den Konsolenserver enthalten.

    • Wenn der Junos PyEZ-Client eine Verbindung zu einem nicht standardmäßigen Port herstellt, setzen Sie das port Argument gegebenenfalls auf die Variable, die den Port enthält.

    • Fügen Sie alle zusätzlichen Argumente ein, die für die Verbindungsmethode erforderlich sind.

    Das folgende Beispiel enthält Beispielcode für jede der verschiedenen Verbindungsmethoden:

    Hinweis:

    Auf allen Plattformen, auf denen Junos OS ausgeführt wird, ist standardmäßig nur der Root-Benutzer ohne Kennwort konfiguriert. Wenn Sie Junos PyEZ verwenden, um ein neues oder auf Null gesetztes Gerät zunächst über eine Konsolenverbindung zu konfigurieren, verwenden user='root'und lassen Sie den passwd Parameter weg.

  6. Führen Sie den Junos PyEZ-Code aus.

    Das Programm fordert Sie zur Eingabe des Hostnamens, des Junos OS-Benutzernamens und -Kennworts, des Benutzernamens und des Kennworts des Konsolenservers (falls angefordert) und des Ports (falls angefordert) auf. Das Programm gibt das Kennwort in der Befehlszeile nicht wieder.

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:

  1. Generieren Sie auf dem Server das öffentliche und private SSH-Schlüsselpaar für den erforderlichen Benutzer, und geben Sie alle erforderlichen oder gewünschten Optionen an. Zum Beispiel:
  2. (Optional) Laden Sie den Schlüssel in den nativen SSH-Schlüsselagenten.
  3. Konfigurieren Sie den öffentlichen Schlüssel unter dem entsprechenden Benutzerkonto auf jedem Gerät, mit dem die Junos PyEZ-Anwendung eine Verbindung herstellen soll, z. B. Junos-Geräte, ein Konsolenserver, eine Bastion oder ein Jumphost.
    • Um den öffentlichen Schlüssel auf einem Junos-Gerät zu konfigurieren, besteht eine Methode darin, den Schlüssel aus einer Datei zu laden.

    • Um den öffentlichen Schlüssel auf einem Server oder Jumphost zu konfigurieren, können Sie den ssh-copy Befehl verwenden.

  4. Stellen Sie sicher, dass der Schlüssel funktioniert, indem Sie sich mit dem Schlüssel beim Gerät anmelden.

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

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 Device Argumentliste angeben.

  • 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 host und fügen Sie das Argument ein, das proxy_command die Verbindung über den Jump-Host definiert.

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.

Tabelle 1: Device allow_agent Argumentation
allow_agent Werte Verhalten

None(Standardeinstellung)

Die SSH-Verbindung verwendet Schlüssel im SSH-Agent nur, wenn die Device Argumente kein Kennwort angeben oder auf eine private Schlüsseldatei verweisen (entweder explizit als Argument oder über die SSH-Konfigurationsdatei).

True

Die SSH-Verbindung verwendet Schlüssel, die im SSH-Agent geladen werden.

False

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 .

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 Device Argumentliste müssen Sie nur den erforderlichen Hostnamen oder die IP-Adresse angeben.

    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 Device Argumentliste das ssh_private_key_file Argument auf den Pfad des privaten SSH-Schlüssels fest.

    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_file Argument in der Device Argumentliste weglassen. Das Einfügen des ssh_private_key_file Arguments überschreibt alle vorhandenen IdentityFile Werte, 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

So verbinden Sie sich mit einem passwortgeschützten SSH-Schlüssel direkt mit einem Junos-Gerät:

  1. 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.

  2. In der Device Argumentliste:

    • Legen Sie das passwd Argument so fest, dass es auf die Variable verweist, die die Passphrase der SSH-Schlüsseldatei enthält.

    • Legen Sie das ssh_private_key_file Argument 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.

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:

  1. 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.

  2. In der Device Argumentliste:

    • Legen Sie das host Argument auf den Hostnamen oder die IP-Adresse des Junos-Geräts fest.

    • Legen Sie das passwd Argument 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_file Argument 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_command Argument ein und definieren Sie die Verbindung für den Jump-Host, einschließlich der Benutzer- und Identitätsdatei, falls erforderlich.

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:

  1. Fügen Sie Code ein, der zur Eingabe der Anmeldeinformationen für das Junos-Gerät auffordert und jeden Wert in einer Variablen speichert.

  2. 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.

  3. In der Device Argumentliste:

    • Legen Sie das host Argument auf den Hostnamen oder die IP-Adresse des Konsolenservers fest.

    • Legen Sie die user Argumente and passwd auf die Variablen fest, die die Anmeldeinformationen für Junos OS enthalten.

    • Setzen Sie das cs_user Argument auf die Variable, die den Benutzernamen des Konsolenservers enthält.

    • Setzen Sie das cs_passwd Argument auf die Variable, die die Passphrase der SSH-Schlüsseldatei enthält.

    • Legen Sie das ssh_private_key_file Argument 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 port Argument auf den TCP-Port fest, der dem TTY-Gerät auf dem Konsolenserver zugeordnet ist.