开启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
配置如下图:
需要注意的是:
- 限定可以访问的源IP地址,例如你自己的管理机器。
- 指定端口
5985
- 指定协议
tcp
- 动作是允许。
保存之后,就可以在本机尝试访问
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