Однажды задался целью вот моя основная система — это Ubuntu LTS релизы, начинал с 12.04 и уже на 18.04. Администрируя инфраструктуру часто приходится сталкиваться с различными системами, что-то под Wine запускаю, что-то под Virtualbox, подключаюсь как через SSH и т. д. И вот задался целью все-таки добить шаги посредством которых я смогу посредством инструмента ansible взаимодействовать с Windows системами.

Для себя выделил интересные этапы взаимодействия

  • если Windows система не в домене
  • если Windows система в домене
ekzorchik@srv-bionic:~$ apt-cache show ansible | grep Version

Version: 2.5.1+dfsg-1

ekzorchik@srv-bionic:~$ sudo apt-get install ansible -y

А если добавить репозитарий Ansible то версия из него более новая:

ekzorchik@srv-bionic:~$ sudo apt-get install -y software-properties-common

ekzorchik@srv-bionic:~$ sudo apt-add-repository ppa:ansible/ansible

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

ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/hosts

[windows]

172.33.33.17 ansible_user=ekzorchik ansible_password=712mbddr@ ansible_connection=winrm ansible_winrm_server_cert_validation=ignore

Предварительные действия которые нужно выполнить на Windows 7 Pro x64 SP1

Шаг №1: Изменить тип активной сети

Пуск — Панель управления — Центр управления сетями и общим доступом, чтобы активная расположение сети было не «Общественная сеть», а либо «Домашняя», либо «Сеть предприятия». Делается это если в данной оснастке щелкнуть чуть ниже «Просмотр активных сетей» на «Общественная сеть» и изменить на «Домашняя сеть»:

Изменяю "Общественная сеть" на "Домашняя сеть"

или через консоль командной строки:

C:\Windows\system32>net start winrm

Служба "Служба удаленного управления Windows (WS-Management)" запускается.

Служба "Служба удаленного управления Windows (WS-Management)" успешно запущена.

C:\Windows\system32>sc config winrm start= auto

[SC] ChangeServiceConfig: успех

C:\Windows\system32>winrm quickconfig

Служба WinRM не настроена на прием запросов на компьютере.

Необходимо внести следующие изменения:

Задайте для типа службы WinRM значение отложенного автозапуска.

Настройте параметр LocalAccountTokenFilterPolicy, чтобы предоставлять административные права локальным пользователям удаленным образом.

Выполнить изменения [y/n]? y

Служба WinRM была обновлена для приема запросов.

Тип службы WinRM успешно изменен.

Параметр LocalAccountTokenFilterPolicy настроен так, чтобы предоставлять административные права локальным пользователям удаленным образом.

Служба WinRM не настроена на разрешение удаленного управления компьютером.

Необходимо внести следующие изменения:

Создайте прослушиватель WinRM на HTTP://* для приема запросов WS-Man на любом из IP-адресов этого компьютера.

Разрешите исключение брандмауэра WinRM.

Выполнить изменения [y/n]? y

Служба WinRM обновлена для удаленного управления.

Создан прослушиватель WinRM на HTTP://* для приема запросов WS-Man на любом из IP-адресов этого компьютера.

Исключение брандмауэра WinRM включено.

Отобразить текущую политику Аутентификации через winrm:

C:\Windows\system32>winrm get winrm/config/service/auth

Auth

Basic = false

Kerberos = true

Negotiate = true

Certificate = false

CredSSP = false

CbtHardeningLevel = Relaxed

Изменить политику Аутентификации через winrm:

C:\Windows\system32>winrm set winrm/config/service/auth @{Basic="true"}

Auth

Basic = true

Kerberos = true

Negotiate = true

Certificate = false

CredSSP = false

CbtHardeningLevel = Relaxed

или через PowerShell:

PS C:\Windows\system32> set-item -path wsman:\localhost\service\auth\basic -value $true

На заметку: https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html

Пробую теперь с Ubuntu 18.04 через Ansible взаимодействовать с Windows системой:

ekzorchik@srv-bionic:~$ sudo ansible windows -m win_ping

172.33.33.17 | UNREACHABLE! => {

"changed": false,

"msg": "Failed to connect to the host via ssh: ssh: connect to host 172.33.33.17 port 22: Connection timed out\r\n",

"unreachable": true

}

Так, стоп, почему подключение идет через SSH, ведь по умолчанию на Windows системах нет такого сервиса. Дело в том, что я когда создать в hosts описание для подключение к Windows я не указал логин, пароль и через какой инструмент идет взаимодействие.

Начинаю разбираться что и как.

По своим наработкам которые я когда-то делал, нужно на Windows систему установить PowerShell 3.0. Как это сделать у меня рассмотрено в ранее опубликованной заметке.

На Windows система устанавливаю PowerShell v3.0

Шаг №2: В интернете упоминается скрипт на powershell для Windows систем для настройки взаимодействия с системой Windows через winrm удаленно:

https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
PS C:\Users\ekzorchik\Downloads> .\ConfigureRemotingForAnsible.ps1

.\ConfigureRemotingForAnsible.ps1 : File C:\Users\ekzorchik\Downloads\ConfigureRemotingForAnsible.ps1 cannot be loaded

because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.mic

rosoft.com/fwlink/?LinkID=135170.

At line:1 char:1

+ .\ConfigureRemotingForAnsible.ps1

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : SecurityError: (:) [], PSSecurityException

+ FullyQualifiedErrorId : UnauthorizedAccess

PS C:\Users\ekzorchik\Downloads> 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 [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): A

PS C:\Users\ekzorchik\Downloads> .\ConfigureRemotingForAnsible.ps1

Self-signed SSL certificate generated; thumbprint: FF64E870508DCEE9CD5AD12B64473A49A38AEEE2

wxf : http://schemas.xmlsoap.org/ws/2004/09/transfer

a : http://schemas.xmlsoap.org/ws/2004/08/addressing

w : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd

lang : ru-RU

Address : http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous

ReferenceParameters : ReferenceParameters

ОК.

На Windows 7 Pro x64 SP1 брандмауер не отключал, вижу из добавленного это правило разрешающее взаимодействие с системой по входящему 5986/tcp соединению с именование правила: Allow WinRM HTTPS

И вот только после всех действий выше удаленное подключение через winrm заработало.

На заметку: Чтобы управлять с Ubuntu 18.04 Server через Ansible Windows системами нужно разрешить на них входящие подключения через TCP/5986 и создать структуру подключения вида:

ekzorchik@srv-bionic:~$ sudo apt-get install tree -y

ekzorchik@srv-bionic:~$ tree /etc/ansible/windows/

/etc/ansible/windows/

├── group_vars

│   └── windows.yml

├── hosts

└── playbooks

└── windows.yml

2 directories, 3 files

ekzorchik@srv-bionic:~$ sudo mkdir -p /etc/ansible/windows/group_vars

ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/hosts

[windows]

172.33.33.17

ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/group_vars/windows.yml

file: group_vars/windows.yml

ansible_user: ekzorchik

ansible_password: 712mbddr@

ansible_winrm_transport: basic

ansible_connection: winrm

ansible_winrm_server_cert_validation: ignore

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

172.33.33.17 | SUCCESS => {

"changed": false,

"ping": "pong"

}

Пример №1: Попробую создать каталог через Ansible управляя с Ubuntu 18.04 Server:

ekzorchik@srv-bionic:~$ sudo mkdir /etc/ansible/windows/playbooks

ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/playbooks/windows.yml

---

- name: Example

hosts: windows

tasks:

- name: Create directory structure

win_file:

path: c:\1\2\3

state: directory

Запускаю созданный playbook:

ekzorchik@srv-bionic:~$ sudo ansible-playbook -i /etc/ansible/windows/hosts /etc/ansible/windows/playbooks/windows.yml

PLAY [Example] ******************************************************************

TASK [Gathering Facts] **********************************************************

ok: [172.33.33.17]

TASK [Create directory structure] ***********************************************

changed: [172.33.33.17]

PLAY RECAP **********************************************************************

172.33.33.17 : ok=2 changed=1 unreachable=0 failed=0

Смотрю что изменило на Windows системе:

Через Ansible могу создавать каталоги в Windows

Пример №2: Можно на рабочие станции посылать сообщения:

ekzorchik@srv-bionic:~$ sudo nano /etc/ansible/windows/playbooks/msg.yml

---

- name: Example

hosts: windows

tasks:

- name: message

win_msg:

display_seconds: 60

msg: Automated upgrade about to start.
ekzorchik@srv-bionic:~$ sudo ansible-playbook -i /etc/ansible/windows/hosts /etc/ansible/windows/playbooks/msg.yml

PLAY [Example] **********************************************************************

TASK [Gathering Facts] **************************************************************

ok: [172.33.33.17]

TASK [message] **********************************************************************

changed: [172.33.33.17]

PLAY RECAP **************************************************************************

172.33.33.17 : ok=2 changed=1 unreachable=0 failed=0

Полученный результат на Windows 7 SP1 Pro x64 это появившееся окно на рабочем столе:

Через Ansible могу отправлять сообщения на Windows системы

Работает. Для себя нужно больше разобрать различных примеров. Т.к. я в повседневности, как на работе так и дома использую в качестве основной системы это Ubuntu 18.04 Desktop amd64. Пример №3:  Получить информацию об учетной записи на Windows системе.

ekzorchik@srv-bionic:~$ sudo ansible windows -i /etc/ansible/windows/hosts -m raw -a "net user ekzorchik"

172.33.33.17 | CHANGED | rc=0 >>

User name ekzorchik

Full Name

Comment

User's comment

Country code 000 (System Default)

Account active Yes

Account expires Never

Password last set 30.10.2018 21:39:08

Password expires Never

Password changeable 30.10.2018 21:39:08

Password required No

User may change password Yes

Workstations allowed All

Logon script

User profile

Home directory

Last logon 05.11.2018 22:37:33

Logon hours allowed All

Local Group Memberships *HomeUsers *������������

Global Group memberships *None

The command completed successfully.

Пример №4: Через Ansible выполнить команду PowerShell

ekzorchik@srv-bionic:~$ sudo ansible windows -i /etc/ansible/windows/hosts -m raw -a "powershell Remove-Item –path c:\1 –recurse "

172.33.33.17 | CHANGED | rc=0 >>

Подведу итоги, я практически дополнил свой арсенал средств которыми теперь владею чтобы в полной мере администрировать локальную сеть из под Ubuntu 18.04 Desktop да и вообще любого долговременного релиза оси Ubuntu которым я привержен.

На этом у меня пока все, с уважением автор блога Олло Александр aka ekzorchik.

От ekzorchik

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