Як зберегти облікові дані на віддаленому сеансі Powershell?


13

У мене є спільний файл файлу Azure, і я хотів би використовувати це з моїх віртуальних машин Azure - після збереження облікових даних на VM за допомогою cmdkey та монтажу з використанням мережі. Це було перевірено, виконавши ці команди в локальному сеансі Powershell на Windows Server 2012 R2.

Але мені потрібно додати цей крок до сценарію розгортання Azure. Сценарій Azure Powershell працює з мого ноутбука, підключається до підписки Azure і створює VM з нуля, використовуючи безліч змінних.

Зрозуміло, що використовувати Invoke-Command для передачі змінних від сценарію Azure Powershell до віддаленого сеансу Powershell на новоствореній VM.

$Session = New-PSSession -ConnectionUri $Uri -Credential $DomainCredential

$ScriptBlockContent = { 
Param ($Arg1,$Arg2,$Arg3)
cmdkey /add:$Arg1 /user:$Arg2 /pass:$Arg3}

Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)

І помилка:

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)
CMDKEY: Credentials cannot be saved from this logon session.

Для перевірки синтаксису замінено cmdkey / list, і помилок немає.

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent
Currently stored credentials:
* NONE *

Виникла аналогічна проблема (і не вдалося її виправити) з модулем PowerShell оновлення Windows (Invoke-WUInstall), який працює просто на локальному сеансі Powershell в VM, але не оновлюється при запуску через віддалений Powershell.

Будь-який спосіб обійти цей?

Відповіді:


2

Через те, як Windows обробляє автентифікацію, неможливо використовувати CMDKEY для встановлення облікових даних за допомогою віддаленого сеансу PowerShell, це потрібно робити в інтерактивному режимі при використанні CMDKEY.

Цитувати Дон Джонса з теми, що шукає відповідь, аналогічну вашій:

Це обмеження команди Cmdkey - насправді не PowerShell. Але це пов'язано з тим, як Remotig обробляє облікові дані. Віддалений сеанс насправді не отримує облікових даних, він отримує делегований квиток, тому немає жодного маркера для власного збереження. Це все по дизайну, а не те, що ви можете переналаштувати.


2

Ви можете використовувати PsExec.exe Sysinternal, якщо ви не хочете використовувати заплановану задачу. Зазвичай, коли ви запускаєте сеанс PowerShell, він запускається в servicesпроцесі (ви можете підтвердити це, запустивши query sessionкоманду на віддаленому комп’ютері) замість локального користувача, який не працює в cmdkey.

Щоб подолати це, нам потрібно запустити cmdkey.exe в процесі локального користувача, який можна зробити, використовуючи PsExec.exe's -iпрапор, який

Запустіть програму так, щоб вона взаємоділа з робочим столом зазначеного сеансу на віддаленій системі. Якщо сеанс не вказаний, процес запускається в сеансі консолі.

Тепер завдання - отримати ідентифікатор сеансу локального користувача на віддаленій машині. Я домігся цього, запустивши query sessionкоманду, яка дає список активних сеансів на машині. Одне з можливих рішень -

$processId = Invoke-Command $session -ScriptBlock  {
param($user)
    $sessions = query session $user;
    return $sessions[1].split(" ", [System.StringSplitOptions]::RemoveEmptyEntries)[2];

} -ArgumentList ($user)

Тут $userміститься ім’я локального користувача на віддаленому комп’ютері.

Щойно ви отримаєте ідентифікатор сеансу, його можна просто виконати

PsExec \\<computer_name> -u <local_user_name> -p <password> -h -i $processId cmdkey.exe /generic:testtt /user:userr /pass:pass

Примітка:

  1. Можуть бути кращі способи отримати ідентифікатор сеансу користувача на віддаленій машині.
  2. Зараз під час запуску PsExec я знову налагоджую зв’язок із віддаленою системою, якого можна уникнути (я не тестував).
  3. Користувач, який виконує команду, повинен мати доступ адміністратора на віддаленій машині.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.