programing

PSC Credential을 파일에 저장합니다.

powerit 2023. 10. 20. 14:52
반응형

PSC Credential을 파일에 저장합니다.

파일에 암호를 저장할 수 있다는 것을 알고 있습니다.

Read-Host "Enter Password" -AsSecureString |  ConvertFrom-SecureString | Out-File $passwordfile

파일에서 읽어봅니다.

$secpasswd = (Get-Content $passwordfile | ConvertTo-SecureString)

PSCredential 개체를 만듭니다.

$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)

하지만 사용자 이름과 비밀번호가 함께 저장되도록 파일에 $credential을 저장할 수 있을까요?

Windows가 아닌 플랫폼 업데이트

이 답변이 처음 작성된 이후로 많은 것이 바뀌었습니다.최신 버전의 PowerShell은 .net core를 기반으로 하며 크로스 플랫폼을 실행합니다.이 전체 답변을 가능하게 하는 기본 유형은 다음과 같습니다.[securestring]이를 뒷받침하는 보안 및 암호화는 오픈 소스가 아니며 크로스 플랫폼을 사용할 수 없는 Windows의 DPAPI(Data Protection API)에서 비롯됩니다.

따라서 Windows가 아닌 플랫폼에서도 동일한 코드를 사용할 수 있지만 이를 지원하는 암호화는 전혀 없습니다.

tl;dr: Windows 이외의 플랫폼에서는 이를 사용하지 마십시오.

관련 질문에 대한 자세한 내용은 이 훌륭한 답변에서 확인할 수 있습니다.


암호화된 자격 증명을 쉽게 저장하고 검색하려면 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를 사용하며 암호를 암호화하는 데 사용되는 키는 사용자와 코드가 실행 중인 컴퓨터 모두에 고유합니다.

따라서 암호화된 자격 증명을 다른 컴퓨터의 다른 사용자나 동일한 사용자가 가져올 수 없습니다.

실행 중인 사용자와 컴퓨터가 서로 다른 여러 버전의 동일한 자격 증명을 암호화하면 여러 사용자가 동일한 비밀을 사용할 수 있습니다.

파일 이름에 사용자와 컴퓨터 이름을 입력하면 암호화된 모든 비밀을 저장하여 동일한 코드에서 하드 코딩 없이 사용할 수 있습니다.

암호화기

# 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"

실행 중인 사용자의 올바른 파일 버전이 자동으로 로드되거나 파일이 존재하지 않아 실패합니다.

Briantist & Graham을 기반으로 한 건축물:이렇게 하면 자격 증명을 요청하고 첫 번째 실행 시 저장한 다음 동일한 코드의 다음 실행 시 다시 사용합니다.제 경우에는 H 드라이브는 사용자의 홈 디렉토리로, 보안이 아닌 청결을 위해 사용됩니다.

# the path to stored credential
$credPath = "H:\Secrets\Cred_${env:USERNAME}_${env:COMPUTERNAME}.xml"
# check for stored credential
if ( Test-Path $credPath ) {
    #crendetial is stored, load it 
    $cred = Import-CliXml -Path $credPath
} else {
    # no stored credential: create store, get credential and save it
    $parent = split-path $credpath -parent
    if ( -not ( test-Path $parent ) ) {
        New-Item -ItemType Directory -Force -Path $parent
    }
    $cred = get-credential
    $cred | Export-CliXml -Path $credPath
}

이 코드 블록은 필요한 모든 스크립트에서 삭제할 수 있으며 그 이후로 문제는 어느 정도 해결됩니다.

응용 프로그램이 허용하는 경우 성공적인 자격 증명을 작성하기 전에 확인할 수도 있습니다.암호가 변경되면 사용자는 파일을 삭제해야 합니다.[edit: 코드에 괄호가 없습니다]

언급URL : https://stackoverflow.com/questions/40029235/save-pscredential-in-the-file

반응형