Skip to main content

开启Windows Server Core上的远程PowerShell管理

分类:  PowerShell 标签:  #脚本编程 #Windows Server Core #Windows 发布于: 2023-08-05 18:30:54

当安装和测试完成了windows Server Core的系统之后,仍然需要经常对系统进行维护和管理,我们可以使用常规的管理工具,例如服务管理工具, 或者是Windows Admin来进行管理,不过对于一台两台服务器,我们还可以利用PowerShell的远程管理工具进行管理,如下是如何在Azure上远程开启PowerShell管理的基本步骤。

首先使用远程桌面登录到系统中,运行如下的命令:

Enable-PSRemoting -SkipNetworkProfileCheck -Force

先开启配置,然后检查防火墙:

PS C:\Users\ghw> Get-NetFirewallRule -Name 'WinRM*' | Select-Object Name

Name
----
WINRM-HTTP-In-TCP
WINRM-HTTP-Compat-In-TCP
WINRM-HTTP-In-TCP-PUBLIC

PS C:\Users\ghw>         

可以看到有如上的防火墙选项,开启默认的防火墙:

Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress Any

注意
我们在开启防火墙时指定了-RemoteAddress 为Any, 这是因为在Azure上的虚拟机可以利用NSG进一步的限定来访问的源地址,如果您的机器之前没有NSG之类的访问,建议在防火墙上对于来源地址进行限定,例如指定一个明确的地址。

另外经过我测试发现,如果是要远程访问,即在公网访问,仅仅是开启上述防火墙还是不行的,仍然需要添加一个对外的防火墙:

New-NetFirewallRule -DisplayName "Port Open 5985" -Direction Inbound -Protocol TCP -LocalPort 5985 -Action allow

注意
必须开启上述防火墙,才可以正常访问。

然后我们需要在Azure的虚拟机NSG上配置规则,放行对于端口5985的访问。

注意
PowerShell的远程访问是基于WinRM远程管理框架的,该服务主要由windows服务winrm提供,开放的端口默认情况下5985, 如果是加密端口则是5986, 你可以使用netstat -ano确认一下端口监听的状态。

Azure上的NSG配置如下图:



需要注意的是:

  1. 限定可以访问的源IP地址,例如你自己的管理机器。
  2. 指定端口5985
  3. 指定协议tcp
  4. 动作是允许。

保存之后,就可以在本机尝试访问

PS C:\> $cred = Get-Credential

PowerShell credential request
Enter your credentials.
User: <your Account>
Password for user <Your Account>: **************

PS C:\> Enter-PSSession -ComputerName www.azuredeveloper.cn -Credential $cred
[www.azuredeveloper.cn]: PS C:\Users\ghw\Documents>

至此已经可以远程通过Powershell来管理你的系统了,这样的话,可以将远程桌面关闭,全程改为Powershell来管理了,不过需要注意的是使用以上的办法,powershell的通讯是在没有加密的情况下进行的,如果您需要加密Powershell的通讯,请参考微软官方给出的解决方案:
https://learn.microsoft.com/en-us/azure/virtual-machines/windows/connect-winrm