可以從 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

相關內容