Wie verbinde ich Ansible unter Windows von Ubuntu aus?

Gerne zeige ich Ihnen, wie Sie eine Verbindung von Ansible auf Ubuntu zu einem Windows-Server herstellen können.

Für die folgenden Schritte müssen sowohl auf Ihrem Ubuntu-System als auch auf dem Windows-Server Python 3.x und Ansible installiert sein. Falls Sie Unterstützung benötigen, können Sie sich an diesen Artikeln orientieren:

  • Wie installiere und konfiguriere ich Ansible unter Ubuntu?
  • Wie installiere ich Ansible unter Windows?

Nachfolgend finden Sie Details zu den beiden Servern, die in dieser Anleitung verwendet werden:

  • Ansible-Controller: 192.168.0.108
  • Windows-Server: 192.168.0.102

Schritt 1: Erstellen eines Ansible-Windows-Benutzers

Für die Einrichtung der Ansible-Windows-Verbindung wird ein neuer Benutzer benötigt. Hier die Schritte:

  • Öffnen Sie die Computerverwaltung auf Ihrem Windows-System und navigieren Sie zu „Lokale Benutzer und Gruppen“.
  • Klicken Sie mit der rechten Maustaste auf „Benutzer“ und wählen Sie „Neuer Benutzer“.
  • Setzen Sie ein Häkchen bei „Kennwort läuft nie ab“ und klicken Sie auf „Erstellen“.
  • Suchen Sie in den verfügbaren Gruppen die Gruppe „Administratoren“, klicken Sie mit der rechten Maustaste darauf und wählen Sie „Eigenschaften“.
  • Klicken Sie auf „Hinzufügen“ und geben Sie „ansible“ unter „Objektnamen“ ein.
  • Wählen Sie „Namen überprüfen“ und dann „OK“.

Damit ist der Ansible-Benutzer auf dem Windows-Rechner eingerichtet.

Schritt 2: Bibliotheken und WinRM konfigurieren

Wechseln Sie nun zu Ihrem Ansible-Controller (Ubuntu-Rechner), aktualisieren Sie das System und installieren Sie die notwendigen Bibliotheken:


    [email protected]:~$ sudo apt-get update
    [email protected]:~$ sudo apt-get install gcc python3-dev
    [email protected]:~$ sudo apt install python3-pip
  

WinRM steht für Windows Remote Management und erlaubt die Durchführung von Verwaltungsaufgaben auf Windows-Systemen aus der Ferne. Wir installieren hier den Python-Client python3-winrm, um eine Verbindung zum Windows-System herzustellen:


    [email protected]:~$ sudo apt-get install python3-winrm
    Paketlisten werden gelesen... Fertig
    Abhängigkeitsbaum wird aufgebaut.
    Statusinformationen werden eingelesen.... Fertig
    Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
    gyp libc-ares2 libhttp-parser2.8 libjs-async libjs-inherits libjs-is-typedarray libjs-node-uuid libuv1 libuv1-dev node-abbrev node-ajv
    node-ansi node-ansi-color-table node-ansi-regex node-ansi-styles node-ansistyles node-aproba node-archy node-are-we-there-yet node-async
    node-validate-npm-package-license node-wcwidth.js node-which node-which-module node-wide-align node-wrap-ansi node-wrappy node-y18n
    node-yallist node-yargs node-yargs-parser nodejs nodejs-doc
    Verwenden Sie 'sudo apt autoremove', um sie zu entfernen.
    Die folgenden zusätzlichen Pakete werden installiert:
    python3-kerberos python3-ntlm-auth python3-requests-kerberos python3-requests-ntlm python3-xmltodict
    Die folgenden NEUEN Pakete werden installiert:
    python3-kerberos python3-ntlm-auth python3-requests-kerberos python3-requests-ntlm python3-winrm python3-xmltodict
    0 aktualisiert, 6 neu installiert, 0 zu entfernen und 231 nicht aktualisiert.
    Es müssen 84,8 kB an Archiven heruntergeladen werden.
    Nach dieser Operation werden 442 kB zusätzlicher Speicherplatz belegt.
    Möchten Sie fortfahren? [J/n] J
    Holen:1 https://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-kerberos amd64 1.1.14-1build1 [16,8 kB]
    Holen:2 https://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-ntlm-auth all 1.1.0-1 [19,6 kB]
    Holen:3 https://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-requests-kerberos all 0.11.0-2 [10,1 kB]
    Holen:4 https://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-requests-ntlm all 1.1.0-1 [6.004 B]
    Holen:5 https://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-xmltodict all 0.11.0-2 [10,6 kB]
    Holen:6 https://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-winrm all 0.3.0-2 [21,7 kB]
    Heruntergeladen 84,8 kB in 1 s (70,3 kB/s)
    Wähle zuvor nicht ausgewähltes Paket python3-kerberos.
    (Lese Datenbank ... 244430 Dateien und Verzeichnisse sind derzeit installiert.)
    Vorbereiten zum Entpacken von .../0-python3-kerberos_1.1.14-1build1_amd64.deb ...
    Entpacke python3-kerberos (1.1.14-1build1) ...
    Wähle zuvor nicht ausgewähltes Paket python3-ntlm-auth.
    Wähle zuvor nicht ausgewähltes Paket python3-xmltodict.
    Vorbereiten zum Entpacken von .../4-python3-xmltodict_0.11.0-2_all.deb ...
    Entpacke python3-xmltodict (0.11.0-2) ...
    Wähle zuvor nicht ausgewähltes Paket python3-winrm.
    Vorbereiten zum Entpacken von .../5-python3-winrm_0.3.0-2_all.deb ...
    Entpacke python3-winrm (0.3.0-2) ...
    Richte python3-kerberos (1.1.14-1build1) ein ...
    Richte python3-winrm (0.3.0-2) ein ...
  

Schritt 3: Ansible-Inventar aktualisieren

Nun wird die Ansible-Hosts-Datei mit der IP-Adresse des Windows-Systems angepasst, damit Ansible weiß, mit welchem Windows-System es sich verbinden muss:


    [email protected]:~$ sudo gedit /etc/ansible/hosts

    [win]
    192.168.0.102
  

Schritt 4: Ansible-Gruppenvariablen anpassen

Erstellen Sie ein Verzeichnis für die Variablen, die zur Verbindung mit dem Windows-System erforderlich sind:


    [email protected]:~$ mkdir /etc/ansible/group_vars
    [email protected]:~$ sudo chmod -R 777 /etc/ansible/
  

Erstellen Sie die Datei win.yaml und fügen Sie die Benutzerdaten ein, die Sie in Schritt 1 erstellt haben, sowie einige weitere Variablen, die für die Verbindung mit dem Windows-System nötig sind:


    [email protected]:~$ gedit /etc/ansible/group_vars/win.yaml
  

    ---

    ansible_user: ansible

    ansible_password: ansible

    ansible_connection: winrm

    ansible_winrm_server_cert_validation: ignore

    ansible_winrm_transport: basic

    ansible_winrm_port: 5985

    ansible_python_interpreter: C:\Users\wdzwdz\AppData\Local\Programs\Python\Python37\python.exe
  

Schritt 5: Windows-Server für die Verwaltung vorbereiten

Öffnen Sie die Windows PowerShell und aktualisieren Sie sie. Auf dem Windows-Rechner müssen PowerShell 3.0 und .NET Framework 4.0 installiert sein.


      PS C:WINDOWSsystem32> $url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1"
      PS C:WINDOWSsystem32> $file = "$env:temp\Upgrade-PowerShell.ps1"
      PS C:WINDOWSsystem32> $username = "ansible"
      PS C:WINDOWSsystem32> $password = "ansible"
      PS C:WINDOWSsystem32> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
      PS C:WINDOWSsystem32> Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force
      PS C:WINDOWSsystem32> &$file -Version 5.1 -Username $username -Password $password -Verbose
    

Um WinRM auf dem Windows-System für Ansible zu konfigurieren, wird ein Remote-Konfigurationsskript von Ansible bereitgestellt. Führen Sie dieses Skript in der PowerShell aus.


      PS C:WINDOWSsystem32> $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
      PS C:WINDOWSsystem32> $file = "$env:temp\ConfigureRemotingForAnsible.ps1"
      PS C:WINDOWSsystem32> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
      PS C:WINDOWSsystem32> powershell.exe -ExecutionPolicy ByPass -File $file
      PS C:WINDOWSsystem32> winrm enumerate winrm/config/Listener

      Listener
      Address = *
      Transport = HTTP
      Port = 5985
      Hostname
      Enabled = true
      URLPrefix = wsman

      CertificateThumbprint
      ListeningOn = 127.0.0.1, 169.254.8.240, 169.254.36.9, 169.254.102.217, 169.254.215.170, 192.168.0.102, ::1, fe80::3131:c6d7:9ef5:8f0%7, fe80::51b7:9134:550d:d7aa%22, fe80::88f1:1229:e1dd:2409%16, fe80::99cf:5796:4f8e:f5c1%15, fe80::fd77:c19d:e0f2:66d9%9

      Listener
      Address = *
      Transport = HTTPS
      Port = 5986
      Hostname = DESKTOP-2L8QMI6
      Enabled = true
      URLPrefix = wsman

      CertificateThumbprint = C83B3FC8B274D0B650F0FD647DC7AC129BBE3FA0
      ListeningOn = 127.0.0.1, 169.254.8.240, 169.254.36.9, 169.254.102.217, 169.254.215.170, 192.168.0.102, ::1, fe80::3131:c6d7:9ef5:8f0%7, fe80::51b7:9134:550d:d7aa%22, fe80::88f1:1229:e1dd:2409%16, fe80::99cf:5796:4f8e:f5c1%15, fe80::fd77:c19d:e0f2:66d9%9
    

Setzen Sie WinRM so, dass HTTP-Verkehr erlaubt wird:


      PS C:WINDOWSsystem32> winrm set winrm/config/service '@{AllowUnencrypted="true"}'
      Service
      RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)

      MaxConcurrentOperations = 4294967295

      MaxConcurrentOperationsPerUser = 1500

      EnumerationTimeoutms = 240000
      MaxConnections = 300

      MaxPacketRetrievalTimeSeconds = 120
      AllowUnencrypted = true
      Auth
      Basic = true
      Kerberos = true
      Negotiate = true
      Certificate = false
      CredSSP = false

      CbtHardeningLevel = Relaxed
      DefaultPorts
      HTTP = 5985
      HTTPS = 5986
      IPv4Filter = *
      IPv6Filter = *

      EnableCompatibilityHttpListener = false

      EnableCompatibilityHttpsListener = false

      CertificateThumbprint
      AllowRemoteAccess = true
    

Stellen Sie die Authentifizierung in WinRM auf „basic“ ein:


      PS C:WINDOWSsystem32> winrm set winrm/config/service/auth '@{Basic="true"}'
      Auth
      Basic = true
      Kerberos = true
      Negotiate = true
      Certificate = false
      CredSSP = false
      CbtHardeningLevel = Relaxed
    

Schritt 6: Verbindung zum Windows-Server testen

Nun sind alle notwendigen Schritte auf dem Windows-Rechner abgeschlossen. Kehren Sie zum Ansible-Controller (Ubuntu-Rechner) zurück und testen Sie die Verbindung mit dem win_ping-Modul:


      [email protected]:~$ ansible win -m win_ping
      192.168.0.102 | SUCCESS => {

          "changed": false,
          "ping": "pong"
      }
    

Die Erfolgsmeldung zeigt, dass die Verbindung erfolgreich hergestellt wurde. Der Windows-Server ist nun bereit, von Ansible auf Ubuntu verwaltet zu werden.