我正在linux机器上运行一个应用程序。 通过给出一个Windows机器的IP地址作为input,应用程序必须closuresWindows机器。 如果机器运行相同的操作系统,这是很容易的,但我很困惑如何在跨操作系统。
从Linux关闭Windows系统的命令 – :
$ net rpc -S <ip address> -U <username>%<password> shutdown -t 1 -f
这个命令可以从bash发出,甚至可以在cron作业中设置,以在特定的时间关闭计算机,默认情况下,这个命令会附带很多发行版。
可能还有更多的设置要做,尤其是对于Windows Vista,Windows 7和其他Windows版本,以允许远程关机:
部分A)在Windows机器上:
1)添加远程关机安全策略:
运行secpol.msc
在程序树中,打开Security Settings
> Local Policies
> User rights Assignment
Force shutdown from a remote system
查找条目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)要真正关闭你的Windows机器,从Linux上运行以下命令:
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地址。
这取决于你的基础设施 – 你如何验证Windows机器,你是否可以自己配置它们等等。如果是我,我会把Cygwin放在Windows盒子上,然后ssh
给他们并运行shutdown -h
。 当然,还有其他方法可以做到这一点。
您需要一种方法来在Windows上启动一个shell,以便您可以运行内置于Windows的shutdown命令。
您可以为此安装Cygwin ,然后在Windows中安装SSH守护程序。 一旦运行,你的Linux机器就可以在Windows机器上运行命令,就像它是另一台Linux机器一样。
以下是在Windows中设置Cygwin的sshd的一些说明 。
选项1:在Windows上安装SSH服务器。 从任何方框登录到此服务器并调用shutdown命令。 我们使用Interix(微软的unix like环境)。 它带有一个telnet服务器 – 允许从其他机器调用Windows命令..
另一个选择:如果你在Windows上安装了samba,它可以连接到windows并调用windows命令
net rpc SHUTDOWN ...
另一个选择:尝试rdesktop的Windows机器与关机命令(我用它运行Windows批处理脚本已关闭,不知道如果你可以直接调用shutodwn)
在Linux
使用telnet命令,确保telnet is enabled in Windows system