Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Authentifizieren von Benutzern, die Ansible-Module auf Junos-Geräten ausführen

Authentifizierung – Übersicht

Juniper Networks bietet Ansible-Module, mit denen Sie Junos-Geräte verwalten können. Die Module von Juniper Networks werden über die Sammlung verteilt, die juniper.device auf Ansible Galaxy gehostet wird.

Mit den Modulen von Juniper Networks können Sie eine direkte Verbindung zu Junos-Geräten herstellen und diese über SSH, Telnet oder eine serielle Konsolenverbindung verwalten. Die Module unterstützen auch die Verbindung mit dem Gerät über eine SSH- oder Telnet-Verbindung zu einem Konsolenserver, der mit dem Port des Geräts CONSOLE verbunden ist. Das Remotegerät muss in der Lage sein, den Benutzer je nach Verbindungsprotokoll mit einem Kennwort oder anderen standardmäßigen SSH-Authentifizierungsmechanismen zu authentifizieren.

Wenn Sie Ansible zum Verwalten von Junos-Geräten verwenden, ist der bequemste Weg, auf das Gerät zuzugreifen, die Konfiguration von SSH-Schlüsseln. SSH-Schlüssel ermöglichen es dem Remotegerät, vertrauenswürdige Benutzer zu identifizieren. Alternativ können Sie beim Ausführen von Modulen und Playbooks einen Benutzernamen und ein Kennwort angeben.

Bei SSH-Verbindungen versuchen die Module von Juniper Networks zunächst, mit SSH die Public Key-basierte Authentifizierung und dann die passwortbasierte Authentifizierung. Wenn SSH-Schlüssel verwendet werden, wird das angegebene Passwort als Passphrase zum Entsperren des privaten SSH-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. Es wird jedoch nicht empfohlen, private SSH-Schlüssel mit leeren Passphrasen zu verwenden. Um ein Kennwort für die kennwortbasierte Authentifizierung oder kennwortgeschützte SSH-Schlüssel abzurufen, können Sie über das Playbook oder die Befehlszeile zur Eingabe des Kennworts auffordern, oder Sie können eine im Tresor verschlüsselte Datendatei erstellen, in der das Kennwort sicher gespeichert wird.

Sie können Verbindungs- und Authentifizierungsparameter für die Module von Juniper Networks wie folgt angeben. Wenn Sie die Werte nicht explizit definieren, werden in einigen Fällen Standardwerte verwendet, wie unter Grundlegendes zu den Standardwerten für Juniper Networks-Module beschrieben. Wenn Sie den Wert eines Parameters an mehreren Stellen definieren, wählt Ansible den Wert basierend auf der Variablenrangfolge aus, wie unter Grundlegendes zur Variablenrangfolge in der offiziellen Ansible-Dokumentation beschrieben.

  • Ansible-Variablen: Sie können die Werte der Verbindungs- und Authentifizierungsparameter angeben, indem Sie normale Ansible-Variablen verwenden, z. B. Variablen, die in Inventar- oder Tresordateien definiert sind, in Host- oder Gruppenvariablen oder mithilfe von Befehlszeilenoptionen.

  • SSH-Client-Konfigurationsdatei: Bei SSH-Verbindungen fragen die Module von Juniper Networks automatisch die SSH-Standardkonfigurationsdatei unter ~/.ssh/config ab, sofern vorhanden. Sie können auch die ssh_config Option zum Angeben einer anderen Konfigurationsdatei einschließen. Die Module verwenden alle relevanten Einstellungen in der SSH-Konfigurationsdatei für die angegebene Verbindung, es sei denn, Sie definieren explizit Variablen, die die Einstellung außer Kraft setzen.

  • Modulargumente: Die juniper.device Module unterstützen die Angabe von verbindungs- und authentifizierungsbezogenen Optionen für lokale Verbindungen (connection: local) als Modulargumente der obersten Ebene.

  • vars: -Abschnitt: Die juniper.device Module unterstützen das Angeben von verbindungs- und authentifizierungsbezogenen Optionen für lokale und persistente vars: Verbindungen im Abschnitt eines Spiels, der unter Definieren von Authentifizierungsparametern in den vars: Abschnitt für lokale und persistente Verbindungen beschrieben wird.

In diesem Dokument werden die verschiedenen Aspekte der Authentifizierung bei der Verwendung der Juniper Networks-Module zur Verwaltung von Junos-Geräten erläutert.

Grundlegendes zu den Standardwerten für Module von Juniper Networks

Sie können die Verbindungs- und Authentifizierungsparameter für Module, die Junos-Geräte verwalten, explizit definieren. Wenn Sie keinen Parameter definieren, verwendet das Modul in einigen Fällen einen Standardwert. In Tabelle 1 sind die Standardwerte und die Variablenrangfolge für allgemeine Verbindungsparameter für Module in der juniper.device Auflistung aufgeführt. Informationen zu den Argumenten, die für die einzelnen Module akzeptiert werden, finden Sie in der API-Referenzdokumentation für dieses Modul.

Tabelle 1: Standardwerte und Variablenrangfolge für Verbindungsparameter

Parametername

Parameter-Aliasnamen

Beschreibung

Standardwert und Variablenrangfolge

host

hostname

ip

Hostname oder IP-Adresse des Remote-Geräts, mit dem die Verbindung hergestellt werden soll.

{{ inventory_hostname }}

passwd

password

Das Kennwort oder die Passphrase des SSH-Schlüssels des Benutzers, die für die Authentifizierung beim verwalteten Gerät verwendet wird.

  1. ANSIBLE_NET_PASSWORD Umgebungsvariable

  2. Angegebener Wert für -k oder --ask-pass Befehlszeilenoption

ssh_config

Pfad zu einer SSH-Clientkonfigurationsdatei.

Wenn Sie diesen Parameter weglassen, verwenden die Module die SSH-Konfigurationsdatei am Standardspeicherort, sofern vorhanden.

~/.ssh/config

ssh_private_key_file

ssh_keyfile

Pfad zu der privaten SSH-Schlüsseldatei, die für die Authentifizierung beim Remotegerät verwendet wird.

Wenn Sie den Pfad nicht explizit angeben und kein Standardwert gefunden wird, verwendet das Modul die SSH-Datei mit dem privaten Schlüssel, die in der SSH-Konfiguration des Benutzers angegeben ist, oder den betriebssystemspezifischen Standardwert.

  1. ANSIBLE_NET_SSH_KEYFILE Umgebungsvariable

  2. Angegebener Wert für --private-key oder --key-file Befehlszeilenoption

  3. nichts

user

username

Benutzername, der für die Authentifizierung beim verwalteten Knoten verwendet wird.

  1. ANSIBLE_NET_USERNAME Umgebungsvariable

  2. remote_user wie Ansible definiert

  3. USER Umgebungsvariable

Beim Ausführen von Juniper Networks-Modulen wird das host Argument immer für eine Verbindung benötigt. Sie müssen den Host jedoch nicht explizit angeben, da er standardmäßig auf {{ inventory_hostname }}.

Sie können Juniper Networks-Module mit jedem Benutzerkonto ausführen, das Zugriff auf das verwaltete Junos-Gerät hat. Wenn Sie die Module ausführen, werden die Zugriffsberechtigungen des Junos OS-Benutzerkontos erzwungen, und die für das Junos OS-Benutzerkonto konfigurierte Klasse bestimmt die Berechtigungen. Wenn Sie keinen Benutzer angeben, wird der Benutzer gemäß dem in Tabelle 1 beschriebenen user Algorithmus festgelegt. In der Ansible-Dokumentation finden Sie die Rangfolge für die Definition remote_uservon , die auf verschiedene Arten definiert werden kann, darunter:

  • -u oder --user Befehlszeilenoption

  • ANSIBLE_REMOTE_USER Umgebungsvariable

  • remote_user Konfigurationseinstellung

So definieren Sie Authentifizierungsparameter in den Variablen: Abschnitt für lokale und persistente Verbindungen

Sie können Verbindungs- und Authentifizierungsparameter für die juniper.device Module im Abschnitt des vars: Spiels definieren. Sie können sie nicht nur wie gewohnt über andere Variablen definieren, z. B. in der SSH-Konfigurationsdatei, in der Ansible-Bestandsdatei, als Befehlszeilenargumente oder als Modulargumente. Der vars: Abschnitt ermöglicht es Ihnen, allgemeine Verbindungsparameter an einem einzigen Ort zu definieren, über den alle Module im Spiel eine Verbindung zu einem Host herstellen können. Darüber hinaus erfordern bestimmte Ansible-Verbindungen die Verwendung des vars: Abschnitts beim Definieren der Parameter innerhalb des Spiels, wie hier beschrieben.

Die juniper.device Module unterstützen die folgenden Ansible-Verbindungstypen:

  • lokale Verbindungen, die durch die Verwendung von connection: local

  • persistente Verbindungen, die mithilfe von connection: juniper.device.pyez

Sowohl für lokale als auch für persistente Verbindungen führt Ansible Module lokal auf dem Steuerungsknoten aus. Wenn Sie verwenden connection: local, stellt Ansible für jede Aufgabe im Spiel, für die eine Verbindung erforderlich ist, eine separate Verbindung zum Host her. Im Gegensatz dazu stellt Ansible bei der Verwendung connection: juniper.device.pyezvon eine einzelne, dauerhafte Verbindung zu einem Host her, die über die Ausführung aller Aufgaben im Spiel bestehen bleibt.

Sie verwenden für persistente Verbindungen dieselben Verbindungs- und Authentifizierungsparameter wie für lokale Verbindungen, und die Standardparameterwerte, die unter Grundlegendes zu den Standardwerten für Juniper Networks-Module erläutert werden, gelten für beide Arten von Verbindungen. Für lokale Verbindungen können Sie die Verbindungs- und Authentifizierungsparameter entweder im vars: Abschnitt oder als Modulargumente definieren. Wenn Sie die Parameter an beiden Stellen definieren, haben die Modulargumente Vorrang. Wenn Sie jedoch Parameter innerhalb eines Spiels für persistente Verbindungen definieren, müssen Sie die Parameter im vars: Abschnitt definieren. Bei persistenten Verbindungen gibt es nur eine einzige Verbindung für alle Aufgaben, und daher müssen Sie die Parameter global definieren, damit sie für alle Aufgaben in diesem Spiel gelten.

Das folgende Playbook führt zwei juniper.device Module auf jedem Host in der Bestandslistengruppe aus. Die Wiedergabe definiert die Ansible-Verbindung als juniper.device.pyez, wodurch eine Verbindung zu jedem Host hergestellt wird, die über die Ausführung aller Aufgaben im Spiel bestehen bleibt. Die Authentifizierungsparameter für die persistente Verbindung werden im Abschnitt des Spiels vars: definiert. Die user Werte und passwd verweisen auf Variablen, die in der vault-vars.yaml Tresordatei definiert sind.

Authentifizieren des Benutzers mithilfe von SSH-Schlüsseln

Mit den Modulen von Juniper Networks können Sie SSH-Schlüssel juniper.device verwenden, um eine Verbindung zu einem Junos-Gerät oder zu einem Konsolenserver herzustellen, der mit dem Gerät verbunden ist. Um einen Benutzer mithilfe von SSH-Schlüsseln zu authentifizieren, generieren Sie zuerst die Schlüssel auf dem Ansible-Steuerungsknoten und konfigurieren Sie dann die Schlüssel auf dem Gerät, mit dem das Modul verbunden wird, entweder auf dem verwalteten Junos-Gerät oder auf dem mit dem Junos-Gerät verbundenen Konsolenserver.

Generieren und Konfigurieren der SSH-Schlüssel

So generieren Sie SSH-Schlüssel auf dem Ansible-Steuerungsknoten und konfigurieren den öffentlichen Schlüssel auf dem Remote-Gerät:

  1. Generieren Sie auf dem Ansible-Steuerungsknoten das öffentliche und private SSH-Schlüsselpaar für den gewünschten Benutzer, und geben Sie alle erforderlichen Optionen an, z. B.:
  2. (Optional) Laden Sie den Schlüssel in den nativen SSH-Schlüsselagenten. Zum Beispiel:
  3. Konfigurieren Sie den öffentlichen Schlüssel auf jedem Gerät, mit dem die Module verbunden werden sollen, z. B. Junos-Geräte oder ein Konsolenserver, der mit einem Junos-Gerät verbunden ist.

    Die einfachste Methode, den öffentlichen Schlüssel auf einem Junos-Gerät zu konfigurieren, besteht darin, eine Datei, die den öffentlichen Schlüssel enthält, unter das entsprechende Benutzerkonto zu laden.

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

Verwenden von SSH-Schlüsseln in Ansible-Playbooks

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. Die Module von Juniper Networks fragen automatisch die SSH-Standardkonfigurationsdatei unter ~/.ssh/config ab, sofern vorhanden. Sie können auch die ssh_config Option definieren, eine andere Konfigurationsdatei anzugeben. Die Module verwenden alle relevanten Einstellungen in der SSH-Konfigurationsdatei für die angegebene Verbindung, es sei denn, Sie definieren explizit Variablen, die die Einstellung außer Kraft setzen. Darüber hinaus suchen die Module automatisch nach Schlüsseln am Standardspeicherort und Schlüsseln, die aktiv in einem SSH-Schlüsselagenten geladen werden.

Um bestimmte Einstellungen für SSH-Schlüssel zu definieren, können Sie die entsprechenden Argumente in Ihr Ansible-Playbook aufnehmen. Definieren Sie die Argumente an der Stelle, die für Ihren Satz von Modulen und die Ansible-Verbindung geeignet ist, z. B. im vars: Abschnitt für Wiedere, die die juniper.device Module mit einer persistenten Verbindung verwenden. Welche Argumente eingeschlossen werden sollen, hängt vom Speicherort des Schlüssels ab, davon, ob der Schlüssel aktiv in einen SSH-Schlüsselagenten geladen wird, ob der Schlüssel kennwortgeschützt ist und ob die SSH-Konfigurationsdatei des Benutzers bereits Einstellungen für diesen Host definiert.

  • Um eine Verbindung zu einem Junos-Gerät über SSH-Schlüssel herzustellen, die aktiv in den nativen SSH-Schlüsselagenten geladen werden oder sich am Standardspeicherort befinden und nicht über einen Kennwortschutz verfügen, müssen Sie keine verbindungs- oder authentifizierungsbezogenen Argumente definieren, es sei denn, sie weichen von den Standardargumenten ab.

  • Um eine Verbindung zu einem Junos-Gerät über SSH-Schlüssel herzustellen, die sich nicht am Standardspeicherort befinden und nicht über einen Kennwortschutz verfügen, legen Sie das ssh_private_key_file Argument auf den Pfad der privaten SSH-Schlüsseldatei fest. Zum Beispiel:

    Alternativ können Sie den Pfad des privaten SSH-Schlüssels angeben, indem Sie ihn in der SSH-Konfigurationsdatei definieren. durch Festlegen der ANSIBLE_NET_SSH_KEYFILE Umgebungsvariablen oder durch Definieren der --private-key Befehlszeilenoption oder --key-file beim Ausführen des Playbooks.

  • Um eine Verbindung zu einem Junos-Gerät über eine kennwortgeschützte SSH-Schlüsseldatei herzustellen, was die empfohlene Methode ist, können Sie im passwd Argument auf die Passphrase der SSH-Schlüsseldatei verweisen oder das Kennwort mithilfe normaler Ansible-Variablen oder Befehlszeilenoptionen angeben.

    Es liegt in der Verantwortung des Benutzers, die Passphrase für die SSH-Schlüsseldatei auf sichere Weise zu erhalten, die für seine Umgebung geeignet ist. Es empfiehlt sich, entweder bei jedem Aufruf des Playbooks dazu aufzufordern oder die Variablen in einem verschlüsselten Tresor zu speichern, anstatt die Anmeldeinformationen in einem unverschlüsselten Format zu speichern. Sie können z. B. das Playbook mit der --ask-pass Befehlszeilenoption ausführen und die Passphrase für die SSH-Schlüsseldatei angeben, wenn Sie dazu aufgefordert werden, wie hier gezeigt:

    Weitere Informationen zur Verwendung einer Eingabeaufforderung oder einer verschlüsselten Tresordatei für die Passphrase des SSH-Schlüssels finden Sie unter Authentifizieren des Benutzers mithilfe eines Playbooks oder einer Befehlszeilen-Kennworteingabeaufforderung und Authentifizieren des Benutzers mithilfe einer mit einem Ansible-Tresor verschlüsselten Datei.

Anweisungen zur Verwendung von SSH-Schlüsseln zum Herstellen einer Verbindung mit einem Konsolenserver finden Sie unter Authentifizierung über einen Konsolenserver.

Authentifizieren des Benutzers mithilfe eines Playbooks oder einer Eingabeaufforderung für das Befehlszeilenkennwort

Um einen Benutzer zu authentifizieren, der Ansible-Module ausführt, können Sie beim Ausführen des Playbooks zur Eingabe der Anmeldeinformationen des Benutzers auffordern. Sie können z. B. eine interaktive Eingabeaufforderung im Playbook definieren, oder Sie können das Playbook mit der -k Befehlszeilenoption or --ask-pass ausführen, um zur Eingabe des Kennworts aufzufordern. Wenn SSH-Schlüssel verwendet werden, wird das angegebene Passwort als Passphrase zum Entsperren des privaten SSH-Schlüssels verwendet. Wenn die kennwortbasierte Authentifizierung verwendet wird, wird das angegebene Kennwort als Gerätekennwort verwendet.

So definieren Sie eine interaktive Eingabeaufforderung im Playbook, um das Kennwort oder die Passphrase des SSH-Schlüssels des Benutzers zu erhalten:

  1. Fügen Sie Code darunter vars_prompt: ein, der zur Eingabe des Kennworts oder der SSH-Schlüsselpassphrase (und optional des Benutzernamens) des Benutzers auffordert und den Wert in einer Variablen speichert.
  2. Legen Sie die user Parameter und passwd so fest, dass jeder auf seine jeweilige Variable verweist.
  3. Geben Sie die auszuführenden Aufgaben an.
  4. Führen Sie das Playbook aus, das zur Eingabe des Benutzernamens und des Kennworts auffordert und das Kennwort nicht in der Befehlszeile wiedergibt, da die Variable auf private: yesfestgelegt ist.

Alternativ können Sie ein Playbook mit der -k Befehlszeilenoption oder --ask-pass ausführen, um zur Eingabe des Kennworts oder der Passphrase aufzufordern. Betrachten Sie das folgende Playbook, in dem der Standardbenutzername verwendet wird:

Führen Sie das Playbook aus, und fügen Sie die -k Befehlszeilenoption or --ask-pass ein, die zur Eingabe des Kennworts auffordert und das Kennwort nicht in der Befehlszeile wiedergibt.

Authentifizieren des Benutzers mithilfe einer durch Ansible Vault verschlüsselten Datei

Sie können einen Ansible-Tresor erstellen, in dem gespeicherte Kennwörter und andere sensible Verbindungs- und Authentifizierungswerte sicher in einer durch den Tresor verschlüsselten Datendatei gespeichert werden. Ihr Playbook kann dann an der für Ihren Satz von Modulen und den Ansible-Verbindungstyp geeigneten Position auf diese Variablen verweisen, z. B. im Abschnitt des Spiels vars: oder als Modulargumente.

So erstellen und verwenden Sie eine Ansible-Tresordatei mit den erforderlichen Variablen, einschließlich Kennwörtern:

  1. Erstellen Sie eine tresorverschlüsselte Datendatei, und geben Sie das Kennwort an, das zum Verschlüsseln, Entschlüsseln, Bearbeiten und Verwenden der Datendatei erforderlich ist.
  2. Definieren Sie die erforderlichen Variablen in der Datei und speichern Sie sie.
  3. Stellen Sie sicher, dass die Datei verschlüsselt ist.
  4. Fügen Sie im Playbook die Vault-verschlüsselte Variablendatei hinzu, und verweisen Sie auf die erforderlichen Variablen an der für Ihre Module und den Ansible-Verbindungstyp geeigneten Speicherort.
    Anmerkung:

    Wenn Sie stattdessen den Ist user und passwd die Variablen im Tresor definieren, werden diese von den Modulen automatisch übernommen, und Sie müssen sie nicht explizit im Playbook definieren.

  5. Führen Sie das Playbook mit der Option aus, die --ask-vault-pass zur Eingabe des Tresorkennworts auffordert.

Authentifizierung über einen Konsolenserver

Die Ansible-Module von Juniper Networks können über einen Konsolenserver mit Junos-Geräten verbunden werden. Für SSH-Verbindungen über einen Konsolenserver müssen Sie die Anmeldeinformationen für die Authentifizierung sowohl für den Konsolenserver als auch für das Junos-Gerät angeben. Sie können entweder ein Gerätekennwort oder eine kennwortgeschützte SSH-Schlüsseldatei für die Konsolenserver-Authentifizierung verwenden.

Um über einen Konsolenserver eine Verbindung zu einem Junos-Gerät herzustellen, müssen Sie die folgenden Parameter in Ihrem Playbook angeben, wenn kein Standardwert vorhanden oder der Standardwert nicht geeignet ist:

  • host– Hostname oder IP-Adresse des Konsolenservers

  • user und passwd—Anmeldedaten für Junos OS

  • cs_user– Benutzername des Konsolenservers

  • cs_passwd– Für die Authentifizierung beim Konsolenserver ist ein Gerätekennwort oder eine Passphrase für die SSH-Schlüsseldatei erforderlich.

Im folgenden Beispiel werden die Anmeldeinformationen für den Junos OS-Benutzer und den Konsolenserverbenutzer in einer Ansible-Tresordatei definiert. Auf die Tresorvariablen wird dann im Playbook verwiesen. In diesem Fall ist das cs_passwd Argument die Passphrase für den SSH-Schlüssel, der ssh_private_key_file im Argument angegeben ist.