Ansible für Windows – Installation und Konfiguration

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

101 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

102 sudo yum install ansible

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

104 sudo yum install gcc python3 devel krb5 devel krb5 workstation

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.

103 sudo pip3 install pywinrm

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

104 sudo yum install gcc python3 devel krb5 devel krb5 workstation

Eine detaillierte Auflistung finden Sie ebenso unten in diesem Betrag.

4.4.

pip3 install pywinrm[credssp]

105 sudo yum install gcc python3 devel openssl devel

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

 

201 Ansible WinRM

 

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

202 winrm enumerate winrm configlistener

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>"}'

203 winrm delete winrm config Listener Address Transport HTTPS

2. Folgende Befehlskette zeigt alle aktuell genutzte Authentifizierungsmethoden:

winrm get winrm/config/Service

203 winrm get winrm config Service

3. Ansible Konfigurationsdatei herunterladen

wget https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1

204 wget ConfigureRemotingForAnsible

4. ConfigureRemotingForAnsible ausführen:

.\ConfigureRemotingForAnsible.ps1 -EnableCredSSP -DisableBasicAuth -Verbose

205 ConfigureRemotingForAnsible

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

206 ConfigureRemotingForAnsible

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       

 

 

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.