Включить/отключить удаленный доступ через PowerShell Remoting

Для удаленного управления компьютерами/серверами, выполнения административных задач, и запуска скриптов/команд в Windows доступен протокол PowerShell Remoting (PSRemoting). PowerShell Remoting основан на возможностях службы Windows Remote Management (WinRM) и позволяет администраторам выполнять команды на удаленных компьютерах. Для связи с удаленными компьютерами через WinRM используются протокол HTTP (порт TCP/5985 ), HTTPS (порт TCP/5986 ) или SSH ( TCP/22 ).

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

Разрешить удаленный доступ через PowerShell Remoting (WinRM)

По умолчанию PowerShell Remoting отключен в десктопных редакция Windows 10 и 11, но всегда включен в Windows Server. Проверить, включен ли PowerShell Remoting на вашем компьютере можно с помощью команды:

Test-WSMan

Если команда вернет такую ошибку, значит PSRemoting не настроен:

Error  Code="2150858770" The client cannot connect to the destination specified in the request. Verify that the service on the destination is running and is accepting requests. Consult the logs and documentation for the WS-Management service running on the destination, most commonly IIS or WinRM.

Test-WSMan проверить включен ли powershell remoting

При этом служба Windows Remote Management (WS-Management) также остановлена:

Get-Service -Name WinRM

И отсутствовать слушатель службы (WinRM listener):

WinRM enumerate winrm/config/listener

Проверить службу WinRM

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

Enable-PSRemoting

Или

winrm quickconfig

Enable-PSRemoting команда

Эта команда:

  • Запускаем службу WinRM и включает для нее автозапуск
  • Создает HTTP прослушиватель. Его настройки можно вывести командой: WinRM enumerate winrm/config/listener enumerate winrm listener - посмотреть что слушатель запущен
  • Разрешает правила удаленного подключения через WinRM в Windows Firewall (по умолчанию TCP порты 5985 и 5986): Get-NetFirewallRule -DisplayName "Windows Remote Management (HTTP-In)"|ft Правила windows файервола для работы powershell remoting
  • Регистрируетивключаетконфигурациисеансов PowerShell (вывести: Get-PSSessionConfiguration )
  • Перезапускает службу WinRM
Если вы включаете PSRemoting на компьютере в рабочей группе (тип подключения к сети на котором определяется как Public), команда Enable-PSRemoting вернет ошибку:

WinRM firewall exception will not work since one of the network connection types on this machine is set to Public. Change the network connection type to either Domain or Private and try again.

В этом случае нужно изменить тип сети на частную или доменную или игнорировать проверку типа сети при включении WinRM с помощью команды:

Enable-PSRemoting –SkipNetworkProfileCheck -Force

Чтобы проверить доступность WinRM и PSPowerShell на компьютере по сети, выполните команду:

Test-WSMan -ComputerName wks25h2

Test-WSMan -ComputerName: проверить удаленно включен ли на машине удаленный powershell

Теперь вы можете удаленно подключиться к этому компьютеру через PowerShell Remoting. Для этого на компьютере администратора обычно используются следующие команды:

  • Enter-PSSession – для интерактивного доступа к консоли удаленного компьютера Enter-PSSession
  • Invoke-Command – для пакетного запуска команд или PowerShell скриптов на одном/нескольких удаленных компьютерах

По умолчанию HTTP Listener WinRM использует протокола Kerberos для аутентификации и работать в домене AD при подключении по FQDN имени удаленного компьютера:

Get-ChildItem -Path WSMan:\localhost\Service\Auth\

WinRM для powershell remoting типы аутентфикации

Если вы подключаетесь к удаленном компьютеру по IP адресу (или ваши компьютеры находятся в рабочей группе), для аутентификации будет использоваться менее безопасный NTLM, использование которого в WinRM по умолчанию запрещено:

Connecting to remote server 192.168.158.187 failed with the following error message : The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. 

The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting

Чтобы компьютер администратора доверял компьютеру, к которому подключается, нужно добавить IP адрес или имя компьютера пользователя с настроенным PSRemoting в TrustedHosts:

Set-Item wsman:\localhost\client\TrustedHosts -Value 192.168.13.222 -Force

Вывести список компьютеров в TrustedHosts:

get-Item WSMan:\localhost\Client\TrustedHosts

Чтобы разрешить администратору подключаться к любым компьютерам (не безопасно!), добавьте в * в TrustedHosts:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value *

Подробнее об использовании PowerShell Remoting в рабочей группе (без домена).

Для защиты WinRM подключения можно дополнительно:

Удаленный доступ через PowerShell без прав администратора

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

При попытке создать сессию PowerShell с удаленным компьютером из-под обычного пользователя появится ошибка доступа:

Enter-PSSession msk-server1

Enter-PSSession : Connecting to remote server msk-server12 failed with the following error message : Access is denied. InvalidArgument: FullyQualifiedErrorId : CreateRemoteRunspaceFailed

Enter-PSSession доступ для не администраторов запрещен

Список групп, которым разрешено удаленное подключение через PowerShell Remoting можно вывести так:

(Get-PSSessionConfiguration -Name Microsoft.PowerShell).Permission

По умолчанию доступ разрешен для следующих встроенных групп:

  • BUILTIN\Administrators — AccessAllowed,
  • BUILTIN\Remote Management Users — AccessAllowed

Get-PSSessionConfiguration

Таким образом, чтобы разрешить пользователю доступ, достаточно добавить его в группу Remote Management Users. Данная группа также предоставляется доступ к ресурсам WMI через управляющие протоколы (например, WS-Management).

Добавить пользователя в группу можно через оснастку управления компьютером, с помощью PowerShell команды Add-LocalGroupMember -Group "Remote Management Users" -Member "abelov" или можно добавить пользователя в группу через GPO.

Локальная группа Remote Management Users

Теперь пользователь, даже не обладая правами администратора, сможет подключиться к компьютеру через PSRemoting:

PSRemoting без прав администратора

Если нужно разово (до перезагрузки) предоставить пользователю права на удаленное подключение через PowerShell, можно вручную изменить дескриптор безопасности текущей сессии Microsoft.PowerShell компьютере.

Откройте список текущих разрешений:

Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI

Добавите пользователя или группу и предоставьте ему права Execute (Invoke).

Set-PSSessionConfiguration

Можно сохранить текущую строку доступа в формате SDDL:

(Get-PSSessionConfiguration -Name "Microsoft.PowerShell").SecurityDescriptorSDDL

Как вы видите, теперь она включает SID пользователя, которого мы добавили в настройки безопасности.

Затем можно использовать данную SDDL строку для предоставления доступа к PowerShell на любом другом компьютере.

$SDDL = “O:NSG:BAD:P(A;;GA;;;BA)(A;;GXGR;;;S-1-5-21-2373142251-3438396318-2932294317-23761992)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD)”
Set-PSSessionConfiguration -Name Microsoft.PowerShell -SecurityDescriptorSddl $SDDL

Скопировать и применить строку SecurityDescriptorSDDL

Вывести текущие права:

Get-PSSessionConfiguration | Select-Object Name, Permission

Права для использования удаленного powershell

Отключить удаленный доступ через PowerShell

Для отключения PowerShell Remoting на компьютере используется команда:

Disable-PSRemoting -Force

Команда Disable-PSRemoting

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

Удалить листенер WinRM.

Вывести список листенеров:

dir wsman:\localhost\listener

Удалить прослушивать ель по имени или удалить все созданные прослушивали:

Remove-Item -Path WSMan:\Localhost\listener\<Listener name>

Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse

Остановить и отключить автозапуск службы WinRM:

 Stop-Service WinRM; Set-Service WinRM -StartupType Disabled -PassThru

Отключить исключения файервола для WinRM:

Get-NetFirewallRule -DisplayGroup "Windows Remote Management" | Where-Object {$_.Enabled -eq "True"}| Disable-NetFirewallRule -whatif

Отключить в реестре параметр UAC LocalAccountTokenFilterPolicy, разрешающий удаленный доступ под учетной записью с правами администратора:

reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "LocalAccountTokenFilterPolicy" /t REG_DWORD /d 0 /f

Управление удаленным доступом PowerShell к серверам Exchange

По умолчанию все пользователи Exchange Server (и Exchange Online) могут использовать PowerShell для подключаться удаленного подключения серверам Exchange. Однако фактические права пользователя определяются назначенными ему ролями Exchange.

В целях безопасности желательно отключить возможность удаленного подключения через PowerShell к оболочке Exchange для обычных (не-административных пользователей) и сервисных аккаунтов. Для этого в свойствах таких пользователей нужно отключить опцию RemotePowerShellEnabled.

Вывести пользователей, для которых разрешений удаленный доступ:

Get-User -ResultSize Unlimited -Filter 'RemotePowerShellEnabled -eq $true'

Exchange Server: отключить RemotePowerShellEnabled для пользователей без прав админа

Чтобы отключить удаленный доступ к Exchnage через PowerShell для пользователя, нужно изменить значение RemotePowerShellEnabled на $false:

Set-User -Identity kbuldogov@winitpro.ru -RemotePowerShellEnabled $false


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)