Вопрос или проблема
Я пытаюсь начать удаленную сессию с помощью PowerShell. Я создал следующую команду, однако она запрашивает пароль для ручного ввода, а затем соединяется. Я искал способ без запроса пароля.
Enter-PSSession <IPaddress> -Credential Administrator
Я выполнил следующее:
$username = "Administrator"
$password = ConvertTo-SecureString "******" -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList($username, $password)
$serverNameOrIp = "*****"
Enter-PSSession -ComputerName $serverNameOrIp -Credential $cred
Следующая ошибка:
Enter-PSSession : Подключение к удаленному серверу ****** не удалось с следующим сообщением об ошибке: WinRM не может
обработать запрос. Произошла следующая ошибка с кодом ошибки 0x80090311 при использовании аутентификации Kerberos: В данный момент нет доступных серверов входа для обслуживания запроса на вход.
Возможные причины:
- Указанные имя пользователя или пароль неверны.
- Kerberos используется, когда не указаны методы аутентификации и имя пользователя.
- Kerberos принимает доменные имена пользователей, но не локальные имена пользователей.
- Имя главной службы (SPN) для удаленного имени компьютера и порта не существует.
- Клиентские и удаленные компьютеры находятся в разных доменах, и между двумя доменами нет доверия.
После проверки вышеперечисленных вопросов попробуйте следующее:
- Проверьте Просмотр событий на наличие событий, связанных с аутентификацией.
- Измените метод аутентификации; добавьте целевой компьютер в список доверенных хостов WinRM или используйте HTTPS-транспорт.
Обратите внимание, что компьютеры в списке TrustedHosts могут не проходить аутентификацию.
- Для получения дополнительной информации о конфигурации WinRM выполните следующую команду: winrm help config. Для получения дополнительной информации см. тему справки about_Remote_Troubleshooting.
В C:\Users\Administrator\Downloads\cred.ps1:6 символ:1
+ Enter-PSSession -ComputerName $serverNameOrIp -Credential $cred
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (******:String) [Enter-PSSession], PSRemotingTransportException
+ FullyQualifiedErrorId : CreateRemoteRunspaceFailed
Обратите внимание, что удаленный сервер находится в списке доверенных хостов.
Вы можете создать объект учетных данных следующим образом:
$passwd = convertto-securestring -AsPlainText -Force -String <ваш пароль>
$cred = new-object -typename System.Management.Automation.PSCredential
-argumentlist "Domain\User",$passwd
Вы можете передать объект $cred
в качестве значения параметра -Credential
вот так: -Credential $cred
.
Вы можете найти больше вариантов, которые вы можете изменить при необходимости, в сообщении
Windows PowerShell дать пароль в команде Enter-PSSession.
Ответ или решение
Для того чтобы выполнить удалённое подключение к серверу с использованием Windows PowerShell без ввода пароля вручную, необходимо правильно создать объект учётных данных и указать этот объект в команде Enter-PSSession
. Давайте рассмотрим шаги, которые необходимо выполнить для успешного подключения, учитывая детали и возможные ошибки.
Шаги по передаче учётных данных
-
Создайте объект SecureString для пароля:
Чтобы создать объект пароля в PowerShell, можно использовать команду
ConvertTo-SecureString
. Убедитесь, что пароль передаётся в виде безопасного текста:$username = "Administrator" $password = ConvertTo-SecureString "Ваш_Пароль" -AsPlainText -Force
-
Создайте объект PSCredential:
Теперь, когда у вас есть защищённая строка с паролем, необходимо создать объект для учётных данных:
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password
Если ваш пользователь является доменным, указывайте полное имя пользователя в формате "Domain\User".
-
Выполните команду Enter-PSSession:
Теперь вы можете выполнить подключение к удалённому серверу, используя созданный объект учётных данных:
$serverNameOrIp = "IP_адрес_или_имя_сервера" Enter-PSSession -ComputerName $serverNameOrIp -Credential $cred
Обработка ошибок
В вашем случае вы столкнулись с ошибкой, связанной с аутентификацией Kerberos. Вот несколько рекомендаций по её устранению:
-
Проверьте имя пользователя и пароль: Убедитесь, что введённые имя пользователя и пароль корректны, особенно если для подключения используется локальный пользователь на удалённом сервере.
-
Используйте полное имя пользователя: Если вы подключаетесь к локальному компьютеру, используйте
.\Administrator
, чтобы указать, что это локальная учётная запись. -
Проверка настроек WinRM: Убедитесь, что служба WinRM запущена и настроена на удалённом сервере. Выполните команду
winrm quickconfig
на сервере для настройки. -
Параметры аутентификации: Если возникли проблемы с Kerberos, попробуйте задать другой метод аутентификации (например, NTLM) с помощью команд:
winrm set winrm/config/service/auth @{Basic="true"} winrm set winrm/config/service @{AllowUnencrypted="true"}
После изменений вам может потребоваться добавить удалённый сервер в список доверенных узлов:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "IP_адрес_или_имя_сервера" -Concatenate
Заключение
Используя правильный подход к созданию объекта учётных данных и настройки вашего окружения WinRM, вы сможете выполнять удалённые подключения без необходимости вводить пароль вручную. Обязательно следите за безопасностью, особенно когда используете незащищённые методы аутентификации и передаёте пароли в виде простого текста.
Если вы будете следовать данным рекомендациям, это должно помочь устранить возникшие проблемы и успешно выполнять команды PowerShell на удалённом сервере.