Как передать учетные данные вместе с именем пользователя и паролем в команде PowerShell.

Вопрос или проблема

Я пытаюсь начать удаленную сессию с помощью 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. Давайте рассмотрим шаги, которые необходимо выполнить для успешного подключения, учитывая детали и возможные ошибки.

Шаги по передаче учётных данных

  1. Создайте объект SecureString для пароля:

    Чтобы создать объект пароля в PowerShell, можно использовать команду ConvertTo-SecureString. Убедитесь, что пароль передаётся в виде безопасного текста:

    $username = "Administrator"
    $password = ConvertTo-SecureString "Ваш_Пароль" -AsPlainText -Force
  2. Создайте объект PSCredential:

    Теперь, когда у вас есть защищённая строка с паролем, необходимо создать объект для учётных данных:

    $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $password

    Если ваш пользователь является доменным, указывайте полное имя пользователя в формате "Domain\User".

  3. Выполните команду 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 на удалённом сервере.

Оцените материал
Добавить комментарий

Капча загружается...