PowerShell'de çalışmak için CredSSP kimlik doğrulaması alınamıyor


10

Uzaktan kumanda kullanarak bir PowerShell betiği oluşturmaya çalışırken, çift ​​sekmeli sorun olduğuna inandığım şeyle karşılaştım . Bu makalede Perriman, sorunun özlü bir açıklamasını ve sorunu çözmek için belirli adımları veriyor (komutları biliyorsanız neredeyse önemsiz, ancak benim gibi daha az tanıdık biri için bu bilgiler çok değerli!).

Enable-WSManCredSSP ServerOlay olmadan Win7 sunucumda koştum , ancak Enable-WSManCredSSP Client –DelegateComputer <FQDN of the server>Win7 istemcimde çalıştırmaya çalışırken bu hatayı oluşturdu:

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

Koşu winrm quickconfig benim sunucu WinRM'yi koşuyordu doğruladı:

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

Ve Al-WSManCredSSP benim sunucu bir istemciden kimlik bilgilerini kabul etmeye hazır olduğunu doğruladı:

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

Ayrıca Boessen'in WinRM ile ilgili makalesini buldum , burada genel WinRM kurulumunu açıkladı ve tanıda yararlı bir veri noktası elde etmek için bir tidbit buldu; istemcide çalıştırılan bu komut , sunucuya uzaktan erişmek için winrs aracını kullanır :

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

Bu komut beklenen sonucu, sunucudaki kök dizinin içeriğini, sorunsuz bir şekilde, FQDN'imin doğru olduğunu ve WinRM'nin etkin olduğunu doğruladı.

Boessen, 5985 numaralı bağlantı noktasının Win7 için varsayılan olduğunu; sunucuda çalıştırılan bu komut 5985 değerini onaylar:

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

Soru: İstemci tarafında Enable-WSManCredSSP komutunu neden yürütemiyorum?


2011.06.07 Güncellemesi

Yukarıdaki soruya bir çözüm buldu: çağrılırken -PSRemoting etkinleştirme , bir bilgisayar yapılandırmak için reklamı almaya uzak komutlar, izin Enable-WSManCredSSP başarıyla işe istemci üzerinde! Meraklı, ama onun adam sayfası bir dizi farklı eylem yaptığını gösterir, bu yüzden bunlardan birinin yanlışlıkla ihtiyacım olanı yaptığını varsayıyorum.

Ancak CredSSP kimlik doğrulamasını kullanmaya çalıştığımda başka bir birlikte gösterime ulaştım. İşte komut:

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

Ve işte yanıt:

Uzak sunucuya bağlanma aşağıdaki hata iletisiyle başarısız oldu:
WinRM istemcisi isteği işleyemiyor. Bilgisayar ilkesi izin vermiyor
kullanıcı kimlik bilgilerinin hedef bilgisayara devredilmesi. Gpedit.msc kullanın
ve aşağıdaki politikaya bakın: Bilgisayar Yapılandırması
-> Yönetim Şablonları -> Sistem -> Kimlik Delegasyonu
-> Yeni Kimlik Bilgilerinin Devredilmesine İzin Ver. Etkin olduğunu doğrulayın ve
hedef bilgisayara uygun bir SPN ile yapılandırılmış. Örneğin,
"myserver.domain.com" hedef bilgisayar adı için SPN,
aşağıdakiler: WSMAN /myserver.domain.com veya WSMAN / *. domain.com.
Daha fazla bilgi için about_Remote_Tro Sorun Giderme Yardım konusuna bakın.

Bu son derece yararlı hata mesajının önerdiği gibi ayarları doğruladım ve düzgün yapılandırılmış gibi görünüyor.

Yeni soru: CredSSP ile bu uzaktan bağlantı denemesi başarısız oluyor?


Yanıtlarken lütfen aşağıdakileri aklınızda bulundurun: Burada ne yaptığımı bildiğim herhangi bir kavramı, aksine herhangi bir görüntüyü önceden dağıtmama izin verin. :-) Windows admin benim uzmanlık alanım değil!


Yine de MS'i değiştirmek uğruna değişen bir başka delice örneği !! Canlı geçiş veya bunun gibi bir şeyle ilgilenmiyorum, sadece sahip olduğum 3 Hyper-V 2012 sunucusuna giriş yapabilmek ve üzerinde VM'leri oluşturmak / silmek / başlatmak / durdurmak / yeniden başlatmak istiyorum, mükemmel çalıştı WIn7 masaüstüm, şimdi 10 kazanıyorum ve daha önce yapmak basit bir şey yapmak için sola ve merkeze atlamak zorundayım, Windows 10 şu anda beni kanlı deli ediyor: - /
shawty

Yanıtlar:


8

Kısa bir aradan sonra tekrar taze gözlerle (hem benim hem de bir iş arkadaşımla) bakmak için geri döndüm ve tekrar temel bilgilere dönmeye karar verdim:

Yürüttüğüm istemcide (yönetici kabuğunda):

enable-wsmancredssp -role client -delegatecomputer devremvm03 -force

Yürüttüğüm sunucuda (yönetici kabuğunda):

enable-wsmancredssp -role server -force

Her ikisi de CredSSP'nin artık "doğru" olduğunu gösteren normal çıktı döndürdü.

Daha sonra, artan karmaşıklık düzeylerini dolaşmak için aşağıdaki egzersiz kodunu kullandım:

$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 }
      }
}

Bunların hepsi benim run.ps1 betiğimde transkript aşağıdaki gibi gitti (ve bu yönetici olmayan bir kabukta koştu ):

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

Önceden, yalnızca temel, uzak ve kimlik bilgisi çalışıyordu. Şimdi hepsi 5 çalışıyor. Whew!


CredSSP iyi bir çözüm mü? Microsoft diyor ki: Dikkat: Kullanıcının kimlik bilgilerinin kimlik doğrulaması yapılacak uzak bir bilgisayara aktarıldığı Kimlik Bilgisi Güvenlik Servis Sağlayıcısı (CredSSP) kimlik doğrulaması, uzak ağ paylaşımına erişim gibi birden fazla kaynakta kimlik doğrulaması gerektiren komutlar için tasarlanmıştır. Bu mekanizma uzaktan çalışmanın güvenlik riskini artırır. Uzak bilgisayarın güvenliği ihlal edilirse, bilgisayara geçirilen kimlik bilgileri ağ oturumunu denetlemek için kullanılabilir.
Kiquenet

2

Bunu yapmak zorunda kaldığımda, onu çalıştırmak için yaptığım şey bu oldu (bazı GPO ayarları da olabilirdi, ancak bunlar örtbas edilmiş gibi görünüyor).

MÜŞTERİ'nin etki alanındaki herhangi bir makineye bağlanmak için CredSSP kullanmasını sağlamak için:

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"

Sonra CredSSP kimlik doğrulamasını etkinleştirmek için her hedef makinede (sunucu) aşağıdakileri çalıştırdım:

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

Bu elbette betiği uygun izinlerle çalıştırmanızı gerektirir. Bu benim için çalıştı - umarım sana yardımcı olur.


Öneri için teşekkürler ama yine de aynı sonuçla başarısız oldu.
Michael Sorens

Bunun bir fark yaratıp yaratmadığından emin değilim, ancak orijinal yazım yanıltıcı olabilir. Tüm bu komutları MÜŞTERİ makinesinden çalıştırdım. Yani ikinci kod bloğu "$ bilgisayar" Yukarıdaki ben bağlamak için uğraş verdiği sunucunun adı oldu TO .
jbsmith

Biraz bunu anladım çünkü sunucu istemcilerin a priori bilgiye sahip olması mantıklı değildi. Yine de emin olmak için tüm diziyi tekrar düzenlerim ve aynı hatayla başarısız olur. Başka bir varyasyon: -Authentication parametresini atladım ve ifademdeki diğer her şeyin ( Invoke-Command { Write-Host "hello, world" } -computername $serverName -credential $testCred) çalıştığını doğruladım . Bu yüzden CredSSP kimlik doğrulaması kesinlikle sorun.
Michael Sorens

Kabul edildi - temel WinRM gayet iyi; Kesin sorunun ne olduğunu bilmiyorum, ancak bunun 'yeni kimlik bilgilerine izin ver' politikası ve ayarladığınız SPN ile ilgili olduğundan şüpheleniyorum. Bu politika ayarını daha yakından inceleyebilirim ve belki de kerberosunuzun düzgün çalıştığından emin olmak için biraz daha derine inebilirim. Bu bağlantı faydalı olabilir: [bağlantı] msdn.microsoft.com/en-us/library/ee309365(v=vs.85).aspx
jbsmith

Neden Connect-WSMan to Server kullanıyorsunuz, enable-wsmancredssp -role sunucusunu daha iyi kullanın, değil mi?
Kiquenet

1

Bir VM'yi bir hyper-v 2012R2 sunucusundan diğerine geçirebildiğim yeri aldım, ancak geri taşıyamadım. (SAMBA 4.2'yi etki alanı denetleyicim olarak kullanmaya çalışıyorum ve Samba4 ile kısıtlanmış delegasyonu kullanamadığım için CredSSP ile mi yaşayabileceğimi görmek istedim).

Nihayet çalışan hyper-v gitti ve hklm: \ SOFTWARE \ Policies \ Microsoft \ Windows \ CredentialsDelegation kayıt defteri girdilerini çalışmayan hyper-v için kopyaladı. Bundan sonra her iki şekilde de iyi çalıştı.


Kayıt defteri kopyası da benim için çalıştı. hklm: \ SOFTWARE \ ... \ CredentialsDelegation düğümü yoktu, değer hklm: \ SOFTWARE \ Wow6432Node \ ... \ CredentialsDelegation ve HKEY_USERS \ ... \ Group Policy Objects \ ... \ CredentialDelegation içinde saklandı.
Der_Meister
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.