【发布时间】:2012-03-30 04:22:15
【问题描述】:
我在 linux 机器上运行一个应用程序。通过将 Windows 机器的 IP 地址作为输入,应用程序必须关闭 Windows 机器。如果机器运行相同的操作系统,这很容易,但我很困惑如何在跨操作系统中做到这一点。
【问题讨论】:
我在 linux 机器上运行一个应用程序。通过将 Windows 机器的 IP 地址作为输入,应用程序必须关闭 Windows 机器。如果机器运行相同的操作系统,这很容易,但我很困惑如何在跨操作系统中做到这一点。
【问题讨论】:
可能需要进行更多设置,尤其是对于 Windows Vista、Windows 7 和其他 Windows 版本,以允许远程关机:
A 部分)在 Windows 机器上:
1) 添加远程关机安全策略:
运行secpol.msc
在程序树中,打开Security Settings > Local Policies > User rights Assignment
找到条目Force shutdown from a remote system
编辑条目,添加将用于关机的 Windows 用户帐户(例如:nouknouk)
2) 添加注册表项以禁用 UAC 远程限制:
以管理员身份运行regedit.exe
查找HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System
创建一个名为 LocalAccountTokenFilterPolicy 的新注册表 DWORD(32) 值,然后为其分配值 1
3) 启动远程注册服务:
以管理员身份打开cmd.exe
执行以下两条命令:
sc config RemoteRegistry start= auto
sc start RemoteRegistry
B 部分)在 Linux 机器上:
1) 安装包samba-common:
这取决于您的 Linux 发行版,但对于 Debian 及其衍生版本(Ubuntu、Linux Mint...),apt-get 命令可以这样执行:
apt-get install samba-common
2) 要真正从 Linux 关闭您的 Windows 机器,请运行以下命令:
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地址。
【讨论】:
Remote Service Management 出现。
从 linux 关闭 windows 系统的命令 -:
$ net rpc -S <ip address> -U <username>%<password> shutdown -t 1 -f
此命令可以从 bash 发出,甚至可以在 cron 作业中设置以在特定时间关闭计算机,并且默认情况下,此命令随许多发行版一起提供。
【讨论】:
-r 开关。
请务必注意,如果相关用户名没有设置密码,上述解决方案将不起作用(至少在我的情况下是这样)。
对于windows 10(或更低版本,可能没有检查)用户必须进入防火墙设置并启用“远程服务管理”,Linux 机器才能通过 rpc 连接。
【讨论】:
这取决于你的基础设施——你如何对 Windows 机器进行身份验证,你是否可以自己配置它们等等。如果是我,我会把 Cygwin 放在 Windows 盒子上,然后 ssh 给它们并运行shutdown -h。当然,当然还有其他方法可以做到这一点。
【讨论】:
您需要一种在 Windows 机器上启动 shell 的方法,以便可以运行 Windows 内置的 shutdown 命令。
您可以为此安装 Cygwin,然后在 Windows 中安装 SSH 守护程序。一旦运行,您的 Linux 机器就可以在 Windows 机器上运行命令,就像它是另一台 Linux 机器一样。
Here are some instructions for setting up Cygwin's sshd in Windows.
【讨论】:
选项 1:在 windows 上安装 SSH 服务器。从任何机器登录到此服务器并调用关机命令。我们使用 Interix(微软的类 unix 环境)。它带有一个 telnet 服务器 - 允许从其他机器调用 windows 命令..
另一种选择: 如果你在 windows 上安装了 samba,它可以连接到 windows 并调用 windows 命令
net rpc SHUTDOWN ...
另一种选择: 使用关机命令尝试 rdesktop 到 windows 机器(我用它来运行其中已关机的 windows 批处理脚本,不确定是否可以直接调用shutodwn)
【讨论】:
要找到您的实际 Windows 用户名,请打开 cmd 并运行
echo %username%
这是您必须在 net rpc 命令中使用的用户名(不区分大小写)
【讨论】:
在Linux中使用telnet命令,确保telnet is enabled in Windows system
【讨论】: