In diesem Blog-Beitrag werden die Konfigurationsschritte beschrieben, die zur Einrichtung von Ansible zwecks Verwaltung der Windows-VMs notwendig sind. Eine detaillierte Beschreibung der allgemeinen Ansible Konfiguration finden Sie in diesen Beitrag: Ansible Offline Installation auf CentOS. Was Ansible ist und welche Einsatzszenarien es gibt, erfahren Sie hier: Ansible Verwendungsszenarien
Installation des Ansible-Controllers
Die Punkte eins und zwei entsprechen der Basis-Installation von Ansible. Alle weiteren Schritte beziehen sich auf die Einrichtung sowie die Konfiguration der Authentifizierungsmethoden für WinRM (Windows Remote Management). Die Kommunikation zwischen Ansible-Controller und dazugehörigen Windows-Clients findet ausschließlich auf Basis des WinRM-Dienstes statt.
Die hier aufgeführten Konfigurationsschritte setzen eine Internet-Anbindung des Ansible-Controllers voraus.
1. Fügen Sie ein weiteres Repository Extra Packages for Enterprise Linux hinzu.
sudo yum install epel-release
2. Führen Sie die Installation der Kern-Komponenten von Ansible aus. Dieses Paket ist vollständig, wenn Sie vorhaben, nur die Linux-/Unix-Systeme zu verwalten.
sudo yum install
3. Installation von pywinrm.
pywinrm wird verwendet, um über WinRM mit Windows-Servern zu kommunizieren. pywinrm bringt auch die Basis-Authentifizierungsmethode mit und unterstützt Basis (Benutzername/Passwort)-, Zertifikat- und NTLM-Authentifizierung.
sudo pip3 install pywinrm
4. Optionale Abhängigkeiten. In meinem Fall kommt nur der Punkt 4.3 zum Einsatz.
4.1 Um die Kerberos-Authentifizierung verwenden zu können, benötigen Sie folgende optionalen Abhängigkeiten
sudo yum install gcc python3-devel krb5-devel krb5-workstation
Eine detaillierte Auflistung finden Sie unten in diesem Betrag.
4.2.
pip3 install pywinrm[kerberos]
4.3 Der Einsatz von CredSSP-Authentifizierung setzt folgende Abhängigkeiten voraus:
sudo yum install gcc python3-devel openssl-devel
Eine detaillierte Auflistung finden Sie ebenso unten in diesem Betrag.
4.4.
pip3 install pywinrm[credssp]
Die Installation der notwendigen Komponenten auf dem Ansible Controller ist hiermit abgeschlossen.
CredSSP
In meiner Test-Umgebung werden CredSSP-Authentifizierung (Credential Security Support Provider-Protokoll) verwenden. CredSSP ist eine leicht zu konfigurierende und sichere Authentifizierungsmethode. Der Username und das Password werden erst dann übertragen, wenn eine sichere Verbindung zwischen dem Controller und dem Client aufgebaut ist. CredSSP kann sowohl für lokale als auch für Domänenkonten verwendet werden.
Ansible unterstützt fünf unterschiedlichen Authentifizierungstypen:
Type | Lokale Konten | AD Konton | Delegierung von Anmeldeinformationen |
HTTP-Verschlüsselung |
Basic | Ja | Nein | Nein | Nein |
Zertifikat | Ja | Nein | Nein | Nein |
Kerberos | Nein | Ja | Ja | Ja |
NTLM | Ja | Ja | Ja | |
CredSSP | Ja | Ja | Ja | Ja |
Quelle: https://docs.ansible.com
Anpassungen auf den Windows VMs
Die Community Edition von Ansible unterstütz alle existierende Windows-Betriebssysteme ab Version 2008. Dabei werden zwei Komponenten vorausgesetzt:
- Powershell, Version 3.0 oder höher
- NET Framework Version 4.0 oder höher
Die kommerzielle Ansible Version (Ansible Tower) unterstützt nur die Windows Server Betriebssysteme ab Version 2012
Die Ansible- Komponenten kommunizieren über die TCP-Ports 5985 (http) und 5986 (https). Es wird auch ein Service-Account benötigt, mit dem sich der Ansible Controller auf den Windows-Zielhosts anmeldet. Eine besondere Berechtigung für den Service-Account auf Domain-Ebene ist nicht notwendig, auf dem Ziel-System selbst ist aber die lokale administrative Berechtigung nötig.
Außerdem wird auf dem Zielsystem eine Anpassung der WinRM-Konfiguration durchgeführt. Dies geschieht durch das vom Hersteller mitgelieferte PowerShell Skript: ConfigureRemotingForAnsible.ps1.
Konfiguration
In meinem Fall wird die Konfiguration auf einem Server 2019 durchgeführt.
1. Normalerweise ist die WinRM-Komponente bereits installiert und richtig konfiguriert.
Die Konfiguration können Sie mit der folgenden Befehlskette anzeigen lassen:
winrm enumerate winrm/config/listener
Wenn in Ihrem Fall der HTTPS Listener nicht angezeigt wird, konfigurieren Sie diesen wie folgt:
winrm quickconfig -transport:https
Falls in Ihrem Betriebssystem mehrere Zertifikate installiert sind, z.B. ein selbsigniertes und eines von der internen CA, können Sie wie folgt ein passendes Zertifikat einbinden:
winrm delete winrm/config/Listener?Address=*+Transport=HTTPS
HTTPS Listener mit einem bestimmen Zertifikat einbinden:
winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="<;DNS-Name>"; CertificateThumbprint="<Thumprint Ihres Zerfitikates>"}'
2. Folgende Befehlskette zeigt alle aktuell genutzte Authentifizierungsmethoden:
winrm get winrm/config/Service
3. Ansible Konfigurationsdatei herunterladen
wget https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1
4. ConfigureRemotingForAnsible ausführen:
.\ConfigureRemotingForAnsible.ps1 -EnableCredSSP -DisableBasicAuth -Verbose
Das Skript beinhaltet folgende Konfigurationsparameter:
- -Verbose – zeigt eine ausführliche Skript-Ausgabe
- -CertValidityDays – gibt an wie lange dieses Zertifikat ab heute gültig ist.
- -ForceNewSSLCert – wenn das System SysPreped war und ein neues SSL-Zertifikat für den WinRM-Listener erzwungen werden muss.
- -EnableCredSSP – aktiviert CredSSP Authentifizierung
- -DisableBasicAuth - deaktiviert Basis Authentifizierung.
- -SkipNetworkProfileCheck - überspringt die Prüfung des Netzwerkprofiles
Bei Bedarf können Sie den http Listener entfernen:
winrm delete winrm/config/Listener?Address=*+Transport=HTTP
5. Starten Sie den WinRM Dienst neu
Restart-Service WinRM
Die Konfiguration auf dem Ziel-System ist hiermit abgeschlossen.
Konfiguration überprüfen
Mit wenigen Schritten können Sie die oberen Einstellungen überprüfen. Die darauffolgenden Schritte werden auf dem Ansible Controller durchgeführt.
1. Öffnen Sie die hosts-Datei:
sudo nano /etc/ansible/hosts
2. Passen Sie die hosts-Datei entsprechend Ihrer Konfiguration an und speichern Sie die Änderungen:
Beispiel aus meiner Test-Umgebung:
[test-vm]
w2019-ans
[test-vm:vars]
ansible_user="Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!"
ansible_password=Password!
ansible_connection=winrm
ansible_winrm_transport=credssp
ansible_winrm_server_cert_validation=ignore
In einem weiteren Blog-Beitrag werde ich die Erstellung der Host-Datei detailliert beschreiben.
3. Testen Sie die Hosts-Datei und die vollständige Konfiguration mit win_ping. Alle Windows-Module finden Sie hier.
ansible test-vm -m win_ping
Die Konfiguration war erfolgreich.
Lassen Sie sich von der Meldung [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details nicht irritieren. Sie erscheint, weil der Variablenname einen Bindestrich ("-") enthält.
Offline Installation
Eine Offline-Installation der Kern-Komponenten ist in einem vorherigen Beitrag bereit detailliert beschrieben. Die Installation unterscheidet sich grundsätzlich nur in einem Punkt: Alle notwendigen Pakete müssen zusammengesucht und herunterladen werden.
Offline Installation: sudo pip3 install pywinrm
Folgende Dateien lädt der Installer herunter, wenn der eine Internet-Anbindung hat:
pywinrm-0.4.1.tar.gz
xmltodict-0.12.0-py2.py3-none-any.whl
requests_ntlm-1.1.0-py2.py3-none-any.whl
ntlm_auth-1.5.0-py2.py3-none-any.whl
1. Laden Sie die oberen Dateien herunter und kopieren Sie diese auf Ihren Ansible-Controller
2. Entpacken Sie die Archiv-Datei wie folgt:
tar -xvf pywinrm-0.4.1.tar.gz
3. Starten Sie die Installation:
python3 setup.py install
4. Installieren Sie die restlichen .whl-Dateien:
sudo pip3 install xmltodict-0.12.0-py2.py3-none-any.whl requests_ntlm-1.1.0-py2.py3-none-any.whl ntlm_auth-1.5.0-py2.py3-none-any.whl
Liste der zu installierenden Pakete für Kerberos-Authentifizierung
sudo yum install gcc python3-devel krb5-devel krb5-workstation
- krb5-devel x86_64 1.18.2-5.el8
- krb5-workstation x86_64 1.18.2-5.el8
- python36-devel x86_64 3.6.8-2.module_el8.3.0+562+e162826a
Installing dependencies:
- keyutils-libs-devel x86_64 1.5.10-6.el8
- libcom_err-devel x86_64 1.45.6-1.el8
- libkadm5 x86_64 1.18.2-5.el8
- libselinux-devel x86_64 2.9-4.el8_3
- libsepol-devel x86_64 2.9-1.el8
- libverto-devel x86_64 0.3.0-5.el8
- pcre2-devel x86_64 10.32-2.el8
- pcre2-utf16 x86_64 10.32-2.el8
- pcre2-utf32 x86_64 10.32-2.el8
- platform-python-devel x86_64 3.6.8-31.el8
- python-rpm-macros noarch 3-39.el8
- python-srpm-macros noarch 3-39.el8
- python3-rpm-generators noarch 5-6.el8
- python3-rpm-macros noarch 3-39. el8
Liste der zu installierenden Pakete für CredSSP-Authentifizierung
sudo yum install gcc python3-devel openssl-devel
- openssl-devel x86_64 1:1.1.1g-15.el8_3
- python36-devel x86_64 3.6.8-2.module_el8.3.0+562+e162826a
Installing dependencies:
- keyutils-libs-devel x86_64 1.5.10-6.el8
- krb5-devel x86_64 1.18.2-5.el8
- libcom_err-devel x86_64 1.45.6-1. el8
- libkadm5 x86_64 1.18.2-5.el8
- libselinux-devel x86_64 2.9-4.el8_3
- libsepol-devel x86_64 2.9-1.el8
- libverto-devel x86_64 0.3.0-5.el8
- pcre2-devel x86_64 10.32-2.el8
- pcre2-utf16 x86_64 10.32-2.el8
- pcre2-utf32 x86_64 10.32-2. el8
- platform-python-devel x86_64 3.6.8-31. el8
- python-rpm-macros noarch 3-39.el8
- python-srpm-macros noarch 3-39.el8
- python3-rpm-generators noarch 5-6.el8
- python3-rpm-macros noarch 3-39.el8
- zlib-devel x86_64 1.2.11-16.2.el8_3