WinRM端口:默認設置和自定義指南

WinRM和PowerShell Remoting是管理遠程Windows計算機時必不可少的功能。就像其他服務一樣,WinRM在特定情況下監聽特定端口。在本教程中,您將了解這些WinRM端口,甚至可以在需要時如何更改它們。

相關信息:PowerShell Remoting:最終指南

WinRM監聽器

WinRM(以及它運行的端口)中最重要的部分之一是WinRM監聽器。

WinRM監聽器在本質上是一個Web服務器。它通過HTTP和HTTPS進行通信,在Windows 7之前的版本中,它甚至默認使用與大多數Web服務器相同的端口80和443。

監聽器作為計算機上的一個服務運行,等待建立連接,就像普通的Web服務器一樣。

A WinRm listener can listen two different ways; HTTP or HTTPS. The WinRM port for HTTP is 5985 while the WinRm port for HTTPS is 5986, by default.

  • HTTP – 端口5985
  • HTTPS – 端口5986

相關信息:PowerShell Remoting:最終指南

連接到錯誤端口時的錯誤

如果您在更改端口時未添加防火牆規則,即使提供了端口,您仍將收到相同的錯誤消息。

更改WinRM端口

儘管Microsoft建議保持默認監聽端口以實現兼容性和易用性,但您可以更改它們。在默認端口存在衝突或防火牆限制阻止使用這些端口的情況下,這可能非常有用。

也许您已经设置了一个系统,配置为在自定义端口上连接到WinRM。当您尝试正常连接时,会收到以下错误信息:

Failed WinRM connection due to wrong port

如果是这样,那么现在是时候在服务器端更改WinRM端口了!

要更改WinRm端口,首先需要确定是否已经有一个在这些端口上监听的服务。

追踪现有连接

在Windows机器上发现正在使用的端口的最简单方法是使用netstat工具。Netstat检查系统上的所有活动端口,并在活动状态下返回源和目标IP和使用的端口。

在更改WinRm端口之前追踪侦听端口,请运行netstat -aon-aon开关:

  • 显示所有活动连接(a
  • 显示打开连接的进程的进程ID(o
  • 不尝试解析目标IP的任何DNS名称(n
Running netstat to find listening connections

例如,如果一个Web服务器正在侦听端口80,您将在Local Address列下看到本地地址以:80结尾的行。该行是您将看到连接正在使用的PID或进程ID的位置。

一旦您知道PID,您可以使用类似Get-Process PowerShell cmdlet的命令引用PID来查找进程名称。

Running Get-Process to find process name

虽然在这种情况下,您可以在上面看到进程名称只是System。这意味着该进程高度集成在操作系统中,可能是内建于Windows中的。

设置WinRM兼容端口

WinRM具有名为兼容端口的功能。兼容端口是为了向某些仅在HTTP端口80和HTTPS端口443上工作的遗留系统提供向后兼容性。如果您需要更改WinRm以侦听这些端口,请启用兼容性侦听器。

一旦您知道您没有任何其他东西在端口80和443上运行,请将WSMan侦听器设置为使用兼容性端口(HTTP使用80端口,HTTPS使用443端口)。

Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpListener -Value $true
 Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpsListener -Value $true

设置WinRM以侦听任何端口

如果出于某种原因,您需要配置WinRM以侦听非标准端口,您也可以这样做。操作如下:

  1. 查找侦听器名称。您可以使用Get-Item命令枚举所有WinRM侦听器来完成此操作。下面的命令列出了当前安装的所有侦听器(*)。
Get-Item WSMan:\localhost\Listener*
Getting all existing WinRm listeners

2. 接下来,使用上述显示的侦听器名称,使用Set-Item来配置每个侦听器,提供侦听器的路径和要更改的端口号。

Set-Item WSMan:\localhost\Listener\\Port -Value 

此時,WinRM 監聽器正在監聽正確的端口,但 Windows 防火牆可能會拒絕對這些端口的遠程連接。您需要打開這些端口。要這樣做,請運行以下命令。下面的 New-NetFirewallRule 創建一個 Windows 防火牆規則,以允許對自定義端口的所有入站 TCP 連接。

$FirewallParam = @{
     DisplayName = 'Custom WinRM Port Rule'
     Direction = 'Inbound'
     LocalPort = 
     Protocol = 'TCP'
     Action = 'Allow'
     Program = 'System'
 }
 New-NetFirewallRule @FirewallParam

相關: 禁用 Windows 防火牆: 探索多種方法

如果您沒有打開相應的 Windows 防火牆端口,當嘗試連接時,您會收到以下消息:

Failed WinRM connection due to Windows firewall

使用 PSRemoting 連接到自定義端口

現在,您已在 WinRM 服務器上成功設置和配置 WinRM,您需要使用 WinRM 客戶端進行連接測試。要這樣做,只需要一個額外的參數; Port

在使用任何 PSRemoting 命令(如 Invoke-CommandEnter-PSSession)時,請指定 Port 參數和成功建立連接的端口。

Enter-PSSession -ComputerName <hostname> -Port 1111
Successful WinRm connection

相關: Invoke-Command: 執行遠程代碼的最佳方法

Source:
https://adamtheautomator.com/winrm-port/