
내 로컬 컴퓨터는 내가 관리하는 포리스트와 별도의 포리스트에 있는 도메인에 존재합니다. 결과적으로 저는 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으로 전달할 수 있습니까?
답변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