PowerShell에서 CredSSP 인증을 사용할 수 없습니다


10

원격 기능을 사용하여 PowerShell 스크립트를 만들려고 할 때 이중 홉 문제 라고 생각했습니다 . 이 기사에서 Perriman은 문제에 대한 간결한 설명과 문제를 해결하기위한 특정 단계를 제공합니다 (명령을 알고 있으면 거의 사소하지만 자신과 친숙하지 않은 사람에게는 그 정보가 매우 중요합니다!).

나는 도망 Enable-WSManCredSSP Server사고없이 내 Win7에 서버에 있지만 실행하려고 Enable-WSManCredSSP Client –DelegateComputer <FQDN of the server>이 오류를 생성 한 내 Win7에 클라이언트에서 :

Enable-WSManCredSSP : The client cannot connect to the destination specified
in the request. Verify that the service on the destination is running and
is accepting requests.
Consult the logs and documentation for the WS-Management service running
on the destination, most commonly IIS or WinRM. If the destination
is the WinRM service, run the following com mand on the destination
to analyze and configure the WinRM service: "winrm quickconfig".

winrm quickconfig를 실행하면 서버에서 WinRM이 실행되고 있음을 확인했습니다.

WinRM already is set up to receive requests on this machine.
WinRM already is set up for remote management on this machine.

그리고 Get-WSManCredSSP 는 서버가 클라이언트의 자격 증명을 수락 할 준비가되었음을 확인했습니다.

The machine is not configured to allow delegating fresh credentials.
This computer is configured to receive credentials from a remote client computer.

또한 Wines에 대한 Boessen의 기사에서 일반적인 WinRM 설정에 대해 설명하고 진단에 유용한 데이터 포인트를 얻기위한 하나 의 정체를 발견했습니다 . 클라이언트에서 실행되는이 명령은 winrs 도구를 사용하여 서버에 원격으로 액세스합니다.

winrs -r:http://<FQDN of my server>:5985 -u:<myDomain>\msorens "dir c:\"

이 명령은 서버에있는 루트 디렉토리의 내용 인 예상 된 결과를 사건없이 반환하여 FQDN이 올 바르고 WinRM이 활성화되어 있음을 확인했습니다.

Boessen은 포트 5985가 Win7의 기본값임을 나타냅니다. 서버에서이 명령을 실행하면 값 5985가 확인됩니다.

get-item wsman:\localhost\listener\listener*\port

질문 : 클라이언트 쪽에서 Enable-WSManCredSSP 명령을 실행할 수없는 이유는 무엇입니까?


2011.06.07 업데이트

위의 질문에 대한 해결책을 찾았습니다 .Enable-PSRemoting 호출 , 원격 명령 을 수신 하도록 컴퓨터를 구성하도록 알리고 클라이언트 의 Enable-WSManCredSSP 가 성공적으로 작동했습니다! 호기심이 많지만 매뉴얼 페이지 에 여러 가지 다른 작업이 수행되어 있음을 나타내므로 부주의하게 필요한 것을 수행했다고 가정합니다.

그러나 CredSSP 인증을 사용하려고 할 때 또 다른 장애물에 도달했습니다. 명령은 다음과 같습니다.

Invoke-Command { Write-Host "hello, world" } -computername $serverName `
-credential $testCred  -Authentication Credssp

그리고 여기에 응답이 있습니다 :

다음 오류 메시지와 함께 원격 서버에 연결하지 못했습니다 :
WinRM 클라이언트가 요청을 처리 할 수 ​​없습니다. 컴퓨터 정책은 허용하지 않습니다
대상 컴퓨터에 사용자 자격 증명 위임 gpedit.msc 사용
다음 정책을 확인하십시오. 컴퓨터 구성
-> 관리 템플릿-> 시스템-> 자격 증명 위임
-> 새로운 자격 증명 위임을 허용합니다. 활성화되어 있는지 확인하고
대상 컴퓨터에 적합한 SPN으로 구성됩니다. 예를 들어
대상 컴퓨터 이름 "myserver.domain.com"의 경우 SPN은 다음 중 하나 일 수 있습니다.
WSMAN /myserver.domain.com 또는 WSMAN / *. domain.com.
자세한 내용은 about_Remote_Troubleshooting 도움말 항목을 참조하십시오.

이 유용한 오류 메시지가 제안한대로 설정을 확인했으며 올바르게 구성된 것처럼 보입니다.

새로운 질문 : CredSSP와의이 원격 연결 시도가 실패하는 이유는 무엇입니까?


대답 할 때 다음 사항을 명심하십시오. 여기서 내가하고있는 일을 알고있는 개념, 그 반대의 모습에도 불구하고 미리 말하겠습니다. :-) Windows 관리자는 저의 전문 분야가 아닙니다!


MS가 그것을 바꾸기 위해 물건을 바꾸는 또 다른 미친 예! 나는 실시간 마이그레이션이나 그와 비슷한 것에 관심이 없으며, 내가 가지고있는 3 개의 Hyper-V 2012 서버에 로그인하여 VM을 생성 / 삭제 / 시작 / 중지 / 재부팅 할 수 있기를 원합니다. 내 WIN7 바탕 화면, 지금 나는 승리 10에 있고 이전에 할 수있는 간단한 일을하기 위해 왼쪽과 중앙을 뛰어 넘어야합니다 .Windows 10은 현재 나를 피의 미치게합니다 :-/
shawty

답변:


8

나는 신선한 눈 (나와 동료 모두)으로 다시보기 위해 잠시 동안이 부분으로 돌아와서 다시 기본으로 돌아 가기로 결정했습니다.

클라이언트에서 (관리자 셸에서) 실행했습니다.

enable-wsmancredssp -role client -delegatecomputer devremvm03 -force

내가 실행 한 서버에서 (관리자 셸에서) :

enable-wsmancredssp -role server -force

둘 다 CredSSP가 "true"임을 나타내는 정상 출력을 리턴했습니다.

그런 다음 다음 연습 문제 코드를 사용하여 점점 더 복잡한 수준을 살펴 보았습니다.

$block = {
  Write-Host ("hello, world: {0}, {1}" -f $env:USERNAME, (hostname))
}
$username = "test_user"
$password = "..."   
$adjPwd = $password | ConvertTo-SecureString -asPlainText -Force
$testCred = (New-Object System.Management.Automation.PSCredential($username,$adjPwd))    

switch ($choice)
{
  "basic"       { Invoke-Command $block }
  "remote"      { Invoke-Command $block -computername $serverName }
  "credentialA" { Invoke-Command $block -computername $serverName -credential $testCred  }
  "credentialB" { Invoke-Command $block -computername $serverName -credential $testCred  -Authentication Credssp}
  "session"     { 
      $testSession = New-PSSession -computername $serverName -credential $testCred -Authentication Credssp
      if ($testSession) { Invoke-Command $block -Session $testSession; Remove-PSSession $testSession }
      }
}

모든 것이 내 run.ps1 스크립트에 있으므로 대화 내용은 다음과 같습니다 (이것은 비 관리자 셸 에서 실행 됨 ).

PS C:\> .\run.ps1 basic
hello, world: msorens, MyLocalMachine
PS C:\> .\run.ps1 remote MyRemoteServer
hello, world: msorens, MyRemoteServer
PS C:\> .\run.ps1 credentialA MyRemoteServer
hello, world: test_user, MyRemoteServer
PS C:\> .\run.ps1 credentialB MyRemoteServer
hello, world: test_user, MyRemoteServer
PS C:\> .\run.ps1 session MyRemoteServer
hello, world: test_user, MyRemoteServer

이전에는 기본, 원격 및 자격 증명 A 만 작동했습니다. 이제 5 개 모두 작동합니다. 아휴!


CredSSP는 좋은 솔루션입니까? Microsoft는 다음과 같이 말합니다.주의 : 사용자의 자격 증명이 인증을 위해 원격 컴퓨터로 전달되는 CredSSP (Credential Security Service Provider) 인증은 원격 네트워크 공유 액세스와 같은 둘 이상의 리소스에 대한 인증이 필요한 명령을 위해 설계되었습니다. 이 메커니즘은 원격 작업의 보안 위험을 증가시킵니다. 원격 컴퓨터가 손상된 경우 전달 된 자격 증명을 사용하여 네트워크 세션을 제어 할 수 있습니다.
Kiquenet

2

이 작업을 수행해야 할 때이 작업을 수행하기 위해 수행 한 작업입니다 (일부 GPO 설정이있을 수 있지만 해당 설정이 적용된 것 같습니다).

CLIENT가 CredSSP를 사용하여 도메인의 모든 시스템에 연결하도록하려면 다음을 수행하십시오.

Enable-WSManCredSSP -Role Client -DelegateComputer "*.my.domain.com" -Force | out-null
#the following is used because -delegatecomputer (above) doesn't appear to actually work properly.
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\Credssp\PolicyDefaults\AllowFreshCredentialsDomain -Name WSMan -Value "WSMAN/*.my.domain.com"

그런 다음 각 대상 컴퓨터 (서버)에서 다음을 실행하여 CredSSP 인증을 활성화했습니다.

Connect-WSMan -ComputerName $computer 
Set-Item "WSMAN:\$computer\service\auth\credssp" -Value $true 

물론 적절한 권한으로 스크립트를 실행해야합니다. 이것은 나를 위해 일했습니다. 도움이되기를 바랍니다.


제안에 감사하지만 여전히 같은 결과로 실패했습니다.
Michael Sorens

이것이 차이가 있는지 확실하지 않지만 원래 게시물이 오도되었을 수 있습니다. CLIENT 머신 에서이 명령을 모두 실행했습니다 . 그래서 두 번째 코드 블록에서 "$ 컴퓨터가"위에서 내가 연결을 시도되었음을 서버의 이름이었다 하려면 .
jbsmith

서버가 클라이언트에 대한 사전 지식을 가지고 있어야한다는 것이 합리적이지 않기 때문에 다소 이해했습니다. 그래도 전체 시퀀스를 다시 재생하여 동일한 오류로 실패합니다. 다른 변형 : -Authentication 매개 변수를 생략하고 내 문장의 다른 모든 것이 작동 함을 확인했습니다 ( Invoke-Command { Write-Host "hello, world" } -computername $serverName -credential $testCred). 따라서 CredSSP 인증은 엄격히 문제입니다.
Michael Sorens

합의-기본 WinRM은 괜찮습니다. 정확한 문제는 아니지만 '신규 자격 증명 허용'정책 및 설정 한 SPN과 관련이있는 것 같습니다. 이 정책 설정을 자세히 살펴보고 kerberos가 제대로 작동하는지 확인하기 위해 조금 더 깊이 파고들 것입니다. 이 링크는 도움이 될 것 같습니다. [link] msdn.microsoft.com/en-us/library/ee309365(v=vs.85).aspx
jbsmith

Enable-wsmancredssp-역할 서버를 더 잘 사용하는 Connect-WSMan을 서버로 사용하는 이유는 무엇입니까?
Kiquenet

1

하나의 Hyper-V 2012R2 서버에서 다른 서버로 VM을 실시간 마이그레이션 할 수있는 곳을 찾았지만 다시 마이그레이션 할 수 없었습니다. (SAMBA 4.2를 도메인 컨트롤러로 사용하려고하는데 Samba4에서 제한 위임을 사용할 수 없으므로 CredSSP로 실시간 마이그레이션 할 수 있는지 확인하고 싶었습니다).

궁극적으로 나는 작동하는 hyper-v로 가서 hklm : \ SOFTWARE \ Policies \ Microsoft \ Windows \ CredentialsDelegation의 레지스트리 항목을 작동하지 않는 hyper-v로 복사했습니다. 그 후 두 가지 방법 모두 잘 작동했습니다.


레지스트리 트리 사본도 저에게 효과적이었습니다. hklm : \ SOFTWARE \ ... \ CredentialsDelegation 노드가없고 값이 hklm : \ SOFTWARE \ Wow6432Node \ ... \ CredentialsDelegation 및 HKEY_USERS \ ... \ Group Policy Objects \ ... \ CredentialDelegation에 저장되었습니다.
Der_Meister
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.