天猫精灵+路由器+ API实现远程控制电脑开关机

这个想法一开始是因为一直维护一台个人服务器,但是开关机需要通过远程唤醒,需要开放端口,使服务器处于不安全的状态,所以想通过天猫精灵和API结合Token认证对我的电脑进行远程的开关机控制。后续在自建API中心会将此API进行更完善的授权管理。

开发思路

原本是打算写一个web搭建在我要控制的服务器上,验证token后用代码直接实现关机,在学习过程中,发现windows存在远程关机指令,可以通过windows关闭windows 也可以通过linux远程指令关闭windows,但是考虑到我的路由器架构是ARMv7 Processor rev 5 (v7l) 所以不支持shutdown和net指令所以无法配合天猫精灵实现口令关机,但可以学到新的技术点我也写在厦门

编写API控制关机

1.基于Spring boot开发API直接控制电脑关机

Linux远程关闭Windows主机

1
2
3
//需要安装SaMBA
//sudo apt-get install samba-common
net rpc shutdown -I IP_ADDRESS -U username%password

Windows cmd命令远程关闭主机

//其实也是用Samba服务,所以需要局域网如果广域网开放139.137端口非常危险,慎用。

1
2
3
4
//使用net use 命令先建立连接再执行shutdown.exe命令即可正常远程关机。
net use \\192.168.0.199\ipc$"" /user:"Administrator"
shutdown.exe -s -t 1 -m \\192.168.0.199
//widows下:shutdown /?,linux下:shutdown --help

如果出现输入的计算机名无效或者远程禁止访问要实现远程关机,被关的主机要在组策略里做一些设置.

1、单击“开始”按钮,选择“运行”,在对话框中输入“gpedit.msc”,然后单击“确定”,打开“组策略编辑器”。

2、在“组策略”窗口的左窗格中打开“计算机配置”—“Windows 设置”—“安全设置”—“本地策略”—“用户权利指派”。

3、在“组策略”窗口的右窗格中选择“Force shutdown from a remote system (从远端系统强制关机)”,双击。

4、在弹出的对话框中显示目前只有“Administrators”组的成员才有权从远程关机;单击对话框下方的“添加用户或组”按钮,然后在新弹出的对话框中输入“guest”,再单击“确定”。

5、这时在“从远端系统强制关机”的属性中便添加了一个“guest”用户,单击“确定”即可。PS(这段是摘录的)

shutdown命令的使用

用法: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e | /o] [/hybrid] [/soft] [/f]
[/m \computer][/t xxx][/d [p|u:]xx:yy [/c “comment”]]

没有参数   显示帮助。这与键入 /? 是一样的。
/?         显示帮助。这与不键入任何选项是一样的。
/i         显示图形用户界面(GUI)。
           这必须是第一个选项。
/l         注销。这不能与 /m 或 /d 选项一起使用。
/s         关闭计算机。
/r         完全关闭并重新启动计算机。
/g         完全关闭并重新启动计算机。在重新启动系统后,
           重新启动任何注册的应用程序。
/a         中止系统关闭。
           这只能在超时期间使用。
/p         关闭本地计算机,没有超时或警告。
           可以与 /d 和 /f 选项一起使用。
/h         休眠本地计算机。
           可以与 /f 选项一起使用。
/hybrid    执行计算机关闭并进行准备以快速启动。
           必须与 /s 选项一起使用。
/e         记录计算机意外关闭的原因。
/o         转到高级启动选项菜单并重新启动计算机。
           必须与 /r 选项一起使用。
/m \\computer 指定目标计算机。
/t xxx     将关闭前的超时时间设置为 xxx 秒。
           有效范围是 0-315360000 (10 年),默认值为 30。
           如果超时时间大于 0,则默示为
           /f 参数。
/c "comment" 有关重新启动或关闭的原因的注释。
           最多允许 512 个字符。
/f         强制关闭正在运行的应用程序而不事先警告用户。
           如果为 /t 参数指定大于 0 的值,
           则默示为 /f 参数。
/d [p|u:]xx:yy  提供重新启动或关闭的原因。
           p 指示重新启动或关闭是计划内的。
           u 指示原因是用户定义的。
           如果未指定 p 也未指定 u,则重新启动或关闭
           是计划外的。
           xx 是主要原因编号(小于 256 的正整数)。
           yy 是次要原因编号(小于 65536 的正整数)。

远程pc重启

shutdown -m \[ip地址或计算机名] -r

如果远程pc没开机或网络连接不到,会提示“找不到网络路径。”;

如果远程pc已经被锁定,会提示“计算机已经锁定而且不使用强制选项无法关机。”,添加-f选项即可;

如果命令运行成功,远程pc会显示自动关机对话框,默认有30秒的等待;

如果后悔了,可以运行“>shutdown -m \[ip地址或计算机名] -a”取消;

如果没有远程关闭的权限,会提示“拒绝访问。”,需要参考下面的说明开放远程关机权限。

远程关机权限的获取:

1)修改远程pc的“本地安全策略”,为指定的用户开放权限

在Windows XP默认的安全策略中,只有Administrators组的用户才有权从远端关闭计算机,如果要给xxxx用户远程关机的权限。可利用Windows XP的“组策略”或“管理工具”中的“本地安全策略”来实现。

1.命令行运行gpedit.msc打开“组策略编辑器“;

2.导航到“计算机配置/Windows 设置/安全设置/本地策略/用户权利指派”;

3.修改“从远端系统强制关机”,添加xxxx用户即可。

2)获得远程IPC管理权限

如果配置第一步后还出现“拒绝访问。”,则需要在运行shutdown命令前先运行如下命令

net use \[ip地址或计算机名]\ipc$ password /user:xxxx

其中password为帐号xxxx的登录密码。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码

请我喝杯咖啡吧~

支付宝
微信