Включить PSRemoting: локальные и удаленные техники

Несмотря на то, что на Windows PSRemoting по умолчанию включен, он не всегда включен. Если вам нужно проверить, включен ли PSRemoting или включить его на Windows, этот учебник для вас.

В этом учебнике будет рассмотрено множество различных способов включения PSRemoting на локальных и удаленных компьютерах под управлением Windows.

Начнем!

Включение PSRemoting выполняет много задач

Если вы впервые узнаете о PowerShell Remoting, вы можете подумать, что включение это всего лишь одна команда. Возможно, вы видели ссылки на cmdlet PowerShell Enable-PSRemoting и думаете, что после ее выполнения происходит просто переключение какого-то бита. Вы ошибаетесь.

Когда вы слышите о включении PSRemoting, для его реализации требуется выполнение множества задач. Поскольку PowerShell Remoting зависит от других систем для корректной работы, у него есть несколько зависимостей.

Например, на Windows, при выполнении cmdlet Enable-PSRemoting без параметров выполняются следующие задачи:

  1. Служба WinRM запускается и устанавливается на автоматический запуск.
  2. Создается прослушиватель на портах WinRM по умолчанию: 5985 для HTTP-трафика.
  3. Включаются исключения брандмауэра для WS-Management.
  4. Регистрируются конфигурации сеансов PowerShell в WS-Management.
  5. Включаются конфигурации сеансов PowerShell.
  6. Устанавливает удаленные сеансы PowerShell, чтобы разрешить удаленный доступ.
  7. Перезапускает сервер WinRM для применения всех изменений.

Вы рады, что вам не нужно делать все это вручную? Зачем упоминать это, если команда Enable-PSRemoting делает все сама? Потому что иногда что-то может не работать, и вам нужно будет проанализировать, что происходит.

Настройки PSRemoting по умолчанию в Windows

Поскольку PSRemoting появился в Windows, он включен по умолчанию, но не всегда и также не для всех версий ОС Windows.

На всех клиентских операционных системах Windows PSRemoting всегда отключен.

На сервере Windows PSRemoting включен иногда, но не всегда, в зависимости от того, под каким сетевым профилем работает Windows. В таблице ниже вы найдете удобную информацию, чтобы определить, включен ли PSRemoting в вашей ОС Windows или нет.

Operating System Network Profile PSRemoting
Windows Server 2008 R2 Domain/Private Disabled
Windows Server 2008 R2 Public Disabled
Windows Server 2012 & Newer Domain/Private Enabled
Windows Server 2012 & Newer Public Enabled within the same subnet

С другой стороны, в Linux все просто. PSRemoting даже не существует! Даже PowerShell не установлен по умолчанию. Если вы хотите запустить PSRemoting в Linux, вам придется его настроить.

Достаточно слов, давайте покажем вам, как на самом деле начать использовать PSRemoting!

Необходимые условия

Если вы собираетесь выполнять примеры в этом разделе, убедитесь, что у вас есть следующее:

  • A Windows Server 2008 R2 or later machine
  • A local or Active Directory domain user in the local administrators group

Включение PSRemoting локально

Один из самых простых способов включить PSRemoting – использовать встроенную команду Enable-PSRemoting. Эта команда, как вы узнали выше, является ярлыком для настройки множества различных служб для работы с PowerShell Remoting.

Использование командлета Enable-PSRemoting

При запуске этой команды без параметров она выполняет различные действия, зависящие от операционной системы, на которой она запущена. На любой современной версии Windows происходят одни и те же основные шаги. Включается PSRemoting, создается слушатель HTTP для WinRM, и включаются правила брандмауэра. Основное отличие заключается в обработке общедоступных сетей.

В ОС сервера, например, Windows Server 2019, правило брандмауэра для общедоступных сетей позволяет удаленные подключения от других устройств в той же сети. В клиентской ОС, например, Windows 10, вы получите сообщение об ошибке, указывающее, что вы находитесь в общедоступной сети.

Если вы не уверены, в каком сетевом профиле работает Windows, выполните следующую команду:

Get-NetConnectionProfile

Вы должны использовать PSRemoting только в доверенной сети, поскольку он по сути запускает веб-сервер для прослушивания удаленных подключений.

Get-NetConnectionProfile

Если вам не против работать с PSRemoting в сетевом профиле, отличном от Частный или Домен, вы можете пропустить проверку сетевого профиля, используя параметр SkipNetworkProfileCheck. Использование этого параметра откроет порты WinRM в брандмауэре Windows.

Enable-PSRemoting -SkipNetworkProfileCheck

Использование параметра SkipNetworkProfileCheck откроет брандмауэр Windows для PowerShell Remoting в текущем сетевом профиле, но позволит только удаленные подключения от компьютеров в той же подсети.

Два параметра, которые можно использовать с командой Enable-PSRemoting, работают вместе. Это параметры -Force и -Confirm. Вы можете использовать параметр -Force, чтобы пропустить все запросы, которые обычно выводит команда Enable-PSRemoting. Вы также можете использовать параметр -Confirm:$false для достижения того же результата.

Использование команды winrm quickconfig

Команда winrm quickconfig раньше была популярным способом настройки PSRemoting, прежде чем был создан cmdlet Enable-PSRemoting, но она все еще имеет свое место. Если вы просто запустите команду winrm quickconfig, она включит службу WinRM, создаст HTTP-слушатель и включит правила брандмауэра. Все это уже делает команда Enable-PSRemoting, но это не настраивает машину для обработки удаленных сеансов PowerShell.

Команды winrm пригодны для настройки прослушивателей HTTPS. Хотя вы можете сделать это вручную, если у вас есть соответствующий сертификат для прослушивателя HTTPS, вы можете просто запустить команду winrm quickconfig -transport:https, и прослушиватель HTTPS и правила брандмауэра HTTPS будут настроены.

Включение PSRemoting удаленно

На данный момент вы узнали, что вы можете включить PSRemoting, выполнив команду на локальном компьютере. Это приводит нас к ситуации “курица и яйцо”. PSRemoting позволяет выполнять команды на удаленных компьютерах, но как выполнить команду удаленно без PSRemoting?

Тремя способами: утилитой PSexec, WMI и Group Policy.

Использование Psexec

PSExec – это удобная утилита, которая позволяет запускать удаленные команды, подобно PSRemoting. Однако PSexec использует другой метод связи, который можно использовать в своих интересах!

С помощью PSexec вы можете запустить команду Enable-PSRemoting с локального компьютера с помощью следующей команды. В приведенной ниже команде вызывается psexec и устанавливается подключение к серверу ServerB. Затем запускается процесс PowerShell и выполняется команда Enable-PSRemoting с параметром -Force, чтобы пропустить обычные запросы.

.\psexec.exe \ServerB -h -s powershell.exe Enable-PSRemoting -Force

Эта опция подходит для одноразовых случаев, когда вам необходимо включить PSRemoting на удаленной системе, но не очень подходит для включения PSRemoting на множестве систем и требует загрузки psexec.

Использование WMI

Иногда PSexec не работает. Многие программы безопасности блокируют psexec, но не волнуйтесь, у вас есть WMI!

С помощью PowerShell и cmdlet Invoke-CimMethod. С помощью cmdlet Invoke-CimMethod вы можете указать PowerShell подключиться к удаленному компьютеру через DCOM и вызвать методы.

К счастью для вас, в WMI есть классы Win32_Process, которые позволяют вызывать процессы. Вызывая метод Create у класса Win32_Process, Invoke-CimMethod подключается к удаленному компьютеру, вызывает PowerShell и выполняет команду Enable-PSRemoting, как показано ниже.

Нижеприведенный пример создает хэш-таблицу для соединения сеанса, в которой указываются имя сервера, учетные данные и протокол. Затем в следующей хэш-таблице устанавливаются параметры для Invoke-CimMethod. После их выполнения создается сеанс CIM через протокол DCOM, который запускает процесс PowerShell, который, в свою очередь, выполняет команду Enable-PSRemoting.

$SessionArgs = @{
     ComputerName  = 'ServerB'
     Credential    = Get-Credential
     SessionOption = New-CimSessionOption -Protocol Dcom
 }
 $MethodArgs = @{
     ClassName     = 'Win32_Process'
     MethodName    = 'Create'
     CimSession    = New-CimSession @SessionArgs
     Arguments     = @{
         CommandLine = "powershell Start-Process powershell -ArgumentList 'Enable-PSRemoting -Force'"
     }
 }
 Invoke-CimMethod @MethodArgs

В случае использования этого в среде домена и если у пользователя, выполняющего команды, есть административные права на целевой сервер, строку Credential = Get-Credential можно исключить.

Использование групповой политики

Последний и, пожалуй, лучший вариант для включения WinRM на большом количестве компьютеров – это использование групповой политики. При использовании групповой политики вы можете создать один объект групповой политики и применить эту политику сразу к тысячам компьютеров.

Для использования групповой политики все компьютеры должны быть в домене Active Directory.

Для использования групповой политики для включения WinRM сразу на нескольких компьютерах вам потребуется установить три различных элемента конфигурации:

  1. Включить службу WinRM.
  2. Открыть порт брандмауэра Windows для WinRM.
  3. Создать прослушиватель WinRM и разрешить подключения к нему.

Во-первых, подключитесь по RDP к контроллеру домена или, лучше всего, установите пакет инструментов удаленного администратора сервера (RSAT) на рабочую станцию, присоединенную к домену. Теперь у вас должна быть доступна консоль управления групповыми политиками (GPMC).

Включение службы WinRM

Чтобы включить службу WinRM на всех целевых компьютерах:

  1. Откройте GPMC и создайте GPO. В новом GPO перейдите в Конфигурация компьютера —> Параметры Windows —> Настройки безопасности —> Системные службы
  2. Выберите Удаленное управление Windows (WS-Management).
  3. В панели настройки установите флажок Определить эту настройку политики.
  4. Выберите радиокнопку Автоматический, чтобы служба WinRM запускалась автоматически при загрузке.
  5. Щелкните OK, чтобы подтвердить настройку.

Открытие порта Windows Firewall

Далее вам необходимо открыть порт WinRM на всех целевых компьютерах. Все еще редактируя созданный выше GPO:

  1. Перейдите в Конфигурация компьютера —> Параметры Windows —> Настройки безопасности —> Windows Defender Firewall со сложными настройками.

2. Нажмите на Новое входящее правило, чтобы создать новое входящее правило.

3. На первой странице выберите Предопределенное и выберите Удаленное управление Windows, как показано ниже.

Windows Remote Management

4. На следующей странице установите флажок для правила Доменная/частная сеть, если вы не знаете, что в ваших средах используются общедоступные сети и вам потребуется разрешить удаленные подключения из них.

Domain/Private network rule

5. На следующей странице оставьте значение по умолчанию Разрешить подключение и нажмите “Готово”, чтобы создать правило.

Создание слушателя WinRM и списка фильтров

Последний элемент конфигурации, который нужно добавить в вашу групповую политику, – это создание слушателя WinRM и разрешение подключений к этому слушателю WinRM. Эта настройка создает слушателя WinRM для HTTP и разрешает подключения к нему с указанных IP-адресов или диапазонов IP.

Во время редактирования групповой политики WinRM:

  1. Перейдите в Конфигурация компьютера —> Административные шаблоны —> Компоненты Windows —> Удаленное управление Windows (WinRM) —> Служба WinRM.

2. Выберите Включено для настройки Разрешить удаленное управление службой через WinRM.

3. В настройке Разрешить удаленное управление сервером через WinRM введите звездочку (*) и для фильтра IPv4, и для фильтра IPv6, как показано ниже.

Обратите внимание, что вы можете указывать несколько хостов, разделенных запятой, в каждом списке фильтров, если заранее знаете, какие хосты будут подключаться к целевым компьютерам.

Allow remote server management through WinRM

4. Щелкните ОК, чтобы подтвердить новую настройку GPO.

Применение GPO

На данный момент GPO должна быть создана и готова к использованию. Последняя задача, которую вам нужно выполнить, – это применить эту GPO ко всем целевым компьютерам, на которых вы хотите включить WinRM. В этом учебнике вы не узнаете, как назначать GPO на целевые компьютеры.

Если вы не знаете, как назначить GPO набору компьютеров в Active Directory, вам следует ознакомиться с этой статьей.

Следующие шаги

В этом учебнике вы узнали, как включить PSRemoting разными способами. Как включить PSRemoting в значительной степени зависит от вашей среды, и я надеюсь, что я охватил ваш сценарий здесь.

Теперь используйте полученные знания, выйдите и начните использовать PSRemoting в вашей среде!

Source:
https://adamtheautomator.com/enable-psremoting/