FAQ 最佳实践 Windows相关
WinRM服务应用及配置说明

行云管家WinRM服务应用及配置说明

一、什么是winRM服务

1.1、winRM服务介绍

Windows远程管理(WinRM)服务是Windows Server 2003 R2以上版本中一种新式的方便远程管理的服务。通过WinRM服务,便于在日常工作中远程管理服务器,或通过脚本同时管理多台服务器,来提高工作效率。

我们在运维Windows服务器时,通常是用RDP协议来访问服务器,由于RDP是一种图形化协议,导致运维人员无法像SSH一样通过命令行终端的方式来对Windows服务器进行运维操作。RDP协议的这一缺点,使得Windows无法通过远程来执行一些自动化批量命令,例如传输文件、远程执行脚本等。

1.2、如何配置WinRM服务

WinRM服务基于HTTP(HTTPS)协议,使用5985端口(HTTPS使用5986端口)。按照微软官方的介绍:Windows2008 R2以上版本的操作系统,默认开启WinRM服务,因此,在使用时只需将防火墙相应的5985(或5986)端口开放即可;

(1)如何确认WinRM服务是否开放?

以管理员身份在CMD中执行以下命令:

winrm e winrm/config/listener

若返回错误信息,表示WinRM未启动;

若返回以下信息,表示已启动:

(2)如何开启WinRM服务?

若WinRM未启用,以管理员权限运行PowerShell,然后输入以下命令:

enable-psremoting

看到上述界面,表示WinRM启动成功。

二、winRM在行云管家上的应用

2.1、基于winRM的功能

行云管家在以往版本中,为解决Windows远程命令执行问题,采用了Agent方案,但由于Agent接受程度不高,同时Agent的批量化安装同样依赖远程命令执行,这就导致了“鸡生蛋蛋生鸡”的哲学问题。

目前,在V6.4版本中,行云管家已经尝试将WinRM作为Windows账号自动改密的执行方案。未来,行云管家将全面开始采用WinRM服务作为Windows远程管理的解决方案。

在业界,WinRM已经被广泛接受,微软官方也在逐渐向Linux看齐,甚至在未来发布的Windows Server,将支持只有Server Core而没有GUI的Windows。而这种系统的管理方式,就是WinRM。

2.2、使用前要做哪些配置

在现在GUI形式的Windows上,若使用域控账号或Administrator执行远程管理,由于Windows将域账户认为是可信账户,因此无需任何配置,即可完美执行远程命令。

但要想使用本地非Administrator账号通过WinRM进行远程管理,会受到UAC(User Account Control)的影响,当使用非Administrator账号执行任何操作时,均会弹出UAC确认窗口,需要用户手动点击“是”按钮进行确认,如下图:

那么问题来了:在执行远程命令时,运维人员并没有进到操作系统界面,无法看到此提示,更不用说确认了,必然导致远程命令执行失败。

针对此问题,微软提供了一种远程操作关闭UAC提示的策略配置,只需要在注册表中配置LocalAccountTokenFilterPolicy = 1,即可在远程执行命令时,不进行UAC提示,但此策略不影响Windows本地操作,因此具有一定安全性。

具体配置操作为以管理员身份打开CMD,并执行以下命令:

reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

进行上述配置后,使用本地非管理员账号,也可完美远程执行命令。

三、参考材料

(1)微软WinRM服务介绍:

https://docs.microsoft.com/en-us/windows/win32/winrm/portal

(2)微软UAC介绍:

https://docs.microsoft.com/en-us/troubleshoot/windows-server/windows-security/user-account-control-and-remote-restriction

(3)微软对于远程UAC提示的说明:

https://docs.microsoft.com/en-US/troubleshoot/windows-server/windows-security/user-account-control-and-remote-restriction