PowerShell
비밀 및 자격 증명 처리
수색…
소개
Powershell에서는 암호를 일반 텍스트로 저장하지 않으려면 다양한 암호화 방법을 사용하고 보안 문자열로 저장하십시오. 키 또는 보안 키를 지정하지 않을 경우 동일한 컴퓨터의 동일한 사용자 만 Keys / SecureKeys를 사용하지 않을 경우 암호화 된 문자열을 해독 할 수 있습니다. 동일한 사용자 계정으로 실행되는 프로세스는 동일한 컴퓨터에서 암호화 된 문자열을 해독 할 수 있습니다.
자격 증명 요청
자격 증명을 요구하는 경우 거의 항상 Get-Credential
cmdlet을 사용해야합니다.
$credential = Get-Credential
미리 채워진 사용자 이름 :
$credential = Get-Credential -UserName 'myUser'
사용자 정의 프롬프트 메시지 추가 :
$credential = Get-Credential -Message 'Please enter your company email address and password.'
일반 텍스트 비밀번호 액세스
[SecureString]
정보 오브젝트의 암호는 암호화 된 [SecureString]
입니다. 가장 간단한 방법은 암호화 된 암호를 저장하지 않는 [NetworkCredential]
을 얻는 것입니다.
$credential = Get-Credential
$plainPass = $credential.GetNetworkCredential().Password
도우미 메서드 ( .GetNetworkCredential()
)는 [PSCredential]
개체에만 있습니다.
[SecureString]
을 직접 처리하려면 .NET 메소드를 사용하십시오.
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secStr)
$plainPass = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
저장된 자격 증명 사용
암호화 된 자격 증명을 쉽게 저장하고 검색하려면 PowerShell의 기본 제공 XML 직렬화 (Clixml)를 사용하십시오.
$credential = Get-Credential
$credential | Export-CliXml -Path 'C:\My\Path\cred.xml'
다시 가져 오기 :
$credential = Import-CliXml -Path 'C:\My\Path\cred.xml'
기억해야 할 중요한 점은 기본적으로 Windows 데이터 보호 API를 사용하며 암호를 암호화하는 데 사용되는 키는 코드가 실행되는 사용자와 컴퓨터 에 따라 다릅니다.
따라서 암호화 된 자격 증명을 다른 사용자 나 다른 컴퓨터의 동일한 사용자가 가져올 수 없습니다.
다른 사용자 및 다른 컴퓨터에서 동일한 자격 증명의 여러 버전을 암호화하면 여러 사용자가 동일한 암호를 사용할 수 있습니다.
사용자 이름과 컴퓨터 이름을 파일 이름에 넣으면 동일한 코드가 하드 코딩 없이도 사용할 수있는 방식으로 모든 암호화 된 암호를 저장할 수 있습니다.
Encrypter
# run as each user, and on each computer
$credential = Get-Credential
$credential | Export-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
저장된 자격 증명을 사용하는 코드 :
$credential = Import-CliXml -Path "C:\My\Secrets\myCred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
실행중인 사용자에 대한 올바른 파일 버전이 자동으로로드됩니다 (또는 파일이 없기 때문에 실패합니다).
암호화 된 형식으로 자격 증명을 저장하고 필요시 매개 변수로 전달
$username = "[email protected]"
$pwdTxt = Get-Content "C:\temp\Stored_Password.txt"
$securePwd = $pwdTxt | ConvertTo-SecureString
$credObject = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
# Now, $credObject is having the credentials stored and you can pass it wherever you want.
## Import Password with AES
$username = "[email protected]"
$AESKey = Get-Content $AESKeyFilePath
$pwdTxt = Get-Content $SecurePwdFilePath
$securePwd = $pwdTxt | ConvertTo-SecureString -Key $AESKey
$credObject = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd
# Now, $credObject is having the credentials stored with AES Key and you can pass it wherever you want.