Взаимодействие с доменными 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

Ниже пошаговые действия по воплощения задачи в реальность:

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:

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) нужно:

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

PS C:\Windows\system32> cd c:\1

PS C:\1> .\ConfigureRemotingForAnsible.ps1

После чего пробую подключиться с Ubuntu 18.04 к доменной системе:

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:

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:

ekzorchik@srv-bionic:~$ sudo ansible windows -i /etc/ansible/windows/hosts -m win_ping

10.90.90.2 | SUCCESS => {

"changed": false,

"ping": "pong"

}

Отлично, работает.

Пробую различные примеры:

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.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru