Включаем WinRM на Windows-хосте для дальнейшего управления через Ansible
В руки мне попалась удивительная организация. При наличии более 100 рабочих мест в ней до сих пор используется рабочая группа с именем, как ни парадоксально, WORKGROUP. При этом на сервере развернут корневой домен Active Directory, но рабочие места в него не введены и доступ к сетевым ресурсам соответственно осуществляется с локальными реквизитами. Больше учетных записей богу учетных записей!
Мне честно лениво продолжать управлять сетью такими инструментами. Поднимать доверенные отношения между FreeIPA и Active Directory тоже... И задач по управлению Windows-клиентами, которые не может решить Ansible, я не вижу... А потом спрос на DevOps-ов сейчас хороший, так что самое время создать себе трудностей для их героического решения.
Включаем службу WinRM на машине с Windows 10
Ansible управляется windows-клиентами через службу удаленного управления Windows - WinRM (Windows Remote Managment). По умолчанию она включена на серверных версиях ОС, а для включения на клиентах нужно её дополнительно включить.
Сделать это можно с помощью команды
winrm quickconfig
в моем случае сразу не заработало, получил сообщение, что нельзя чтобы сетевые соединения относились к общедоступным на машине на которой настраивается winrm.
C:\Users\kpa39l>winrm quickconfig Служба WinRM не настроена на прием запросов на компьютере. Необходимо внести следующие изменения: Запустите службу WinRM. Задайте для типа службы WinRM значение отложенного автозапуска. Выполнить изменения [y/n]? y Служба WinRM была обновлена для приема запросов. Тип службы WinRM успешно изменен. Служба WinRM запущена. WSManFault Message ProviderFault WSManFault Message = Исключение брандмауэра WinRM не будет работать, поскольку одно из сетевых подключений, установленных для этого компьютера, является общим. Измените тип сетевого подключения либо на доменное, либо на частное и повторите попытку. Код ошибки: -2144108183 0x80338169 Исключение брандмауэра WinRM не будет работать, поскольку одно из сетевых подключений, установленных для этого компьютера, является общим. Измените тип сетевого подключения либо на доменное, либо на частное и повторите попытку. C:\Users\kpa39l>

Можно было бы конечно вручную добавить исключения для портов 5985 и 5986 для Брэндмауэра Windows (что firewall (англ.), что brandmauer (нем.) означает горящая стена или сетевой фильтр, я предпочитаю русскоязычные термины использовать). Но быстрее вбить две команды в консоль и выполнить требования безопасности. Чтобы вывести список сетевых подключений с указанием их типа используем команду PowerShell:
PS C:\Users\kpa39l> Get-NetConnectionProfile Name : Неопознанная сеть InterfaceAlias : Ethernet InterfaceIndex : 10 NetworkCategory : Public IPv4Connectivity : Internet IPv6Connectivity : NoTraffic
В строке NetworkCategory как раз и указывается тип профиля сети. Может быть Public, Private и DomainAuthenticated. Как понятно из сообщения нужно его изменить на Privat для моего случая. В домен-то я машины не включал. И теперь по индекс сетевого интерфейса InterfaceIndex, меняю тип сети на Private:
Set-NetConnectionProfile -InterfaceIndex 10 -NetworkCategory Private
При успешном исполнении команда никакой вывод не генерирует.
И теперь можно еще раз запустить команду включения WinRM, для разнообразия используя командлет PowerShell:
PS C:\Users\kpa39l> Enable-PSRemoting –Force Служба WinRM уже настроена для приема запросов на этом компьютере. Служба WinRM обновлена для удаленного управления. Исключение брандмауэра WinRM включено. Параметр LocalAccountTokenFilterPolicy настроен так, чтобы предоставлять административные права локальным пользователям удаленным образом.
Теперь и можно проверить настройки WinRM на настроенной машине:
PS C:\Users\kpa39l> winrm get winrm/config Config MaxEnvelopeSizekb = 500 MaxTimeoutms = 60000 MaxBatchItems = 32000 MaxProviderRequests = 4294967295 Client NetworkDelayms = 5000 URLPrefix = wsman AllowUnencrypted = false Auth Basic = true Digest = true Kerberos = true Negotiate = true Certificate = true CredSSP = false DefaultPorts HTTP = 5985 HTTPS = 5986 TrustedHosts 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 = false Auth Basic = false Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardeningLevel = Relaxed DefaultPorts HTTP = 5985 HTTPS = 5986 IPv4Filter = * IPv6Filter = * EnableCompatibilityHttpListener = false EnableCompatibilityHttpsListener = false CertificateThumbprint AllowRemoteAccess = true Winrs AllowRemoteShellAccess = true IdleTimeout = 7200000 MaxConcurrentUsers = 2147483647 MaxShellRunTime = 2147483647 MaxProcessesPerShell = 2147483647 MaxMemoryPerShellMB = 2147483647 MaxShellsPerUser = 2147483647 PS C:\Users\kpa39l>
Проверять, что нужный порт открыт и к машине можно использовать PowerShell аналог ping:
Test-NetConnection -ComputerName ITHEAD -Port 5985
А теперь доступны ли службы WinRM.
PS C:\Users\kpa39l> Test-WsMan 192.168.150.80 wsmid : http://schemas.dmtf.org/wbem/wsman/identity`/1/wsmanidentity.xsd ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd ProductVendor : Microsoft Corporation ProductVersion : OS: 0.0.0 SP: 0.0 Stack: 3.0
И теперь наконец-то подключаемся к управлению с помощью команды Enter-PSSession. А вот и нет, потому что права на доступ отсутствуют. Помнишь, что у нас-то домена нет? %) А как их настроить я напишу дальше.