Không thể xác thực CredSSP để hoạt động trong PowerShell


10

Khi cố gắng tạo tập lệnh PowerShell bằng cách sử dụng từ xa, tôi gặp phải vấn đề mà tôi tin là vấn đề hai bước . Trong bài viết đó, Perriman đưa ra một mô tả ngắn gọn về vấn đề cũng như các bước cụ thể để giải quyết vấn đề (gần như không đáng kể nếu bạn biết các lệnh, nhưng đối với một người ít quen thuộc như tôi, thông tin đó là vô giá!).

Tôi đã chạy Enable-WSManCredSSP Servertrên máy chủ Win7 của mình mà không gặp sự cố, nhưng cố gắng chạy Enable-WSManCredSSP Client –DelegateComputer <FQDN of the server>trên máy khách Win7 của tôi đã phát sinh lỗi này:

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

Chạy winrm quickconfig xác nhận máy chủ của tôi đang chạy 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 xác nhận rằng máy chủ của tôi đã sẵn sàng chấp nhận thông tin đăng nhập từ khách hàng:

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

Tôi cũng tìm thấy bài viết của Boessen về WinRM trong đó anh ấy mô tả thiết lập WinRM chung và tìm thấy một mẩu tin để có được một điểm dữ liệu hữu ích trong chẩn đoán; lệnh này chạy trên máy khách sử dụng công cụ winrs để truy cập máy chủ từ xa:

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

Lệnh đó đã trả về kết quả mong đợi, nội dung của thư mục gốc trên máy chủ, không có sự cố, xác nhận rằng FQDN của tôi là chính xác và WinRM được bật.

Boessen chỉ ra cổng 5985 là mặc định cho Win7; Lệnh này chạy trên máy chủ xác nhận giá trị 5985:

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

Câu hỏi: Tại sao tôi không thể thực thi lệnh Enable-WSManCredSSP ở phía máy khách?


Cập nhật 2011/06/07

Tôi đã tìm thấy một giải pháp cho câu hỏi trên: gọi Enable-PSRemote , được quảng cáo để cấu hình một máy tính để nhận các lệnh từ xa, cho phép Enable-WSManCredSSP trên máy khách hoạt động thành công! Tò mò, nhưng trang người đàn ông của nó cho thấy nó thực hiện một số hành động khác nhau, vì vậy tôi cho rằng một trong những người đó đã vô tình làm những gì tôi cần.

Nhưng sau đó tôi đã đạt được một rào cản khác khi tôi cố gắng sử dụng xác thực CredSSP. Đây là lệnh:

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

Và đây là câu trả lời:

Kết nối với máy chủ từ xa không thành công với thông báo lỗi sau:
Máy khách WinRM không thể xử lý yêu cầu. Chính sách máy tính không cho phép
ủy quyền của thông tin người dùng đến máy tính mục tiêu. Sử dụng gpedit.msc
và xem chính sách sau: Cấu hình máy tính
-> Mẫu quản trị -> Hệ thống -> Đoàn ủy nhiệm
-> Cho phép ủy nhiệm chứng chỉ mới. Xác minh rằng nó được kích hoạt và
được cấu hình với SPN phù hợp với máy tính mục tiêu. Ví dụ,
đối với tên máy tính mục tiêu "myserver.domain.com", SPN có thể là một trong
như sau: WSMAN /myserver.domain.com hoặc WSMAN / *. domain.com.
Để biết thêm thông tin, hãy xem chủ đề Trợ giúp về khởi động about_Remote_Troubledhoot.

Tôi đã xác minh các cài đặt giống như thông báo lỗi hữu ích đáng chú ý này và có vẻ như nó được cấu hình đúng.

Câu hỏi mới: Điều gì kết nối từ xa này với CredSSP không thành công?


Để trả lời, hãy ghi nhớ những điều sau: Hãy để tôi xua tan mọi ý kiến ​​rằng tôi biết tôi đang làm gì ở đây, bất kỳ sự xuất hiện nào trái ngược với sự hiểu biết. :-) Quản trị viên Windows không phải là lĩnh vực chuyên môn của tôi!


Một ví dụ điên rồ khác về việc MS thay đổi mọi thứ vì mục đích thay đổi nó !! Tôi không quan tâm đến việc di chuyển trực tiếp hoặc bất cứ điều gì tương tự, tôi chỉ muốn đăng nhập vào 3 máy chủ Hyper-V 2012 mà tôi có và tạo / xóa / bắt đầu / dừng / khởi động lại VM trên chúng, nó hoạt động hoàn hảo từ máy tính để bàn WIn7 của tôi, bây giờ tôi đang thắng 10 và tôi phải nhảy qua các vòng bên trái và trung tâm để làm điều gì đó đơn giản để làm trước đây, windows 10 hiện đang khiến tôi phát điên: - /
Shawty

Câu trả lời:


8

Tôi trở lại vấn đề này sau một thời gian gián đoạn ngắn để nhìn lại với đôi mắt tươi (cả tôi và đồng nghiệp) và quyết định quay trở lại vấn đề cơ bản một lần nữa:

Trên máy khách tôi đã thực thi (trong trình quản trị shell):

enable-wsmancredssp -role client -delegatecomputer devremvm03 -force

Trên máy chủ tôi đã thực thi (trong trình quản trị shell):

enable-wsmancredssp -role server -force

Cả hai đều trả về đầu ra bình thường cho thấy CredSSP hiện là "đúng".

Sau đó, tôi đã sử dụng mã tập thể dục sau đây để vượt qua mức độ phức tạp ngày càng tăng:

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

Tất cả những thứ đó đều nằm trong tập lệnh run.ps1 của tôi, do đó bản sao đã diễn ra như sau (và phần này chạy trong trình bao không phải của quản trị viên ):

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

Trước đây, chỉ có cơ bản, từ xa và chứng chỉA làm việc. Bây giờ cả 5 công việc. Phù!


CredSSP là giải pháp tốt? Microsoft cho biết: Thận trọng: Xác thực Nhà cung cấp dịch vụ bảo mật thông tin xác thực (CredSSP), trong đó thông tin xác thực của người dùng được chuyển đến một máy tính từ xa để xác thực, được thiết kế cho các lệnh yêu cầu xác thực trên nhiều tài nguyên, chẳng hạn như truy cập vào chia sẻ mạng từ xa. Cơ chế này làm tăng rủi ro bảo mật của hoạt động từ xa. Nếu máy tính từ xa bị xâm phạm, thông tin đăng nhập được truyền tới nó có thể được sử dụng để kiểm soát phiên mạng.
Kiquenet

2

Khi tôi phải làm điều này, đây là những gì tôi đã làm để làm cho nó hoạt động (cũng có thể có một số cài đặt GPO, nhưng có vẻ như bạn đã được bảo hiểm).

Để cho phép CLIENT sử dụng CredSSP để kết nối với bất kỳ máy nào trong miền:

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"

Sau đó, tôi đã chạy như sau trên mỗi máy đích (máy chủ) để kích hoạt xác thực CredSSP:

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

Điều này tất nhiên yêu cầu bạn đang chạy tập lệnh với các quyền thích hợp. Điều này làm việc cho tôi - tôi hy vọng nó sẽ giúp bạn.


Cảm ơn lời đề nghị nhưng nó vẫn thất bại với kết quả tương tự.
Michael Sorens

Tôi không chắc chắn nếu điều này làm cho một sự khác biệt, nhưng bài viết gốc của tôi có thể đã gây hiểu nhầm. Tôi đã chạy tất cả các lệnh này từ máy CLIENT . Vì vậy, "$ computer" trong khối mã thứ hai ở trên là tên của máy chủ mà tôi đang cố gắng kết nối TO .
jbsmith

Tôi đã phần nào nhận ra điều đó bởi vì nó không có nghĩa là máy chủ phải có kiến ​​thức chuyên môn về khách hàng. Mặc dù vậy, tôi chỉ chạy lại toàn bộ chuỗi một lần nữa để chắc chắn, và nó không thành công với cùng một lỗi. Một biến thể khác: Tôi đã bỏ qua tham số -Authentication và xác nhận rằng mọi thứ khác trong câu lệnh của tôi đều hoạt động ( Invoke-Command { Write-Host "hello, world" } -computername $serverName -credential $testCred). Vì vậy, xác thực CredSSP là vấn đề nghiêm trọng.
Michael Sorens

Đồng ý - WinRM cơ bản là tốt; Tôi không biết vấn đề chính xác là gì, nhưng tôi nghi ngờ nó liên quan đến chính sách 'cho phép thông tin đăng nhập mới' và SPN mà bạn thiết lập. Tôi sẽ xem xét kỹ hơn về cài đặt chính sách đó và có lẽ đào sâu hơn một chút để đảm bảo kerberos của bạn hoạt động tốt. Liên kết này có vẻ hữu ích: [link] msdn.microsoft.com/en-us/l
Library / e309365 (v = vs85) .aspx

Tại sao sử dụng Connect-WSMan to Server, sử dụng tốt hơn máy chủ enable-wsmancredssp -role, không?
Kiquenet

1

Tôi đã nhận được nơi tôi có thể di chuyển một VM từ một máy chủ hyper-v 2012R2 sang một máy chủ khác, nhưng không thể di chuyển nó trở lại. (Tôi đang cố gắng sử dụng SAMBA 4.2 làm bộ điều khiển miền của mình và muốn xem liệu tôi có thể di chuyển trực tiếp với CredSSP hay không vì tôi không thể sử dụng ủy quyền bị ràng buộc với Samba4).

Cuối cùng, tôi đã đi đến hyper-v đang hoạt động và sao chép các mục đăng ký tại hklm: \ SOFTWARE \ Chính sách \ Microsoft \ Windows \ CredentialsDelegation sang hyper-v không hoạt động. Làm việc tốt cả hai cách sau đó.


Bản sao cây đăng ký làm việc cho tôi quá. hklm: \ SOFTWARE \ ... \ Credentials Nút phân phối không tồn tại, giá trị được lưu trữ trong hklm: \ SOFTWARE \ Wow6432Node \ ... \ CredentialsDelegation và trong HKEY_USERS \ ... \ Đối tượng chính sách nhóm \ ... \ CredentialDelegation.
Der_Meister 2/2/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.