PowerShell Remoting là một công cụ tuyệt vời cho phép bạn kết nối và chạy lệnh trên máy tính từ xa thông qua WinRM. Nếu các máy tính được tham gia vào miền Active Directory, thì PSRemoting sử dụng Kerberos để xác thực với các máy chủ từ xa. Tuy nhiên, nếu máy tính của bạn nằm trong một nhóm làm việc, bạn sẽ phải sử dụng chứng chỉ NTLM (TrustedHosts) hoặc SSL để xác thực. Hãy xem cách cấu hình và sử dụng PSRemoting (WinRM) trong môi trường Nhóm làm việc (Non-Domain).

Trong ví dụ này, có hai máy chủ trong một nhóm làm việc Windows:

  • Máy trạm quản trị viên – 192.168.13.100
  • Máy tính của người dùng – 192.168.13.222

Nhiệm vụ của chúng ta là kết nối từ xa với máy tính của người dùng thông qua PowerShell Remoting.

Bước đầu tiên là kích hoạt và cấu hình WinRM trên máy chủ từ xa. Bạn sẽ phải kích hoạt WinRM cục bộ hoặc từ xa (ví dụ: sử dụng RDP hoặc psexec).

Đảm bảo rằng dịch vụ WinRM đang chạy trên máy tính người dùng mục tiêu:

Get-Service -Name “*WinRM*” | select status

Nếu dịch vụ không chạy, hãy bật nó:

Enable-PSRemoting

WinRM has been updated to receive requests.
WinRM service type changed successfully.
WinRM service started.
WinRM has been updated for remote management.
WinRM firewall exception enabled.
Configured LocalAccountTokenFilterPolicy to grant administrative rights remotely to local users.

Nếu Công cộng loại kết nối mạng được đặt trên máy tính, bạn sẽ thấy lỗi sau khi bật WinRM:

Set-WSManQuickConfig : ... WinRM firewall exception will not work since one of the network connection types on this machine is set to Public. Change the network connection type to either Domain or Private and try again.

Thay đổi loại mạng thành Riêng tư (Set-NetConnectionProfile -NetworkCategory Private) hoặc chạy lệnh dưới đây:

Enable-PSRemoting –SkipNetworkProfileCheck

Mở cổng TCP / 5985 trong Tường lửa của Bộ bảo vệ Windows để kết nối với WinRM. Cách dễ nhất là mở cổng Tường lửa của Windows bằng PowerShell. Trong ví dụ này, chúng tôi sẽ chỉ mở quyền truy cập từ xa cho địa chỉ IP của máy tính của quản trị viên (an toàn hơn), nhưng bạn có thể mở nó cho tất cả mọi người (chỉ định Bất kỳ thay vì địa chỉ IP):

Set-NetFirewallRule -DisplayName “Windows Remote Management (HTTP-In)” -RemoteAddress 192.168.13.100
Enable-NetFirewallRule -DisplayName “Windows Remote Management (HTTP-In)”

Trên máy tính của quản trị viên, hãy đảm bảo rằng máy tính của người dùng hiện chấp nhận các kết nối từ xa qua PSRemoting:

Test-NetConnection 192.168.13.222 –Port 5985
Test-WsMan 192.168.13.222

Tuy nhiên, nếu bạn cố gắng kết nối với máy tính người dùng từ xa bằng lệnh ghép ngắn Invoke-Command hoặc Enter-PSSession, lỗi sau sẽ xuất hiện:

Enter-PSSession 192.168.13.222

Enter-PSSession : Connecting to remote server 192.168.13.222 failed with the following error message: The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. PSRemotingTransportException.

WinRM HTTP Listener trên máy tính từ xa chỉ cho phép kết nối với xác thực Kerberos.

Get-ChildItem -Path WSMan:localhostServiceAuth

Các kiểu xác thực WSMan - kerberos và thương lượng

Để sử dụng xác thực Đàm phán với NTLM, máy tính của bạn phải tin cậy máy tính từ xa. Trong một miền, điều này đạt được bằng cách sử dụng Kerberos, trong khi trong môi trường nhóm làm việc, bạn sẽ phải thêm địa chỉ IP của máy tính vào TrustedHosts.

Thêm máy tính người dùng vào TrustedHosts trên máy tính của quản trị viên (bạn có thể thực hiện việc này bằng địa chỉ IP hoặc FQDN):

Set-Item wsman:localhostclientTrustedHosts -Value 192.168.13.222 -Force

Liệt kê các máy tính trong TrustedHosts:

get-Item WSMan:localhostClientTrustedHosts

Để xóa danh sách TrustedHosts:

Set-Item WSMan:localhostClientTrustedHosts -Value “” –Force

Để thêm một máy tính mới vào danh sách TrustedHosts, hãy sử dụng tùy chọn -Concatenate:

Set-Item WSMan:localhostClientTrustedHosts -Value 192.168.13.200 -Concatenate

Bạn cũng có thể cho phép kết nối từ xa với tất cả các máy tính (thông thường, nó không được khuyến khích vì một trong những nhược điểm lớn của xác thực NTLM là dễ bị tấn công bởi các cuộc tấn công độc hại khác nhau).

Set-Item wsman:localhostClientTrustedHosts -value *

Sau đó cố gắng kết nối với máy tính từ xa qua PSRemoting:

Enter-PSSession -ComputerName 192.168.13.222 -Credential 192.168.13.222root

Nhập mật khẩu quản trị viên của máy tính từ xa và đảm bảo rằng kết nối đã được thiết lập thành công (tên máy chủ hoặc địa chỉ IP của máy tính từ xa được hiển thị trong lời nhắc PowerShell).

enter-pssession trên máy tính nhóm làm việc

Giờ đây, bạn có thể thực thi các lệnh và tập lệnh trên các máy tính của nhóm làm việc từ xa bằng cách sử dụng Lệnh gọi. Ví dụ: khởi động lại máy tính từ xa:

Invoke-Command -ComputerName 192.168.13.222 -Credential 192.168.13.222root –ScriptBlock {Restart-Computer}

Hoặc chạy tập lệnh PowerShell:

Invoke-Command -ComputerName 192.168.13.222 -Credential 192.168.13.222root -FilePath c:ScriptsGetComputerInfo.ps1

Trong WinRM, bạn cũng có thể sử dụng HTTPS để kết nối với máy tính từ xa. Để thực hiện, bạn cần cấp chứng chỉ SSL trên một máy tính từ xa và nhập nó vào máy tính của quản trị viên. Trong trường hợp này, bạn không cần thêm địa chỉ IP máy tính từ xa vào danh sách TrustedHosts. Tìm hiểu thêm về cách định cấu hình PowerShell Remoting (WinRM) qua HTTPS.

Lưu ý rằng để xác thực trên máy tính từ xa, bạn phải nhập mật khẩu người dùng bằng cách sử dụng –Credential. Nếu bạn có nhiều máy tính trong mạng của mình với các mật khẩu quản trị cục bộ khác nhau, thì việc lưu trữ mật khẩu kết nối trong một vault sẽ rất tiện lợi. Nó có thể là kho mật khẩu Trình quản lý thông tin xác thực Windows hoặc một cửa hàng bên ngoài, như KeePass, LastPass, HashiCorp Vault, Azure Key Vault hoặc Bitwarden.

Bạn có thể sử dụng mô-đun Quản lý Bí mật PowerShell để truy cập các mật khẩu đã lưu trong một kho tiền như vậy. Bây giờ, để kết nối với một máy tính từ xa thông qua PSRemoting, chỉ cần:

  1. Ví dụ: lưu mật khẩu kết nối vào Trình quản lý thông tin xác thực: cmdkey /add:192.168.13.222 /user:root /pass:Password1
  2. Lấy tên và mật khẩu từ kho tiền bằng cách sử dụng mô-đun CredentialManager: $psCred = Get-StoredCredential -Target “192.168.13.222”
  3. Kết nối với máy tính từ xa bằng PSRemoting và mật khẩu đã lưu: Enter-PSSession -ComputerName 192.168.13.222 -Credential $psCred

Nếu bạn lưu trữ mật khẩu trong một loại vault khác, hãy sử dụng mô-đun Microsoft.PowerShell.SecretManagement để lấy thông tin đăng nhập đã lưu.

Trong các phiên bản PowerShell mới (v6 hoặc v7), bạn có thể sử dụng giao thức Secure Shell (SSH) để kết nối với máy tính từ xa thông qua PowerShell Remoting. Để thực hiện việc này, máy chủ SSH tích hợp phải được bật trong Windows. Bạn thậm chí có thể xác thực với Windows bằng khóa SSH:

Enter-PSSession -HostName [email protected]:22 -KeyFilePath c:PSyour_rsa_key