如何向特定NUT客户端发送关机命令
如何向特定NUT客户端发送关机命令
嘿,我完全懂你的需求——用树莓派当NUT服务器,给Proxmox和Windows这些不同的客户端单独发关机指令,不想用upsmon -c fsd那种一刀切的方式(毕竟树莓派的UPS续航远久于主系统,只需要在树莓派自身撑不住的时候才触发全局关机)。下面给你两个实操性很强的方案:
方案一:SSH密钥认证+自定义NUT事件脚本
这个方法的核心是让树莓派能无密码登录到各个客户端,然后通过NUT的事件触发机制,针对特定UPS的状态(比如断电、低电量)调用脚本给对应客户端发关机命令。
配置树莓派到客户端的无密码SSH登录
- 在树莓派上生成SSH密钥对:运行
ssh-keygen -t ed25519,一路按回车就行,不用设密码。 - 给Proxmox客户端传公钥:执行
ssh-copy-id root@<你的ProxmoxIP>,之后测试下ssh root@<你的ProxmoxIP>能不能直接登录,不用输密码。 - 给Windows客户端传公钥:先在Windows上开启OpenSSH服务器(设置→应用→可选功能→添加功能,找到OpenSSH服务器安装),然后把树莓派
~/.ssh/id_ed25519.pub里的内容,复制到Windows用户目录下的.ssh/authorized_keys文件里(注意要把这个文件的权限设置成只有当前用户能访问,不然SSH会拒绝登录)。
- 在树莓派上生成SSH密钥对:运行
编写自定义关机脚本并配置NUT触发规则
- 先在树莓派上写对应客户端的关机脚本,比如给Proxmox的
/etc/nut/shutdown-proxmox.sh:
给脚本加执行权限:#!/bin/bash ssh root@<你的ProxmoxIP> "shutdown -h now"chmod +x /etc/nut/shutdown-proxmox.sh - 编辑NUT的
upssched.conf,添加触发规则,比如当某台UPS进入低电量时,触发对应脚本:AT LOWBATT 你的UPS名称 EXECUTE shutdown-proxmox AT LOWBATT 另一台UPS名称 EXECUTE shutdown-windows - 还要配置
upsmon.conf和upssched-cmd,确保NUT能正确调用这些脚本,最后重启NUT服务:systemctl restart nut-server nut-monitor
- 先在树莓派上写对应客户端的关机脚本,比如给Proxmox的
方案二:给每个客户端单独配置NUT监控
其实NUT本身支持客户端独立监控特定UPS,让每个客户端只响应自己对应UPS的状态变化,自己触发关机,不需要服务器统一发指令。
Proxmox客户端配置
- 在Proxmox上安装NUT客户端,编辑
/etc/nut/upsmon.conf,只监控自己对应的UPS:MONITOR 自己的UPS名称@树莓派IP 1 upsmon 你的认证密码 slave - 设置客户端本地的关机命令:
SHUTDOWNCMD "/sbin/shutdown -h +0",这样当这台UPS触发低电量时,Proxmox会自己关机。
- 在Proxmox上安装NUT客户端,编辑
Windows客户端配置
- 安装Windows版NUT客户端,配置监控自己对应的UPS,然后在客户端设置里指定关机命令(比如
shutdown /s /t 0),同样,当自己的UPS出问题时,Windows会自动执行关机。
- 安装Windows版NUT客户端,配置监控自己对应的UPS,然后在客户端设置里指定关机命令(比如
注意事项
- 不管用哪种方案,一定要先测试!比如手动运行脚本,或者用
upscmd 你的UPS名称 test.battery.start模拟低电量事件,看看客户端能不能正常响应关机。 - 树莓派自身的UPS可以单独监控,只有当它的电量不足时,再用
upsmon -c fsd触发全局关机,完全符合你的需求。
备注:内容来源于stack exchange,提问作者ClassyUnderexposure
相关产品推荐
相关产品推荐

