Налаштування віддаленого взаємодії в PowerShell (частина 1).
Щоб забезпечити можливість віддаленого взаємодії за допомогою PowerShell, необхідно зробити деякі налаштування. Кількість цих установок залежить від операційної системи, мережевого оточення, вимог до безпеки (і ще бог знає чого). Оскільки налаштувань досить багато, я спробую розповісти про найбільш важливих з них.Ну, поїхали ...
Включення віддаленого управління
Для того, щоб керувати віддаленим комп'ютером, необхідно на цьому комп'ютері віддалене взаємодія дозволити. Виняток становить Windows Server 2012, де всі можливості віддаленого управління включені за замовчуванням.Для всіх інших операційних систем треба:
1. Стартувати службу WinRM і поставити її на автозапуск;
2. Створити прослуховувач (listener), який буде слухати запити на управління;
3. Включити на файервол правило, яке дозволяє трафік WS-Management.
Для налаштування одного комп'ютера найпростіше використовувати командлет Enable-PSRemoting.Він зробить всі необхідні дії, а також зареєструє конфігурації сесії за замовчуванням. Для того, щоб придушити запити на підтвердження, можна додати параметр -force. Консоль необхідно запустити з правами адміністратора, інакше буде видана помилка.
У доменній середовищі для настройки PS Remoting можна скористатися груповими політиками.
В розділі Computer Configuration \ Policies \ Windows Settings \ System Services включимо політику «Windows Remote Management (WS-Management)». Вона задає режим запуску для служби WinRM.
В розділі Computer Configuration \ Administrative Templates \ Windows Components \ Windows Remote Management (WinRM) \ WinRM Service включаємо політику «Allow automatic configuration of listeners», яка створює прослуховувач на порту 5985 (порт для HTTP за замовчуванням).Додатково можна вказати, з яких IP можна приймати підключення. Якщо в фільтрації по IP немає необхідності, просто ставимо знак *, що означає приймати підключення з будь-якої адреси.
Потім йдемо в розділ Computer Configuration \ Windows Settings \ Security Settings \ Windows Firewall with Advanced Security \ Inbound Rules і створюємо нове правило.Вибираємо пункт Predefined (Визначені правила) і в списку вибираємо Windows Remote Management.
Зверніть увагу, що можна вибрати два режими роботи - стандатний і сумісний. У першому випадку буде відкритий порт 5985, що використовується WinRM за замовчуванням, у другому - порт 80 (для сумісності зі старими версіями WinRM).За умовчанням вибрані обидва.
Налаштування довіри між комп'ютерами
При віддаленому підключенні в PowerShell використовується взаємна аутентифікація між комп'ютерами. Це означає, що перед встановленням з'єднання віддалена машина повинна підтвердити свою автентичність.Простіше кажучи, якщо ви підключаєтеся до комп'ютера з ім'ям SRV1, то перед установкою з'єднання він (SRV1) повинен вам довести, що це дійсно він, інакше підключення не буде встановлено.
Якщо комп'ютери є членами одного домену, або знаходяться в різних, але довіряють один одному доменах, то взаємна аутентифікація буде виконана доменними службами.Головне, щоб ім'я комп'ютера дозволялося в IP-адресу і відповідало імені комп'ютера в Active Directory.
Увага: при підключенні потрібно вказувати дійсні імена комп'ютерів, тобто так як вони вказані в Active Directory. Якщо комп'ютер входить в локальний домен, то можна вказати просто ім'я комп'ютера, наприклад SRV1.Для вказівки імені комп'ютера з іншого домену треба вказати повне доменне ім'я (FQDN) - SRV1.contoso.com. Якщо ж вказати IP-адресу, або деяке інше DNS-ім'я (наприклад CNAME алиас), то взаємна аутентифікація не спрацює.
Якщо ж один або обидва комп'ютера не входять до домен, то для взаємної аутентифікації є два варіанти додати віддалену машину в список довірених вузлів (Trusted Hosts) або використовувати SSL.
Trusted Hosts
Додавання комп'ютера в Trusted Hosts - шлях простий, але менш безпечний. Для комп'ютерів, що знаходяться в Trusted Hosts взаємна аутентифікація фактично відключена. Тому користуватися цим способом варто з великою обережністю.
Додати комп'ютер в довірені вузли можна за допомогою PowerShell.Так для того, щоб створити список довірених хостів і додати в нього комп'ютер SRV1 скористаємося командою:
Set-Item WSMan: \ localhost \ Client \ TrustedHosts -Value SRV1.contoso.com
при додаванні декількох комп'ютерів їх імена можна перерахувати через кому. Допускається вказувати не тільки ім'я, але IP-адреса комп'ютера.Також підтримуються символи підстановки. Наприклад, можна додати в довірені хости всі комп'ютери з домену contoso.com, вказавши значення * .contoso.com, або взагалі всіх без винятку:
Set-Item WSMan: \ localhost \ Client \ TrustedHosts -Value *
Щоб додати ім'я комп'ютера в уже існуючий список довірених вузлів, необхідно спочатку зберегти поточне значення в змінній, а потім привласнити значення розділеному комами списку, який включає поточний і нове значення.Наприклад, щоб додати комп'ютер SRV2 в наявний список довірених вузлів, скористайтеся командою
$ curr = (Get-Item WSMan: \ localhost \ Client \ TrustedHosts) .value
Set-Item WSMan: \ localhost \ Client \ TrustedHosts -Value "$ curr, SRV2.contoso.com"
Ну і подивитися список довірених вузлів можна командою:
Get-Item WSMan: \ localhost \ Client \ TrustedHosts
Також для додавання в TrustedHosts можна скористатися груповою політикою.У розділі Computer Configuration \ Administrative Templates \ Windows Components \ Windows Remote Management (WinRM) \ WinRM Client включаємо політику «Trusted Hosts» і додаємо імена або IP-адреси комп'ютерів через кому. Підтримуються групові символи.
Примітка: якщо TrustedHosts сконфігуровані через GPO, то з PS змінити їх не вдасться.Те ж стосується і всіх інших налаштувань PS Remoting.
SSL
Підключення з використанням SSL є найбільш захищеним варіантом віддаленого взаємодії. Але в порівнянні з іншими способами він досить складний у налаштуванні, так що доведеться трохи повозитися.
По-перше, для використання цього методу, нам потрібен цифровий сертифікат SSL для машини, до якої ми збираємося підключатися.Отримання сертифікату - окрема тема, не будемо на ній зупинятися. У тестовій середовищі я скористаюся утилітою Makecert, включений у склад Windows SDK, і створю самоподпісанний сертифікат:
makecert -a sha1 -r -pe -n "CN = wks8" -eku 1.3.6.1.5.5.7.3 .1 -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 -m 12 "C: \ myssl.cer "
Ця команда створить SSL-сертифікат терміном на рік і помістить його в сховище сертифікатів локального комп'ютера. Зверніть увагу, що сертифікат повинен бути виданий на те ж ім'я, яке ви будете вказувати в команді підключення.
Після отримання сертифікат повинен бути доданий в Trusted Root Authority (довірені кореневі центри сертифікації).Для цього відкриваємо сертифікат і тиснемо на кнопку «Встановити сертифікат».
Запускається майстер імпорту сертифікатів. Вказуємо розташування сховища «Локальний комп'ютер».
В якості сховища вибираємо «Довірені кореневі центри сертифікації» .
Тепер наш сертифікат є довіреною. Ще раз відкриваємо його, і на вкладці «Склад» знаходимо відбиток сертифіката (CertificateThumbprint). Копіюємо його в буфер обміну.
Тепер можна створювати прослуховувач для HTTPS. Відкриваємо консоль PowerShell і вводимо команду:
New-WSManInstance winrm/config/listener -SelectorSet @ {Address = '*'; Transport = 'HTTPS'} -ValueSet @ {HostName = 'wks8'; CertificateThumbrint = 'xxx'}
В поле CertificateThumbrint вставляємо відбиток сертифіката, скопійований в попередньому пункті.
Винятки Фаєрвол Windows (якщо він включений) для нового Прослуховувач необхідно налаштовувати вручну, автоматично вони не створяться. Тому створимо нове правило для вхідного трафіку по портах TCP 5986 і 443:
New-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS)" -Direct Inbound -Protocol TCP -LocalPort 5986,443 -Action Allow -Enabled True
Також для створення правила можна скористатися графічної оснащенням або утилітою командного рядка netsh, кому що більше подобається.
Далі йдемо на комп'ютер SRV1, з якого будемо підключатися. Оскільки я використовую самоподпісанний сертифікат, то його доведеться додати до довірених кореневих сертифікатів і на клієнті. Копіюємо файл сертифіката myssl.cer на SRV1 і встановлюємо командою:
certutil -addstore root C: \ myssl.cer
Ось і все, настройка закінчена. Тепер можна підключатися. Відкриємо інтерактивну сесію на wks8 командою:
Enter-PSSession -ComputerName wks8 -Credential wks8 \ kirill -UseSSL
Зверніть увагу, що при підключенні по SSL необхідно вводити облікові дані, а також вказувати тип підключення. Далі все як завжди.
Відключення перевірки
При підключенні по SSL перевіряється, що сертифікат був виданий довіреною центром сертифікації і випущений саме для цієї машини. Простіше кажучи, ім'я в сертифікаті має відповідати імені, зазначеному в команді підключення, а видавець сертифіката повинен бути в списку довірених кореневих центрів сертифікації.Якщо при перевірці буде знайдено невідповідність з цими умовами, то підключення не відбудеться.
В принципі це правильно, але при необхідності перевірки можна скасувати. Для цього у властивостях сесії є два параметри:
-SkipCACheck - скасовує перевірку видавця сертифіката;
-SkipCNCheck - скасовує перевірку відповідності імені комп'ютера.
Створити нову сесію з використанням цих параметрів можна наприклад ось так:
$ option = New-PSSessionOption -SkipCACheck -SkipCNCheck
Enter-PSSession -ComputerName wks8 -SessionOption $ option -Credential wks8 \ kirill -UseSSL
Правда в цьому випадку втрачається сенс SSL-сертифікатів, і тоді вже простіше користуватися Thrusted Hosts. Але можливість така є, і знати про неї треба.
Додаткові настройки
Починаючи з другої версії, WinRM за замовчуванням слухає порт 5985 для HTTP і 5986 для HTTPS. Для сумісності зі старими версіями (або щоб не відкривати додаткові порти на брандмауері) можна додатково включити прослуховувачі на традиційних портах 80 та 443.Для HTTP:
Set-Item WSMan: \ localhost \ Service \ EnableCompatibilityHttpListener $ true
І для HTTPS:
Set-Item WSMan: \ localhost \ Service \ EnableCompatibilityHttpsListener $ true
Те ж саме можна зробити за допомогою групових політик. Для цього треба в розділі Computer Configuration \ Administrative Templates \ Windows Components \ Windows Remote Management (WinRM) \ WinRM Service включити політики «Turn On Compatibility HTTP Listener» і «Turn On Compatibility HTTPS Listener».
Порти за замовчуванням можна змінити і вказати слухати будь-який нестандартний порт, наприклад порт 8080:
Set-Item WSMan: \ localhost \ listener \ listener * \ port -Value 8080
Примітка: установка прослуховувач на нестандартних портах кілька підвищить безпеку. Однак майте на увазі, що змінивши дефолтний порт, доведеться кожного разу при підключенні вказувати його вручну.
На цьому все. У другій частині статті розглянемо конфігурації віддалених сесій, створення кінцевих точок (endpoint), ну і що небудь ще по дрібниці