Вопрос или проблема
Я пытаюсь настроить взаимодействие двух рабочих машин (обе на Windows 2012 R2) с помощью PowerShell через WinRM. Назовем их ServerA и ServerB. На обоих машинах я выполнил следующие команды:
Enable-PSRemoting -Force
Set-Item WsMan:\localhost\client\trustedhosts Server[A|B]
Restart-Service WinRM
С ServerB я могу удаленно подключиться к ServerA, используя команду Enter-PSSession ServerA
. Однако я не могу подключиться в обратном направлении. ServerA не может подключиться к ServerB. Я получаю следующее сообщение об ошибке:
enter-pssession : Подключение к удаленному серверу ServerB не удалось с
следующим сообщением об ошибке: Клиент не может подключиться к указанному в
запросе адресу. Убедитесь, что служба на целевом сервере работает и
принимает запросы. Консультируйтесь с журналами и документацией службы
WS-Management, работающей на целевом сервере, чаще всего это IIS или WinRM.
Если целевой сервер — это служба WinRM, выполните следующую команду на
целевом сервере для анализа и настройки службы WinRM: “winrm quickconfig”.
Для получения дополнительной информации смотрите тему справки about_Remote_Troubleshooting.
На строке:1 символ:1
+ enter-pssession ServerB
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (ServerB:String) [Enter-PSSes
sion], PSRemotingTransportException
+ FullyQualifiedErrorId : CreateRemoteRunspaceFailed
Я также попробовал подключиться к удаленной сессии к самому серверу. То есть, из ServerB Enter-PSSession ServerB
. Я получаю ту же ошибку, что и выше. Я пробовал полностью отключить оба брандмауэра, но это тоже не помогло. Я также попытался выполнить Test-NetConnection ServerB -port 5985
, и это выдает предупреждение:
ПРЕДУПРЕЖДЕНИЕ: TCP подключение к ServerB:5985 не удалось
ComputerName : ServerB
RemoteAddress : ip
RemotePort : 5985
InterfaceAlias : Ethernet
SourceAddress : ip
PingSucceeded : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded : False
С помощью команды Test-NetConnection
я вижу запись в журнале событий PowerShell, которая гласит:
Сообщение об ошибке = Исключение при вызове “.ctor” с “2” аргументом(ами): “Нет соединения, так как целевая машина активно его отклонила ip:5985”
…
Какие еще шаги я могу предпринять для устранения проблемы с подключением?
Команда winrm quickconfig (или сокращенная версия winrm qc) выполняет следующие операции: запускает службу WinRM и устанавливает тип запуска службы на автоматический. Настраивает слушатель для портов, которые отправляют и принимают сообщения протокола WS-Management, используя либо HTTP, либо HTTPS на любом IP-адресе.
winrm quickconfig
Проблема, похоже, связана с сетью. Если TCP-подключение к порту 5985 не работает, то нет шансов, что входящее PSRemoting заработает.
Можете ли вы проверить профили подключения (Get-NetConnectionProfile) на ServerB? На общедоступной сети слушатель по умолчанию будет настроен на локальную сеть, что приведет к проблемам, когда вы пытаетесь подключиться с машины в другой подсети. Вы можете легко это проверить, посмотрев на правило входящего брандмауэра:
$rule = Get-NetFirewallRule -Name WINRM-HTTP-In-TCP
Get-NetFirewallAddressFilter -AssociatedNetFirewallRule $rule
Вы можете проверить, решит ли обновление правила, позволяющее любое удаленное адрес, проблему:
Set-NetFirewallRule -Name WINRM-HTTP-In-TCP -RemoteAddress Any
Очевидный вопрос: почему это работает в обратном направлении. Я подозреваю, что другой сервер имеет сеть, помеченную как ‘частная’. В частных сетях, насколько я помню, соединение…
Ответ или решение
Проблема с подключением по WinRM: Возможные причины и шаги для устранения
Когда вы сталкиваетесь с проблемой подключения по WinRM между двумя рабочими станциями Windows 2012 R2, как в вашем случае с ServerA и ServerB, важно провести тщательное расследование, чтобы определить источник проблемы. Прежде всего, заметим, что WinRM (Windows Remote Management) требует корректной настройки и открытых портов, чтобы обеспечить удаленный доступ при использовании PowerShell.
Шаги по устранению неполадок
-
Проверка статуса службы WinRM
Убедитесь, что служба WinRM запущена на обоих серверах. Выполните команду:Get-Service winrm
Убедитесь, что статус службы – "Running". Если нет, запустите службу с помощью команды:
Start-Service winrm
-
Проверка настройки WinRM
Для анализа и конфигурации WinRM выполните команду:winrm quickconfig
Эта команда запустит услугу WinRM и создаст необходимые слушатели.
-
Проверка сетевого подключения
Судя по вашему выводу отTest-NetConnection
, соединение с сервером на порт 5985 (HTTP) не проходит. Вам нужно выяснить, не блокируется ли этот порт.- Убедитесь, что фаерволл не блокирует порт 5985. Для этой проверки выполните следующую команду:
Get-NetFirewallRule -Name WINRM-HTTP-In-TCP
Посмотрите, какие адреса разрешены для подключения, с использованием:
Get-NetFirewallAddressFilter -AssociatedNetFirewallRule $rule
Если вы обнаружите, что доступ ограничен, откройте порт для всех адресов:
Set-NetFirewallRule -Name WINRM-HTTP-In-TCP -RemoteAddress Any
-
Настройки сетевых профилей
Проверьте, не установлен ли сетевой профиль на ServerB как "Public". Это может препятствовать входящим подключениям. Выполните следующую команду на ServerB:Get-NetConnectionProfile
Если профиль "Public", его следует изменить на "Private":
Set-NetConnectionProfile -NetworkCategory Private
-
Проверка на наличие других ограничений
Убедитесь, что другие параметры безопасности операционной системы не мешают подключению. Иногда антивирусное ПО или другие сетевые правила могут ограничивать доступ. -
Логи и отладка
Проверяйте журналы событий для получения дополнительных подсказок. Особенно интересуют записи в логах WinRM и системных событиях, которые могут указать на точную причину проблемы.Get-EventLog -LogName Microsoft-Windows-WinRM/Operational
Заключение
Сложности с подключением через WinRM могут быть вызваны множеством факторов, включая настройки фаервола, сетевые профили, статусы служб и другие политики безопасности. Правильное выполнение всех вышеуказанных шагов поможет вам установить успешное соединение между ServerA и ServerB и обеспечит бесперебойную работу удаленного администрирования с помощью PowerShell. Не забывайте также об актуальности версий обновлений и патчей для исправления возможных уязвимостей в системе.