AUF DIESER SEITE
Herstellen einer Verbindung mit Junos-Geräten über Ansible
ZUSAMMENFASSUNG Mit den Ansible-Modulen von Juniper Networks können Sie über SSH-, Telnet- oder serielle Konsolenverbindungen eine Verbindung zu Junos-Geräten herstellen.
Juniper Networks bietet Ansible-Module, mit denen Sie Junos-Geräte verwalten können. Die Module von Juniper Networks werden über die juniper.device
Sammlung verteilt. Die Module können über verschiedene Protokolle und Ansible-Verbindungen, die in diesem Dokument beschrieben werden, mit Junos-Geräten verbunden werden.
Übersicht über Verbindungsmethoden
Mit den juniper.device
Erfassungsmodulen können Sie über SSH, Telnet oder eine serielle Konsolenverbindung eine Verbindung zu einem Junos-Gerät herstellen. Sie müssen eine serielle Konsolenverbindung verwenden, wenn Ihr Terminal oder Laptop physisch mit dem CONSOLE-Port eines Junos-Geräts verbunden ist. Sie können SSH oder Telnet verwenden, um eine Verbindung mit der Verwaltungsschnittstelle des Geräts oder mit einem Konsolenserver herzustellen, der direkt mit dem CONSOLE-Port des Geräts verbunden ist.
Neue oder auf Null gesetzte Geräte mit werkseitigen Standardkonfigurationen erfordern den Zugriff über eine Konsolenverbindung. So können Sie Ansible 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 indem Sie Telnet oder SSH über einen Konsolenserver verwenden, der direkt mit dem Gerät verbunden ist.
Standardmäßig verwenden die juniper.device
Module SSH, um eine Verbindung zu einem Gerät herzustellen. Um Telnet oder eine serielle Konsolenverbindung zu verwenden, setzen Sie den mode
Parameter auf den entsprechenden Wert. Um Telnet mit einem Gerät zu verbinden, legen Sie das mode
Argument auf "telnet"
. Um eine serielle Konsolenverbindung zu verwenden, legen Sie das mode
Argument auf "serial"
. Tabelle 1 fasst die Verbindungsmodi, ihre Standardwerte für bestimmte Parameter und alle erforderlichen Junos OS-Konfigurationen zusammen. Die juniper.device
Module unterstützen alle Verbindungsmodi ab ihrer ersten Veröffentlichung.
Verbindungsmodus |
Wert des |
Standardport |
Erforderliche Junos OS-Konfiguration |
---|---|---|---|
NETCONF über SSH (Standard) |
– |
830 |
[edit system services] netconf { ssh; } |
Serielle Konsolenverbindung |
|
/dev/ttyUSB0 |
– |
SSH über einen Konsolenserver |
– |
22 |
– |
Telnet zu Junos-Gerät |
|
23 |
[edit system services] telnet; |
Telnet über einen Konsolenserver |
|
23 |
– |
Bevor Sie über SSH mit telnet oder NETCONF auf die Verwaltungsschnittstelle zugreifen können, müssen Sie zunächst den entsprechenden Dienst auf der [edit system services]
Hierarchieebene aktivieren. Da Telnet Klartextkennwörter verwendet (und somit eine potenzielle Sicherheitslücke darstellt), empfehlen wir die Verwendung von SSH.
Wenn Sie die juniper.device
Module zum Verwalten eines Junos-Geräts ausführen, muss das Remote-Gerät in der Lage sein, den Ansible-Benutzer mit Anmeldeinformationen zu authentifizieren, die für das jeweilige Protokoll geeignet sind. Weitere Informationen finden Sie unter Authentifizieren von Benutzern, die Ansible-Module auf Junos-Geräten ausführen.
Die juniper.device
Module unterstützen verschiedene Ansible-Verbindungen bei der Verbindung mit Junos-Geräten, darunter lokale (pro Task) und persistente (pro Spiel) Verbindungen. Die Ansible-Verbindung bestimmt, ob Ansible für jede Aufgabe in der Wiedergabe eine separate Verbindung zum Host herstellt oder ob eine einzelne Verbindung zu einem Host hergestellt wird, die über alle Aufgaben in der Wiedergabe bestehen bleibt. Weitere Informationen zum Angeben der Ansible-Verbindung finden Sie unter Grundlegendes zu lokalen und persistenten Ansible-Verbindungen.
Grundlegendes zu lokalen und persistenten Ansible-Verbindungen
Die Ansible-Module von Juniper Networks benötigen Python auf Junos-Geräten nicht, da sie Junos PyEZ und die Junos XML-API über NETCONF als Schnittstelle mit dem Gerät verwenden. Um Vorgänge auf Junos-Geräten auszuführen, müssen Sie daher Module lokal auf dem Ansible-Steuerungsknoten ausführen, auf dem Python installiert ist. Sie können die Module lokal ausführen, indem Sie sie in die Playbook-Wiedergabe aufnehmen connection: local
. Wenn Sie verwenden connection: local
, stellt Ansible für jede Aufgabe im Spiel, die Operationen auf dem Host ausführt, eine separate Verbindung zum Host her.
Die juniper.device
Sammlungsmodule unterstützen connection: juniper.device.pyez
auch das Herstellen einer persistenten Verbindung zu einem Host. Wenn Sie eine persistente Verbindung verwenden, führt Ansible die Module weiterhin lokal auf dem Steuerungsknoten aus, baut jedoch nur eine einzige Verbindung zu jedem Host auf und unterhält diese, die über die Ausführung aller Aufgaben im Spiel bestehen bleibt. Das Herstellen einer dauerhaften Verbindung zu einem Host kann für die Ausführung mehrerer Aufgaben effizienter sein als das Herstellen einer separaten Verbindung zum Host für jede Aufgabe im Spiel.
Tabelle 2 fasst die Ansible-Verbindungen und die sie unterstützenden Inhaltssätze zusammen.
Ansible-Verbindung |
Beschreibung |
Unterstützung von Inhaltsgruppen |
---|---|---|
|
Führen Sie die Module lokal auf dem Ansible-Steuerungsknoten aus, aber stellen Sie für jede Aufgabe im Spiel, die Operationen auf dem Host ausführt, eine separate Verbindung zu einem Host her. |
|
|
Führen Sie die Module lokal auf dem Ansible-Steuerungsknoten aus, aber stellen Sie eine dauerhafte Verbindung zu einem Host her, der über die Ausführung aller Aufgaben im Spiel bestehen bleibt. |
|
Wenn Sie verwenden connection: local
, stellt Ansible für jedes Modul eine separate Verbindung zu einem Host her, d. h., Sie können modulspezifische Verbindungs- und Authentifizierungsparameter in der Argumentliste des Moduls definieren. Im Gegensatz dazu bleibt bei der Verwendung connection: juniper.device.pyez
von die Verbindung über alle Aufgaben im Spiel hinweg bestehen, sodass Sie die Verbindungs- und Authentifizierungsparameter global für alle Module definieren müssen. Sie können die Parameter in der vars:
Sektion eines Spiels definieren und sie auch auf andere Weise bereitstellen, z. B. in einer SSH-Konfigurationsdatei oder in der Ansible-Inventardatei. Weitere Informationen finden Sie unter Authentifizieren von Benutzern, die Ansible-Module auf Junos-Geräten ausführen.
Das folgende Playbook stellt eine dauerhafte Verbindung zu jedem Host her, der für alle Aufgaben im Spiel verwendet wird. Die Anmeldeinformationen des Benutzers, die in einer Ansible-Tresordatei gespeichert sind, werden im Abschnitt des vars:
Spiels definiert.
--- - name: Get Device Information hosts: dc1 connection: juniper.device.pyez gather_facts: no vars: host: "{{ inventory_hostname }}" user: "{{ admin_username }}" passwd: "{{ admin_password }}" vars_files: - vault-vars.yaml tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Get hardware inventory juniper.device.command: commands: "show chassis hardware" dest_dir: "{{ playbook_dir }}"
Herstellen einer Verbindung mit einem Gerät über SSH
Die Ansible-Module von Juniper Networks unterstützen die Verwendung von SSH für die Verbindung mit einem Junos-Gerät. Sie können eine NETCONF-Sitzung über SSH auf der Verwaltungsschnittstelle des Geräts einrichten 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 mit standardmäßigen SSH-Authentifizierungsmechanismen zu authentifizieren, wie unter Authentifizieren von Benutzern, die Ansible-Module auf Junos-Geräten ausführen, beschrieben. Um eine NETCONF-Sitzung über SSH einzurichten, müssen Sie außerdem die unter Einrichten von Ansible für Junos OS verwaltete Knoten beschriebenen Anforderungen erfüllen.
Die Module von Juniper Networks fragen automatisch die SSH-Standardkonfigurationsdatei unter ~/.ssh/config ab, sofern vorhanden. Sie können auch den ssh_config
Parameter angeben, um eine andere Konfigurationsdatei anzugeben.
Wenn SSH verwendet wird, um eine Verbindung zu einem Junos-Gerät oder zu einem mit dem Gerät verbundenen Konsolenserver herzustellen, versuchen die Module zunächst, eine SSH-Authentifizierung mit öffentlichem Schlüssel 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. Es wird jedoch nicht empfohlen, private SSH-Schlüssel mit leeren Passphrasen zu verwenden.
Das folgende Playbook richtet eine NETCONF-Sitzung über SSH mit einem Junos-Gerät ein und ruft die Gerätefakten ab. Das Playbook verwendet SSH-Schlüssel am Standardspeicherort.
--- - name: Get Device Facts hosts: dc1 connection: local gather_facts: no tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print version ansible.builtin.debug: var: junos.version
Mit den Ansible-Modulen von Juniper Networks können Sie auch über eine SSH-Verbindung zu einem Konsolenserver eine Verbindung zu einem Junos-Gerät herstellen. In diesem Fall müssen Sie die Anmeldedaten sowohl für das Junos-Gerät als auch für den Konsolenserver angeben. Sie verwenden die user
Parameter und passwd
zum Angeben der Anmeldedaten für Junos OS und cs_user
die Parameter und cs_passwd
zum Angeben der Anmeldeinformationen für den Konsolenserver. Wenn SSH-Schlüssel verwendet werden, cs_passwd
ist die Passphrase für den privaten Schlüssel.
Im folgenden Playbook werden Sie aufgefordert, die Anmeldeinformationen des Benutzers für den Konsolenserver und das Junos-Gerät einzugeben. Das Modul authentifiziert sich beim Konsolenserver und dann beim Junos-Gerät. Wenn die Authentifizierung erfolgreich war, ruft das Playbook die Gerätefakten vom verwalteten Knoten ab und druckt die Junos OS-Version.
--- - name: Get Device Facts hosts: dc1_con connection: local gather_facts: no vars_prompt: - name: "CS_USER" prompt: "Console server username" private: no - name: "CS_PASSWORD" prompt: "Console server password" private: yes - name: "JUNOS_USER" prompt: "Junos OS username" private: no - name: "JUNOS_PASSWORD" prompt: "Junos OS password" private: yes vars: cs_user: "{{ CS_USER }}" cs_passwd: "{{ CS_PASSWORD }}" user: "{{ JUNOS_USER }}" passwd: "{{ JUNOS_PASSWORD }}" tasks: - name: "Retrieve facts from Junos devices" juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print version ansible.builtin.debug: var: junos.version
Die Module von Juniper Networks fragen automatisch die SSH-Standard-Clientkonfigurationsdatei unter ~/.ssh/config ab, sofern vorhanden. Sie können eine andere SSH-Konfigurationsdatei verwenden, indem Sie den ssh_config
Parameter einschließen und den Speicherort der Konfigurationsdatei angeben. Zum Beispiel:
--- - name: Get Device Facts hosts: dc1 connection: local gather_facts: no vars: ssh_config: "/home/admin/.ssh/config_dc" tasks: - name: "Retrieve facts from Junos devices" juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print version ansible.builtin.debug: var: junos.version
Herstellen einer Telnet-Verbindung mit einem Gerät
Mit den Modulen von Juniper Networks können Sie über Telnet eine Verbindung zu einem Junos-Gerät herstellen, das einen unverschlüsselten Zugriff auf das Netzwerkgerät bietet. Sie können eine Telnet-Verbindung mit der Verwaltungsschnittstelle des Geräts oder mit einem Konsolenserver herstellen, der direkt mit dem CONSOLE-Port des Geräts verbunden ist. 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 eine Telnet-Verbindung zur Verwaltungsschnittstelle herzustellen, müssen Sie den Telnet-Dienst auf der [edit system services]
Hierarchieebene auf allen Geräten konfigurieren, die Zugriff auf die Schnittstelle benötigen.
Um eine Telnet-Verbindung zum Remote-Gerät herzustellen, legen Sie den mode
Parameter auf "telnet"
fest und fügen Sie optional den port
Parameter hinzu, um einen Port anzugeben. Wenn Sie den port
Parameter festlegenmode
, "telnet"
aber weglassen, wird der Standardwert für port
23 verwendet. Definieren Sie mode
für persistente Verbindungen und port
unter dem vars:
Abschnitt. Für lokale Verbindungen können Sie die Parameter entweder unter dem vars:
Abschnitt oder als Modulargumente definieren.
Das folgende Playbook führt eine Verbindung zu einem Junos-Gerät über Port 7016, ruft die Gerätefakten ab und speichert sie in einer Datei. Das Playbook fordert zur Eingabe des Benutzernamens und des Kennworts auf.
--- - name: Get Device Facts hosts: dc1 connection: local gather_facts: no vars_prompt: - name: "DEVICE_USERNAME" prompt: "Device username" private: no - name: "DEVICE_PASSWORD" prompt: "Device password" private: yes vars: user: "{{ DEVICE_USERNAME }}" passwd: "{{ DEVICE_PASSWORD }}" mode: "telnet" port: "7016" tasks: - name: Retrieve facts from Junos devices juniper.device.facts: savedir: "{{ playbook_dir }}" - name: Print version ansible.builtin.debug: var: junos.version
Herstellen einer Verbindung mit einem Gerät über eine serielle Konsolenverbindung
Mit den Modulen von Juniper Networks können Sie über eine serielle Konsolenverbindung eine Verbindung zu einem Junos-Gerät herstellen. Dies ist nützlich, wenn Sie zunächst ein neues oder auf Null gesetztes Gerät konfigurieren müssen, das noch nicht für den Remote-Zugriff konfiguriert ist. Um diese Verbindungsmethode verwenden zu können, muss Ihr Terminal oder Laptop physisch über den CONSOLE-Port mit dem Junos-Gerät verbunden sein. Ausführliche Anweisungen zum Herstellen einer Verbindung mit dem CONSOLE-Port eines Junos-Geräts finden Sie in der Hardwaredokumentation für Ihr Gerät.
Um eine Verbindung zu einem Junos-Gerät über eine serielle Konsolenverbindung herzustellen, legen Sie den mode
Parameter des Moduls auf "serial"
fest, und fügen Sie optional den port
Parameter zum Angeben eines Ports hinzu. Wenn Sie den Parameter festlegenmode
, "serial"
aber weglassenport
, ist /dev/ttyUSB0
der Standardwert für port
. Definieren Sie mode
für persistente Verbindungen und port
unter dem vars:
Abschnitt. Für lokale Verbindungen können Sie die Parameter entweder unter dem vars:
Abschnitt oder als Modulargumente definieren.
Das folgende Playbook stellt über den CONSOLE-Port eine Verbindung zu einem Junos-Gerät her, lädt dann eine Erstkonfiguration und führt einen Commit aus. Das Playbook fordert zur Eingabe des Benutzernamens und des Kennworts auf.
--- - name: Load Initial Configuration hosts: dc1 connection: local gather_facts: no vars_prompt: - name: "DEVICE_USERNAME" prompt: "Device username" private: no - name: "DEVICE_PASSWORD" prompt: "Device password" private: yes tasks: - name: Load initial configuration and commit juniper.device.config: user: "{{ DEVICE_USERNAME }}" passwd: "{{ DEVICE_PASSWORD }}" mode: "serial" load: "merge" src: "configs/junos.conf" register: response - name: Print the response ansible.builtin.debug: var: response