Inhaltsverzeichnis

Kategorien

Category cover

Automatisierung
18 posts

Category cover

Infrastruktur
4 posts

Category cover

Persönliche Sicherheit
3 posts

Category cover

Security
3 posts

Category cover

Bücher
2 posts

Category cover

CISO
2 posts

Category cover

mein Leben
1 posts

Einmalige Befehle auf Cisco IOS mit Ansible

Andrea Dainese
25 September 2023
Post cover

In diesem Artikel präsentieren wir ein erstes Beispiel zur Ausführung von Massenbefehlen mit Ansible auf Cisco IOS-Geräten. Wir werden das vorkonfigurierte Labor “Cisco Legacy Core-Access topology” verwenden, das im Repository DevNetOps course material verfügbar ist:

Lab topology

Zunächst müssen wir ein Inventar erstellen. In diesem Stadium werden wir nicht tiefer in das Thema eintauchen, sondern einfach eine Datei erstellen, die alle im Labor vorhandenen Geräte und die erforderlichen Variablen wie folgt enthält:

  • ansible_host: die IP-Adresse des Geräts, da wir kein DNS-System für die automatische Auflösung haben;
  • ansible_user: der Benutzer (admin), um auf das Gerät zuzugreifen;
  • ansible_ssh_pass: das Passwort (cisco), um auf das Gerät zuzugreifen;
  • ansible_connection: der Verbindungstyp, den Ansible zum Verbinden verwenden soll;
  • ansible_network_os: der Gerätetyp.

Die Datei inventory.yml sieht dann so aus:

all:
  hosts:
    sw1.example.com:
    ansible_host: 169.254.1.101
    ansible_user: admin
    ansible_ssh_pass: cisco
    ansible_connection: ansible.netcommon.network_cli
    ansible_network_os: cisco.ios.ios

Da wir mit Geräten arbeiten, die nur veraltete Algorithmen unterstützen, müssen wir diese explizit aktivieren. Wir werden dies tun, indem wir an einer SSH-Client-Konfigurationsdatei namens ansible_libssh.conf arbeiten:

KexAlgorithms diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
HostKeyAlgorithms ssh-rsa,ssh-dss

Host *
    ServerAliveInterval 5
    ServerAliveCountMax 3

In der Theorie wäre es ausreichend, nur die hinzuzufügenden Algorithmen anzugeben, indem man das Symbol + voranstellt. In meinen Tests könnte diese Syntax jedoch Probleme verursachen. Daher empfehle ich, alle Algorithmen zu definieren, die wir in unseren Tests benötigen werden.

Die Datei ansible_libssh.conf wird von der Datei ansible.cfg referenziert, die die Einstellungen der Bibliothek libssh definiert:

[persistent_connection]
ssh_type = libssh

[libssh_connection]
host_key_checking = false
look_for_keys = false
config_file = ../ansible_libssh_conf

Anschließend starten wir die Knoten und überprüfen, ob sie erreichbar sind:

ansible all -i inventory.yml -m ping

Der obige Befehl führt ein sogenanntes Ad-hoc-Kommando aus. Mit anderen Worten, wir haben den Ping-Befehl auf allen Geräten ausgeführt, die im Inventar konfiguriert sind.

Ebenso können wir entscheiden, einen Befehl auf allen Geräten auszuführen:

ansible all -i inventory.yml -m cisco.ios.ios_command -a "commands='show version'"

Wir können die Anzahl der parallelen Prozesse, die das Playbook ausführen, anpassen. Diese Anzahl hängt von den verfügbaren Ressourcen ab, insbesondere der Anzahl der CPUs, ist jedoch nicht darauf beschränkt. Die Ausführung eines Playbooks beinhaltet “Leerlaufzeiten”, d. h. Zeit, in der die Ansible-Maschine auf die Ausgabe des Geräts wartet. Für Cisco-Geräte berücksichtigen Sie die Zeit, die vom Eingeben des Befehls show running-config bis zum tatsächlichen Anzeigen der Ausgabe auf dem Bildschirm vergeht. Daher können wir die Anzahl der Forks sicher verdoppeln, ohne die Ansible-Steuerung zu überlasten:

[defaults]
forks = 8