我有一个由 10 个 Windows 7 Professional 工作站组成的系统,这些工作站都加入到了一个域。
作为“紧急”系统关闭程序的一部分,我希望有一种从 Linux 控制器(反过来,它是一种服务编排工具)触发远程关闭的机制。“紧急”一词之所以加引号,是因为它不是真的紧急情况,但仍然需要一种机制,而不是简单地告诉用户关闭工作站。
所以,我研究了一下psexec
,这几乎是理想的,但似乎只能从另一台 Windows 机器上触发。...我想让 Windows 服务器触发工作站关机过程并非不可能,但这并不理想。
我了解到一个选项是安装 Cygwin 和 OpenSSH,但坦率地说,这似乎笨重。
理想情况下,我想要的是一个作为服务运行的程序,具有本地(或域)管理员权限,监听端口,进行 SSL 加密的 RESTful API 调用,例如http://workstation:8888/admin/shutdown?key=secretsharedkey
。
我是否需要用 C#.net 编写一些内容,或者是否存在可以跨平台触发 Windows 工作站关闭的工具?
答案1
如何使用net
Samba 包中的工具?
例如:
net rpc shutdown -S workstation1 -U Administrator -w example.com
您可能需要稍微不同的命令行选项,例如-k
使用 Kerberos 进行身份验证;检查手册页。
答案2
您可以使用操作系统。它使用 RPC 调用在目标计算机上安装服务,然后使用此服务在其上执行命令。您可以指定凭据,并且 Linux 服务器不必是域的成员。
当心是尽管基于 Samba 代码 ;)
答案3
RPC 是一种方式,但可能需要进行更多设置,特别是对于 Windows Vista、Windows 7 和其他 Windows 版本,以允许远程关机:
A)在 Win7 机器上进行的部分设置:
1)运行“secpol.msc”
在程序树中,打开“安全设置/本地策略/用户权限分配”
找到条目“从远程系统强制关机”
编辑条目,添加用于关机的具体用户(例如:nouknouk)
2)以管理员身份运行 regedit.exe
找到 HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System
创建一个名为“LocalAccountTokenFilterPolicy”的新注册表 DWORD(32) 值,然后为其赋值“1”
3)设置远程注册服务:
以管理员身份打开“cmd.exe”
执行以下两个命令:
sc config RemoteRegistry 启动 = 自动
sc 启动 RemoteRegistry
B)在 Linux 机器上进行的部分安装:
1)安装“samba-common”包:
这取决于你的 Linux 发行版,但对于 Debian 及其衍生版本(Ubuntu、Linux Mint 等),apt-get 命令可以像这样执行:
apt-get 安装 samba-common
2)要从 Linux 计算机实际关闭 Windows 计算机,请运行以下命令:
net rpc shutdown -f -t 0 -C ‘消息’ -U 用户名%密码 -I xxx.yyy.zzz.ttt
在哪里:
'-f' 表示“强制”关机(我认为这是强制性的)
'-t 0' 是执行之前的延迟(0 表示“现在”)。
'-U user%password' 是 Windows 机器上的本地用户及其密码(在 A 点被允许执行远程关机的机器)。
‘-I’ 是要关闭的 Windows 机器的 IP 地址。