Hur ansluter jag Ansible på Windows från Ubuntu?

By rik

Jag ska nu visa dig hur du kopplar upp en Windows-server från Ansible som körs på Ubuntu.

För att följa instruktionerna nedan behöver du ha Python 3.x och Ansible installerade på båda systemen. Du kan använda länkarna nedan om du behöver hjälp med installationen.

Hur man installerar och konfigurerar Ansible på Ubuntu?

Hur installerar jag Ansible på Windows?

Nedan följer information om de servrar jag använder:

  • Ansible Controller – 192.168.0.108
  • Windows Server – 192.168.0.102

Steg 1: Skapa en Ansible Windows-användare

Skapa en ny användare för Ansible Windows-anslutningskonfigurationen.

  • Öppna Datorhantering i Windows och navigera till Lokala användare och grupper.
  • Högerklicka på Användare och välj att skapa en ny användare.
  • Markera kryssrutan ”Lösenordet upphör aldrig” och klicka på ”Skapa”.
  • Bland de tillgängliga grupperna, högerklicka på Administratörsgruppen och välj ”Egenskaper”.
  • Klicka på ”Lägg till” och skriv in användarnamnet i fältet ”Ange objektnamn”.
  • Klicka på ”Kontrollera namn” och därefter ”OK”.

Nu är en Ansible-användare konfigurerad på din Windows-maskin.

Steg 2: Konfigurera bibliotek och WinRM

På din Ansible-kontroller, uppdatera och installera följande bibliotek:

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

WinRM (Windows Remote Management) gör det möjligt att fjärrstyra Windows-system. Vi kommer att installera python3-winrm, en Python-klient för att ansluta till Windows-system.

      [email protected]:~$ sudo apt-get install python3-winrm
      Reading package lists... Done
      Building dependency tree
      Reading state information... Done
      The following packages were automatically installed and are no longer required:
      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
      Use 'sudo apt autoremove' to remove them.
      The following additional packages will be installed:
      python3-kerberos python3-ntlm-auth python3-requests-kerberos python3-requests-ntlm python3-xmltodict
      The following NEW packages will be installed:
      python3-kerberos python3-ntlm-auth python3-requests-kerberos python3-requests-ntlm python3-winrm python3-xmltodict
      0 upgraded, 6 newly installed, 0 to remove and 231 not upgraded.
      Need to get 84.8 kB of archives.
      After this operation, 442 kB of additional disk space will be used.
      Do you want to continue? [Y/n] Y
      Get:1 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-kerberos amd64 1.1.14-1build1 [16.8 kB]
      Get:2 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-ntlm-auth all 1.1.0-1 [19.6 kB]
      Get:3 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-requests-kerberos all 0.11.0-2 [10.1 kB]
      Get:4 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-requests-ntlm all 1.1.0-1 [6,004 B]
      Get:5 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-xmltodict all 0.11.0-2 [10.6 kB]
      Get:6 http://old-releases.ubuntu.com/ubuntu cosmic/universe amd64 python3-winrm all 0.3.0-2 [21.7 kB]
      Fetched 84.8 kB in 1s (70.3 kB/s)
      Selecting previously unselected package python3-kerberos.
      (Reading database ... 244430 files and directories currently installed.)
      Preparing to unpack .../0-python3-kerberos_1.1.14-1build1_amd64.deb ...
      Unpacking python3-kerberos (1.1.14-1build1) ...
      Selecting previously unselected package python3-ntlm-auth.
      Selecting previously unselected package python3-xmltodict.
      Preparing to unpack .../4-python3-xmltodict_0.11.0-2_all.deb ...
      Unpacking python3-xmltodict (0.11.0-2) ...
      Selecting previously unselected package python3-winrm.
      Preparing to unpack .../5-python3-winrm_0.3.0-2_all.deb ...
      Unpacking python3-winrm (0.3.0-2) ...
      Setting up python3-kerberos (1.1.14-1build1) ...
      Setting up python3-winrm (0.3.0-2) ...
  

Steg 3: Uppdatera Ansible Inventory-filen

Jag ska nu redigera Ansible-filen hosts och lägga till IP-adressen till Windows-systemet så att Ansible vet vilket Windows-system det ska ansluta till.

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

Steg 4: Uppdatera Ansible Group Variables

Skapa en mapp för att lagra variabler som krävs för anslutningen till Windows-systemet.

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

Skapa en fil, win.yaml och fyll i den med användaruppgifterna du skapade i steg ett, samt andra variabler som behövs för anslutning till Windows-systemet.

      [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:Usersadminvista.comAppDataLocalProgramsPythonPython37python
    

Steg 5: Konfigurera Windows-servrar för hantering

Öppna Windows PowerShell och uppgradera den. Du behöver ha Powershell 3.0 och .NET Framework 4.0 installerat på Windows-maskinen.

      PS C:WINDOWSsystem32> $url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1"
      PS C:WINDOWSsystem32> $file = "$env:tempUpgrade-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
  

För att konfigurera WinRM på ett Windows-system finns ett fjärrkonfigurationsskript tillgängligt av Ansible. Kör det i PowerShell.

      PS C:WINDOWSsystem32> $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
      PS C:WINDOWSsystem32> $file = "$env:tempConfigureRemotingForAnsible.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
  

Aktivera HTTP-trafik för WinRM.

      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
  

Ställ in autentisering till ”basic” i WinRM.

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

Steg 6: Testa anslutningen till Windows Server

Nu är alla konfigurationssteg på maskinen avklarade. Gå till din Ansible controller-maskin och pinga Windows-servern med Ansible-modulen win_ping.

      [email protected]:~$ ansible win -m win_ping
      192.168.0.102 | SUCCESS => {
      
      "changed": false,
      "ping": "pong"
      }
  

Om du får ett ”SUCCESS”-meddelande har anslutningen lyckats. Windows-systemet är nu redo att administreras på distans med Ansible från Ubuntu.