Однажды задался целью вот моя основная система — это 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
. Как это сделать у меня рассмотрено в ранее опубликованной заметке.
Шаг №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
системе:
Пример №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
это появившееся окно на рабочем столе:
Работает. Для себя нужно больше разобрать различных примеров. Т.к. я в повседневности, как на работе так и дома использую в качестве основной системы это 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.