Взаимодействие с доменными Windows
системами через Ansible
используя в повседневности Ubuntu 18.04 Server amd64
(или Desktop
) вот такую задачу я себе поставил. Просто хотел добиться вроде как есть такое работоспособное решение у людей, но я все на своем примере свел воедино и получил еще один плюс в пользу своих наработок по взаимодействию из привычной системы с контролируемыми системами. А ранее я блоге я показал, как без использования домена управлять.
Тестовая конфигурация:
Windows Server 2012 R2 - AD (polygon.local),DNS,DHCP
Ubuntu — Ansible Center on Ubuntu 18.04 Server amd64
Ниже пошаговые действия по воплощения задачи в реальность:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
ekzorchik@srv-bionic:~$ hg clone --insecure https://172.35.35.8/hg/dproject ekzorchik@srv-bionic:~$ sudo ./dproject/default ekzorchik@srv-bionic:~$ uname -a Linux srv-bionic 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux ekzorchik@srv-bionic:~$ sudo apt-get install -y software-properties-common ekzorchik@srv-bionic:~$ sudo apt-add-repository ppa:ansible/ansible -y ekzorchik@srv-bionic:~$ apt-cache show ansible | grep Version Version: 2.7.1-1ppa~bionic Version: 2.5.1+dfsg-1 ekzorchik@srv-bionic:~$ sudo apt-get install ansible python3-pip python-pip -y |
Устанавливаю пакет для использования модуля winrm:
1 2 3 4 5 6 7 |
ekzorchik@srv-bionic:~$ sudo pip install http://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm ekzorchik@srv-bionic:~$ sudo find / -name "winrm" /usr/local/lib/python3.6/dist-packages/winrm /usr/local/lib/python2.7/dist-packages/winrm |
Теперь чтобы подключить к Server 2012 R2 Standard (Role: DC)
нужно:
1 2 3 4 5 6 7 8 9 10 11 |
PS C:\Windows\system32> set-executionpolicy remotesigned Execution Policy Change The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy? [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y |
После запускаю скрипт который и создает правила в Firewall: Allow 5986/TCP
Скачал его к себе в домашнее хранилище и выкладываю здесь ConfigureRemotingForAnsible
1 2 3 |
PS C:\Windows\system32> cd c:\1 PS C:\1> .\ConfigureRemotingForAnsible.ps1 |
После чего пробую подключиться с Ubuntu 18.04
к доменной системе:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
ekzorchik@srv-bionic:~$ sudo mkdir -p /etc/ansible/windows/group_vars ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/hosts [windows] 10.90.90.2 ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/group_vars/windows.yml file: group_vars/windows.yml ansible_user: ekzorchik@POLYGON.LOCAL ansible_password: 712mbddr@ ansible_winrm_transport: basic #Если получила эта системе kerberos билет #ansible_winrm_transport: kerberos ansible_connection: winrm ansible_winrm_server_cert_validation: ignore validate_certs: false ekzorchik@srv-bionic:~$ sudo ansible windows -i /etc/ansible/windows/hosts -m win_ping 10.90.90.2 | SUCCESS => { "changed": false, "ping": "pong" } |
Отлично, но это Basic
аутентификация.
Теперь для себя я хочу разобрать чтобы при подключении с Ubuntu
системы на Windows
систему происходила аутентификация на основе kerberos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
ekzorchik@srv-bionic:~$ sudo apt-get install python-dev libkrb5-dev krb5-user -y Default Kerberos version 5 realm: ничего не указываю и нажимаю OK ekzorchik@srv-bionic:~$ sudo pip install http://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm ekzorchik@srv-bionic:~$ sudo pip install pyOpenSSL --upgrade ekzorchik@srv-bionic:~$ sudo pip install kerberos ekzorchik@srv-bionic:~$ sudo pip install "pywinrm[kerberos]" ekzorchik@srv-bionic:~$ sudo pip install "pywinrm[credssp]" ekzorchik@srv-bionic:~$ sudo pip install "requests-credssp" "requests-kerberos" ekzorchik@srv-bionic:~$ sudo cp /etc/krb5.conf /etc/krb5.conf.backup ekzorchik@srv-bionic:~$ sudo rm /etc/krb5.conf ekzorchik@srv-bionic:~$ sudo nano /etc/krb5.conf [libdefaults] default_realm = POLYGON.LOCAL [realms] POLYGON.LOCAL = { kdc = srv-dc1.polygon.local admin_server = srv-dc1.polygon.local } [domain_realm] .polygon.local = POLYGON.LOCAL polygon.local = POLYGON.LOCAL Проверяю, могу ли я получить kerberos билет: ekzorchik@srv-bionic:~$ kinit ekzorchik@POLYGON.LOCAL Password for ekzorchik@POLYGON.LOCAL: ekzorchik@srv-bionic:~$ klist Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: ekzorchik@POLYGON.LOCAL Valid starting Expires Service principal 11/06/2018 20:44:24 11/07/2018 06:44:24 krbtgt/POLYGON.LOCAL@POLYGON.LOCAL renew until 11/07/2018 20:44:20 ekzorchik@srv-bionic:~$ kdestroy ekzorchik@srv-bionic:~$ sudo apt-get install libxml2-utils -y ekzorchik@srv-bionic:~$ curl --header "Content-Type: application/soap+xml;charset=UTF-8" --header "WSMANIDENTIFY: unauthenticated" http://10.90.90.2:5985/wsman --data '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:wsmid="http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd"><s:Header/><s:Body><wsmid:Identify/></s:Body></s:Envelope>' | xmllint --format - % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 694 100 460 100 234 224k 114k --:--:-- --:--:-- --:--:-- 338k <?xml version="1.0"?> <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:Header/> <s:Body> <wsmid:IdentifyResponse xmlns:wsmid="http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd"> <wsmid:ProtocolVersion>http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd</wsmid:ProtocolVersion> <wsmid:ProductVendor>Microsoft Corporation</wsmid:ProductVendor> <wsmid:ProductVersion>OS: 0.0.0 SP: 0.0 Stack: 3.0</wsmid:ProductVersion> </wsmid:IdentifyResponse> </s:Body> </s:Envelope> ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/hosts [windows] 10.90.90.2 ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/group_vars/windows.yml file: group_vars/windows.yml ansible_user: ekzorchik@POLYGON.LOCAL ansible_password: 712mbddr@ ansible_winrm_transport: kerberos ansible_port: 5985 ansible_connection: winrm ansible_winrm_server_cert_validation: ignore validate_certs: false |
Проверяю подключение к Windows
хосту используя Kerberos:
1 2 3 4 5 6 7 8 9 |
ekzorchik@srv-bionic:~$ sudo ansible windows -i /etc/ansible/windows/hosts -m win_ping 10.90.90.2 | SUCCESS => { "changed": false, "ping": "pong" } |
Отлично, работает.
Пробую различные примеры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
ekzorchik@srv-bionic:~$ sudo ansible windows -i /etc/ansible/windows/hosts -m win_command -a "cmd.exe /c mkdir c:\a\b\c\d\e\f" 10.90.90.2 | CHANGED | rc=0 >> ekzorchik@srv-bionic:~$ sudo ansible windows -i /etc/ansible/windows/hosts -m win_command -a "cmd.exe /c tree c:\a" 10.90.90.2 | CHANGED | rc=0 >> Folder PATH listing Volume serial number is F24F-EB96 C:\A ����b ����c ����d ����e ����f |
Все работает.
Теперь я могу составить PowerShell
скрипт и используя данную заметку раскатать его с Ubuntu
системы по всему домену. Что мне нравится, это то что я использую Ubuntu 18.04 Desktop/Server
для управления инфраструктурой Windows
.
На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.