메시지를 표시하지 않고 Powershell에서 현재 사용자의 자격 증명 개체 가져오기
저는 여러 서버에 대해 자동화 도구를 통해 실행될 파워셸 스크립트를 가지고 있습니다.
원격 호출은 코드에 자격 증명을 표시하거나 노출할 필요 없이 도구의 서비스 계정을 사용하기 때문에 Windows 컴퓨터에서는 잘 작동합니다.
이 스크립트는 SharpSSH 패키지를 사용하는 SSH를 통해 Linux 시스템에 대해서도 실행됩니다.SharpSSH는 Powershell 사용자의 자격 증명을 자동으로 사용하지 않지만 사용자 이름과 암호, RSA 키 파일 또는PSCredential물건.
다음을 사용하여 자격 증명을 요청할 수 없습니다.Get-Credential, 자동화 툴을 통해 실행되기 때문입니다.코드에 사용자 이름과 비밀번호를 노출하거나 RSA 키를 두고 싶지 않습니다.저는 A를 건설하고 싶습니다.PSCredential현재 Powershell 사용자(서비스 계정)의 개체입니다.
괴로운[System.Net.CredentialCache]::DefaultNetworkCredentials공백을 표시하고,[System.Security.Principal.WindowsIdentity]::GetCurrent()필요한 대상이나 정보를 제공하지 않습니다.
인터넷을 만들 수 있는 방법이 있는 사람이 있습니까?PSCredential현재 사용자의 개체?아니면 이 문제에 대해 완전히 다른 대안이 될 수도 있습니까?
감사합니다!
윈도우 API를 사용하면 필요한 정보가 노출되지 않기 때문에 파워셸이 그들에게 접근할 수 없습니다.보안 서브시스템의 의도적인 기능입니다.이것이 작동할 수 있는 유일한 방법은 리눅스 시스템이 Active Directory(또는 실제로 모든 kerberos 설정)에 연결하는 등 호출 시스템을 신뢰하는 것입니다.
그 외에 이 정보를 어떻게든 저장하고 전달해야 합니다.
RSA 키를 사용자의 키 저장소에 저장하고 런타임에 추출할 수 있습니다( 를 사용).NET Crypto/Keystore libs). 따라서 코드를 사용하여 키를 저장하지 않습니다.그렇게 하면 키 자체가 OS에 의해 보호되고 발신 사용자가 인증될 때만 사용할 수 있습니다.설치해야 할 것이 하나 더 있지만 목표를 달성할 수 있는 유일한 방법일 수도 있습니다.
"[시스템]을 시도 중입니다.Net.CredentialCache]::DefaultNetworkCredentials는 공백으로 표시되며 [System].보안.주요한.창문들ID]::GetCurrent()는 필요한 개체나 정보를 제공하지 않습니다."
당신은 이미 답을 가지고 있습니다.이 방법을 사용하여 현재 로그인한 사용자의 자격 증명을 여러 스크립트로 전달합니다.
$Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$Username = $Credentials.UserName
$Password = $Credentials.Password
모든 종류의 읽을 수 있는 출력에 해당 값을 덤프하려고 하면 명백한 보안상의 이유로 해당 값이 비어 있지만 PSC redential 개체가 필요한 곳에서는 작동합니다.
크리덴셜 오브젝트에서 일반 텍스트로 암호를 가져올 수 있기 때문에 프롬프트를 표시하지 않고 암호를 얻을 수 있을지 의문입니다.
서비스 계정의 암호화 키를 사용하여 암호화하는 것은 어떻습니까?
간단한 예:
PowerShell을 서비스 계정으로 실행하고 다음을 실행하여 출력을 텍스트 파일에 저장하거나 예약된 작업 호출에 포함합니다.
$String = '<PASSWORD>'
ConvertFrom-SecureString -SecureString (ConvertTo-SecureString -String $String -AsPlainText -Force)
암호를 해독하고 암호를 사용하려면 예약된 작업에서 다음을 사용합니다.
$EncryptedString = '<ENCRYPTED PASSWORD FROM ABOVE>'
[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString -String $EncryptedString)))
그것이 효과가 있어야 해요.하지만 다른 컴퓨터에서 암호화된 암호를 재사용할 수 없거나 어떠한 이유로 로컬 키 저장소를 파괴하는 경우 :)
언급URL : https://stackoverflow.com/questions/3917779/get-current-users-credentials-object-in-powershell-without-prompting
'programing' 카테고리의 다른 글
| 내 Powershell 스크립트에서 Jenkins 변수를 사용하는 방법 (0) | 2023.09.21 |
|---|---|
| jQuery DataTables를 사용할 때 첫 번째 열에서 자동 정렬 사용 안 함 (0) | 2023.09.21 |
| 데이터베이스 파일이 매우 큰 sqlite의 성능 특성은 무엇입니까? (0) | 2023.09.21 |
| Google 차트에서 범례 숨기기 (0) | 2023.09.21 |
| Angular routing template url이 ASP에서 *.cshtml 파일을 지원합니까?순 MVC 5 프로젝트? (0) | 2023.09.21 |