Powershell remoting 1

Тут мінімум теорії, в основному практична частина. Описується як налаштувати WinRM, як змінити профіль мережевого адаптера, дається скрипт по додаванню в TrustedHosts з фільтрацією, пояснюється навіщо потрібні довірені хости, і розглядаються поверхово віддалені підключення так щоб можна було сісти і відразу адмін віддалені машини.

Найбільш простий шлях конфігурувати віддалене управління це виконати Enable-PSRemoting в оболонці powershell з правами адміністратора. При цьому відбудеться наступне:


Після цього потрібно дозволити підключатися до віддаленої машині з тієї машини з якої буде відбуватися управління. Зроблено це з метою безпеки для того щоб зменшити ризик злому сесії віддаленого управління або DNS з підстановкою себе замість віддаленої машини і запобігти виконанню скриптів на машинах які ви примусово не дозволили.

для перевірки куди можна підключатися використовуємо:

для вирішення підключатися до всіх

в хелпе вказані команди, я їх чуть чуть переробив в скрипт

це не те ж саме що Enable-PSRemoting

в чому ж різниця

Enable-PSRemoting робить більше дій ніж «winrm quickconfig». Командлет Set-WSManQuickConfig робить точно такі ж дії як «winrm quickconfig». Enable-PSRemoting запускає Set-WSManQuickConfig коли веде налаштування системи

Set-WSManQuickConfig робить наступні дії:

  1. запускат WinRM сервіс
  2. встановлює автостарт служби WinRM в автоматичний
  3. створює прослуховувач
  4. додає виключення файрвола

Enable-PSRemoting крім цього робить ще наступне

  1. включає всі зареєстровані зміни сесій PowerShell для отримання інструкцій від віддалених машин
  2. реєструє конфігурацію якщо вона не зареєстрована «Microsoft.PowerShell»
  3. реєструє конфігурацію якщо вона не зареєстрована «Microsoft.PowerShell32» на 64 бітних машинах
  4. прибирає заборона «Deny Everyone» з дескриптора безпеки будь-яких змін сесій
  5. перезапускає сервіс WinRM

Дистанційні підключення
1. Сесії 1-to-1
відкриваються командою

Ви отримаєте оболонку на віддаленій машині. Підключитися можна до самого себе вказавши localhost. Альтернативні кредітали вказуються з параметром -Credential. вихід відбувається Командлети Exit-PSSession

  • не можна зробити другий стрибок - лише 1 сесія, всередині сесії підключитися далі не можна
  • ви не можете використовувати команди мають графічний інтерфейс. Якщо ви це зробите оболонка повисне, натисніть Ctrl + C щоб відвисла
  • ви не можете запускати команди мають свій власний йшов, наприклад nslookup, netsh
  • ви можете запускати скрипти якщо політика запуску на віддаленій машині дозволяє їх запускати
  • не можна причепиться до інтерактивної сесії, ви заходите як «network logon». як ніби причепилися до мережевого диску. Тому не запустяться логон скрипти, і ви можете не отримати домашню папку на віддаленій машині (зайвий аргумент щоб не Мапа хом фолдери логон скриптами)
  • ви не зможете взаємодіяти з користувачем на віддаленій машині навіть якщо він туди залягання. Чи не вийде показати йому віконце або подрукуємо небудь йому.

цей спосіб найкраще для простих операцій, зайшов, посмикав сервер і відключився. Якщо потрібно утримати змінні в Скоп'є, потрібна тривала операція (багато годин або днів), потрібно більше можливостей по адмініструванню то потрібно використовувати техніку попродвінутее.

2. Сесії 1-to-many

визначаємо що будемо виконувати так:

передаємо на віддалені машини Test1 і Test2

за раз можна закинути на 32 машини. Якщо альтернативні кредітали то використовуємо параметр -Credential

Щоб передати цілком скрипт замість параметра -ScriptBlock пишемо -FilePath, віддаленій машині НЕ потрібно мати доступ до файлу, він буде розібраний на запчастини, переданий через HTTP і виконаний з того боку.

Запам'ятаємо що на тій стороні буде новий скопа, так що ваш скрипт не отримає значень з вашої консолі, а змінні скрипта можуть виявитися на тому боці порожніми. Тому передавайте відразу цілком готові інструкції та скрипти з параметрами.

для повноцінного використання Invoke-Command треба вміти перетворювати рядки в скрипт блоки. Наприклад у вас є команди які залежать від якогось списку, вам потрібно згенерувати рядок, перетворити її в ScriptBlock і відправити на віддалений комп:

3. Сесії
Це коли з того боку створюється копія пошіка постійно висить в пам'яті, і в неї відправляються команди. Як результат до неї можна перепідключитися, ченить довгий запустити на виконання, чіплятися з різних скриптів або різними користувачами. Наприклад у вас є набір скриптів вирішальних одну задачу по частинах, кожен з них по черзі може підключаться до однієї віддаленої сесії, бачити результати роботи попередніх команд, мати одні завантажені модулі, загальні змінні, загальне оточення, до тих пір поки сесія не буде примусово закрита.

Створення сесії відбувається Командлети New-PSSession, результат можна помістити в змінну

використовувати можна такі самі установки як в Invoke-Command

Як використовувати:
якщо 1-to-1

подивитися які сесії відкриті можна за допомогою Get-PSSession, закрити Remove-PSSession
закрити взагалі всі сесії

причепиться до сесії можна за допомогою Connect-PSSession, відключитися через Disconnect-PSSession

Invoke-Command може створити відразу disconnected сесію, він відправляє команди на виконання і відключаться, пізніше можна підключиться і вивантажити результати роботи. Робиться це параметром -Disconnected. Отримання результатів через командлет Recieve-PSSession.

Сесії мають дуже багато налаштувань, можливо навіть створення сесій з обрізанням набором команд, модулів і т.п. Називається custom endpoints

Схожі статті