2014-12-03 4 views
0

다른 서버에서 다른 Powershell 스크립트를 원격으로 호출하는 데 사용되는 Powershell 스크립트가 있습니다. 이 스크립트는 다른 서버에서 서비스를 종료하고 시작하는 데 사용됩니다. Powershell 스크립트는 내가 수행해야하는 모든 작업이 serverStartStop [START|STOP]을 호출하여 호출되는 방식으로 설정되며 자동으로 체계적으로 서버 목록으로 이동하여 각 서버의 서비스 목록을 끕니다.원격 호출에 현재 Powershell 자격 증명 사용

저는 최근 몇 가지 서비스를 시작한 후에 배치 스크립트를 실행해야하는 시스템으로 업그레이드했습니다. 배치 스크립트를 원격으로 호출 할 수 있지만 배치 스크립트는 네트워크의 공유에 액세스하려고하는 다른 명령을 호출합니다. 명령을 호출하는 데 사용되는 사용자에게 공유에 액세스 할 수있는 충분한 권한이 없으므로 명령이 실패합니다.

나는이 상황을 해결하고 Powershell의 Invoke-Command 커맨드 릿과 Windows 배치 용 runas 명령에 대한 연구를 수행했습니다. runas 명령은 사용자에게 암호를 묻습니다. 자동 스크립트이므로 허용되지 않습니다. 다른 사람이 내가 어떻게이 일을 깨끗하게 할 수 있고 초기 START 또는 STOP 호출을 만드는 것 이외의 다른 사용자 상호 작용없이 할 수있는 아이디어가 있습니까?

+0

Credssp를 사용하는'Invoke-Command '가 가장 일반적인 방법입니다. [이 질문에 대한 내 대답을 참조하십시오 (http://stackoverflow.com/questions/24903878/powershell-server-network-drive). –

답변

1

Invoke-Command의 -Credential 메서드는 사용자가 원하는 것일 수 있습니다. 이 방법은 암호화 된 방식으로 스크립팅 사용을위한 자격 증명 집합을 저장하는 데 매우 유용합니다.

Add-Type -assembly System.Security 

# String to Crypt 
$passwordASCII = Read-Host -Prompt "Enter the Password" 

# String to INT Array 
$enc = [system.text.encoding]::Unicode 
$clearPWD_ByteArray = $enc.GetBytes($passwordASCII.tochararray()) 

# Crypting 
$secLevel = [System.Security.Cryptography.DataProtectionScope]::LocalMachine 
$bakCryptedPWD_ByteArray = [System.Security.Cryptography.ProtectedData]::Protect($clearPWD_ByteArray, $null, $secLevel) 

# Store in Base 64 form 
$B64PWD_ByteArray = [Convert]::ToBase64String($bakCryptedPWD_ByteArray) 
Set-Content -LiteralPath c:\Temp\pass.txt -Value $B64PWD_ByteArray 

<#> 
Use... 
Add-Type -assembly System.Security 
$resCryptedPWD_ByteArray = [Convert]::FromBase64String((Get-Content -LiteralPath "$Password_File")) 
$secLevel = [System.Security.Cryptography.DataProtectionScope]::LocalMachine 
$clearPWD_ByteArray = [System.Security.Cryptography.ProtectedData]::Unprotect($resCryptedPWD_ByteArray, $null, $secLevel) 
$enc = [system.text.encoding]::Unicode 

...To retrieve the password from $Password_File 

Then use... 

$enc.GetString($clearPWD_ByteArray) 

...As your password 
</#> 
+0

감사합니다. 이 솔루션을 사용하여 스크립트에서 호출 된 서버에 암호를 저장했습니다. 그런 다음 만든 스크립트를 사용하여 .bat 파일을 호출하도록 스크립트를 수정했습니다. – sfedak

1

double hop problem과 비슷합니다. 두 번째 시스템에서 통과 할 수있는 자격 증명을 인증 할 수 없기 때문에 이러한 작업을 수행하는 것은 악명이 높습니다.

CredSSP is a solution 그러나 보안 위험이 높아 지므로주의해서 구성을 이해하고 올바르게 구성해야합니다.

+0

이것은 유용한 제안입니다. 약간 다른 경로로 가서 원격으로 호출되는 powershell 스크립트로 세션을 만들기로 결정했습니다. – sfedak