我有一个系统,比如说 10 个 Windows 7 Professional 工作站,加入到一个域中。
作为“紧急”系统关闭过程的一部分,我想要一种从 Linux 控制器(又是一个服务编排工具)触发远程关闭的机制。“紧急情况”这个词用引号引起来,因为它不是真正的紧急情况,但仍然需要一种机制,而不是简单地告诉用户关闭工作站。
所以,我看过psexec
,这几乎是理想的,除了似乎只能从另一台 Windows 机器触发。.. 我认为让 Windows 服务器触发工作站关闭程序并非不可能,但这并不理想。
我收集的一种选择是安装 Cygwin 和 OpenSSH,但坦率地说,这似乎很笨重。
理想情况下,我想要什么......是一个作为服务运行的程序,具有本地(或域)管理员权限,侦听端口,用于 SSL 加密的 RESTful API 调用,如http://workstation:8888/admin/shutdown?key=secretsharedkey
.
我是否需要在 C#.net 中编写一些东西,或者是否有用于跨平台触发 Windows 工作站关闭的工具?
net
使用Samba 包中的工具怎么样?例如:
您可能需要稍微不同的命令行选项,例如
-k
使用 Kerberos 进行身份验证;检查手册页。您可以使用winexe。它使用 RPC 调用在目标计算机上安装服务,然后使用该服务在其上执行命令。您可以指定凭据,Linux 服务器不必是域的成员。
请注意,它是基于 Samba 代码的;)
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 启动远程注册表
B)在 linux 机器上进行的部分设置:
1)安装“samba-common”包:
这取决于您的 linux 发行版,但对于 Debian 及其衍生版本(Ubuntu、Linux Mint、...),apt-get 命令可以这样执行:
apt-get 安装 samba-common
2) 要真正从 linux 关闭 windowsmachine,请运行以下命令:
net rpc shutdown -f -t 0 -C 'message' -U userName%password -I xxx.yyy.zzz.ttt
在哪里:
“-f”表示“强制”关机(我认为这是强制性的)
'-t 0' 是执行之前的延迟(0 表示'现在')。
'-U user%password' 是本地用户和他在 windows 机器上的密码(在 A 点被分配远程关机的那个)。
'-I' 是要关闭的 Windows 机器的 IP 地址。