Chciałbym zaprezentować, jak zintegrować serwer Windows z Ansible, które działa na systemie Ubuntu.
Aby zrealizować przedstawione niżej instrukcje, niezbędne jest zainstalowanie Pythona w wersji 3.x oraz Ansible na obu systemach. W razie potrzeby, pomocne mogą okazać się poniższe materiały:
Poradnik instalacji i konfiguracji Ansible na Ubuntu
Instrukcja instalacji Ansible w systemie Windows
Prezentuję szczegóły dotyczące wykorzystywanych serwerów:
- Kontroler Ansible – adres IP: 192.168.0.108
- Serwer Windows – adres IP: 192.168.0.102
Etap 1: Utworzenie użytkownika Ansible w Windows
Należy utworzyć nowego użytkownika, który będzie wykorzystywany do nawiązania połączenia z Windows przez Ansible.
- Uruchom „Zarządzanie komputerem” w systemie Windows, a następnie przejdź do sekcji „Użytkownicy i grupy lokalne”.
- Kliknij prawym przyciskiem myszy na „Użytkownicy” i utwórz nowego użytkownika.
- Zaznacz opcję „Hasło nigdy nie wygasa”, a następnie kliknij „Utwórz”.
- W sekcji „Grupy” kliknij prawym przyciskiem myszy na „Administratorzy” i wybierz „Właściwości”.
- Kliknij „Dodaj”, a następnie w polu nazwy obiektów wpisz „ansible”.
- Potwierdź przyciskiem „Sprawdź nazwy”, a potem „OK”.
Użytkownik „ansible” na serwerze Windows jest gotowy do użycia.
Etap 2: Konfiguracja bibliotek i WinRM
Na kontrolerze Ansible wykonaj aktualizację i zainstaluj wymagane biblioteki:
[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) to protokół, który umożliwia wykonywanie zadań administracyjnych na zdalnych komputerach z systemem Windows. Zainstalujemy pakiet `python3-winrm`, klienta Pythona, który umożliwi połączenie z systemem Windows.
[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) ...
Etap 3: Aktualizacja pliku inwentarza Ansible
Zmodyfikuj plik `hosts` w Ansible, dodając adres IP serwera Windows. Dzięki temu Ansible będzie wiedział, z którym systemem ma się połączyć.
[email protected]:~$ sudo gedit /etc/ansible/hosts [win] 192.168.0.102
Etap 4: Konfiguracja zmiennych grupowych Ansible
Utwórz katalog na zmienne, które umożliwią połączenie z systemem Windows.
[email protected]:~$ mkdir /etc/ansible/group_vars [email protected]:~$ sudo chmod -R 777 /etc/ansible/
Następnie utwórz plik `win.yaml` i dodaj dane użytkownika, którego utworzyliśmy w pierwszym kroku, oraz inne zmienne potrzebne do połączenia z systemem Windows.
[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:Usersnewsblog.plAppDataLocalProgramsPythonPython37python
Etap 5: Przygotowanie serwera Windows do zarządzania
Uruchom program PowerShell w systemie Windows i zaktualizuj go. Wymagane są Powershell w wersji 3.0 lub nowszej oraz .NET Framework 4.0 lub nowszy.
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
Aby skonfigurować WinRM w systemie Windows do współpracy z Ansible, Ansible udostępnia skrypt konfiguracyjny. Uruchom ten skrypt w 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
Ustaw WinRM, aby akceptował ruch HTTP.
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
Włącz uwierzytelnianie podstawowe w 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
Etap 6: Testowanie połączenia z serwerem Windows
Po wykonaniu wszystkich kroków, przejdź do komputera z kontrolerem Ansible i przetestuj połączenie z serwerem Windows za pomocą modułu `win_ping`.
[email protected]:~$ ansible win -m win_ping 192.168.0.102 | SUCCESS => { "changed": false, "ping": "pong" }
Komunikat o pomyślnym połączeniu oznacza, że konfiguracja przebiegła poprawnie. Serwer Windows jest teraz gotowy do zdalnej administracji za pomocą Ansible uruchomionego na Ubuntu.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.