Можно ли получить доступ к зашифрованным учетным данным из сеанса PSSession?

Можно ли получить доступ к зашифрованным учетным данным из сеанса PSSession?

Моя локальная машина находится в домене в отдельном лесу от леса, который я администрирую. В результате я широко использую PSSessions. Хотя мне удалось зашифровать свои учетные данные и сохранить их в своем профиле на локальной машине, я попытался зашифровать свои учетные данные и сохранить их в своем профиле на удаленной машине и использовать их, когда я нахожусь внутри сеанса PowerShell. Ниже приведен пример:

PS C:\WINDOWS\system32> etsn -computer 192.168.1.2 -cr $mycred

[192.168.1.2]: PS C:\Users\challer\Documents> get-aduser -server dc01.domain.local -filter * -cr $mycred

После ввода этой команды я получаю следующее всплывающее окно:

«Предупреждение: Скрипт или приложение на удаленном компьютере 192.168.1.2 запрашивает ваши учетные данные. Вводите свои учетные данные, только если вы доверяете удаленному компьютеру и приложению или скрипту, которые их запрашивают».

Можно ли зашифровать, сохранить, сохранить на удаленном сервере учетные данные и получить к ним доступ из сеанса PSSession? Или можно ли передать зашифрованные учетные данные, хранящиеся локально, в сеанс PSSession?

решение1

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

$Session = New-PSSession -ComputerName dc01.domain.local -Credential $mycred
Invoke-Command -Session $Session -ScriptBlock { 
    $mycredRemote = $args[0] 
} -ArgumentList $mycred
Enter-PSSession -Session $Session

С этого момента $mycredRemoteсодержит ваши учетные данные.

решение2

Попробуйте это, это заменит SecureString на чистый текст, локально и удаленно:

$mycred=Get-Credential 
$remote = ($env:LOGONSERVER).Replace('\\','')
echo $mycred.Username
echo ([System.Runtime.InteropServices.marshal]::PtrToStringAuto(
    [System.Runtime.InteropServices.marshal]::SecureStringToBSTR(($mycred.Password))))

$Session = New-PSSession -ComputerName $remote -Credential $mycred
Invoke-Command -Session $Session -ScriptBlock { 
    $mycredRemote = $args[0] 
    echo $mycredRemote.Username
    echo ([System.Runtime.InteropServices.marshal]::PtrToStringAuto(
    [System.Runtime.InteropServices.marshal]::SecureStringToBSTR(($mycredRemote.Password))))
} -ArgumentList $mycred
Enter-PSSession -Session $Session

Связанный контент