Проблемы с удаленным подключением PowerShell - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь реализовать удаленное взаимодействие PowerShell (для выполнения сценариев PowerShell на удаленном сервере). Мой удаленный сервер работает под управлением Windows Server 2008 и PowerShell v2.

На консоли PS с повышенными правами я выполнил следующий командлет:

Enable-PSRemoting

Возвращено на консоль:

WinRM уже настроен для приема запросов на этом компьютере.

WinRM уже настроен для удаленного управления на этом компьютере.

Из сеанса PowerShell с повышенными привилегиями на клиентском компьютере я выполнил следующий командлет:

Enter-PSSession –ComputerName [remote_server_name]

На этот раз вернулся к консоли:

Enter-PSSession: не удалось подключиться к удаленному серверу [имя_удаленного_сервера] со следующим сообщением об ошибке: Клиент не может подключиться к месту назначения, указанному в запросе. Убедитесь, что служба в месте назначения работает и принимает запросы. Обратитесь к журналам и документации для службы WS-Management, работающей в месте назначения, чаще всего IIS или WinRM. Если местом назначения является служба WinRM, выполните следующую команду в месте назначения для анализа и настройки службы WinRM: «winrm quickconfig». Для получения дополнительной информации см. Раздел справки about_Remote_Trou Troubleshooting.

В строке: 1 символ: 1

+ Enter_PSSession –ComputerName [имя_удаленного_сервера]

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo: Неверный / аргумент: ([имя_удаленного_сервера]: строка) [Enter-PSSession], PSRemotingTransportException

+ FullyQualifiedErrorId: CreateRemoteRunspaceFailed

Я выполнил «winrm quickconfig» в соответствии с предложением сообщения об ошибке. Еще раз вернемся к консоли:

WinRM уже настроен для приема запросов на этом компьютере.

WinRM уже настроен для удаленного управления на этом компьютере.

1041 * Повтор *

Enter-PSSession –ComputerName [remote_server_name]

с клиентского компьютера возвращает ту же ошибку.

Я дважды проверил, что служба WinRM работает на удаленном сервере. Правило брандмауэра удаленного управления Windows (HTTP-In) настроено для протокола TCP, локального порта 5985 и всех удаленных портов.

Даже когда я выполняю

Get-Service WinRM –ComputerName [remote_server_name]

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

Имя статуса DisplayName

------ ---- -----------

Запуск WinRM Windows Remote Management (WS-Manag…

Выполнение следующей команды на удаленном компьютере

WinRM Enumerate WinRM/Config/Listener

возвращается в консоль, показывая, что правильный порт открыт:

Слушатель [Source = ”GPO”]

Адрес = *

Порт = 5985

Имя хоста включено = true

URLPrefix = wsman

CertificateThumbprint ListeningOn = null

Но, исполнение

$remoteServer = [test_server_name]
$port = 5985
$connection = New-Object System.Net.Sockets.TcpClient($remoteServer, $port)
if ($connection.Connected) {
    Write-Host "Success"
}
else {
    Write-Host "Failed"
}

возвращает следующее сообщение об ошибке:

New-Object: Исключение вызывает ".ctor" с аргументом (ами) "2": "Невозможно установить соединение, поскольку целевая машина активно отказала ему в этом [remote_server_ipaddress]: 5985"

В строке: 4 символа: 15

+ ... onnection = New-Object System.Net.Sockets.TcpClient ($ ipaddress, $ port ...

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~

+ CategoryInfo: InvalidOperation: (:) [New-Object], MethodInvocationException

+ FullyQualifiedErrorId: ConstructorInvokedThrowException, Microsoft.PowerShell.Commands.NewObjectCommand

у меня есть другоеЭто удаленный сервер, работающий под управлением Windows Server 2012 R2 с PowerShell v4. Я включил PS Remoting на этом поле без проблем и могу удаленно выполнять сценарии PS с того же клиента.

Итак, что мне не хватает? Есть ли вероятность того, что существует проблема совместимости между версиями PowerShell?

Мой клиентский ПК работает под управлением PowerShell 5, мой правильно работающий удаленный сервер работает под управлением PowerShell 4, мой неисправный удаленный сервер работает под управлением PowerShell 2.

Выводы, рекомендации, советы очень приветствуются. Спасибо за поиск.

UPDATE:

С тех пор я обновил .Net Framework на тестовых виртуальных машинах до .Net 4.7.2 и установил PowerShell 4 на уязвимую виртуальную машину (так же, как и правильно работающий блок).

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

1114 * *

HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ WSMAN \ Service

На работающей виртуальной машине я обнаружил 32-битный «allow-remote-запросы», которому присвоено значение 1. Эта запись отсутствовала в реестре уязвимой машины. Я добавил его, перезагрузил компьютер, повторил запрос на подключение.

Тем не менее, та же проблема сохраняется.

1 Ответ

0 голосов
/ 19 апреля 2019

Похоже, что ваш хост-компьютер продолжает отклонять клиентский компьютер.

Попробуйте получить учетные данные хост-машины, выполнив следующее:

    $c = Get-Credential        
    New-CimSession -ComputerName [name] -Credential $c        

Затем введите имя пользователя и пароль хоста.

Если это по-прежнему не работает, попробуйте вручную добавить клиента в качестве авторизованного пользователя на вашем хосте.

...