수색…


소개

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.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow