Назад | Перейти на главную страницу

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

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

PS C: \ WINDOWS \ system32> etsn -компьютер 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?

Попробуйте это, он меняет 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

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