『瀚思彼岸』» 智能家居技术论坛
标题: 通过HA去关闭PVE服务器以及下面的虚拟机 [打印本页]
作者: xiehaoing 时间: 2025-7-24 13:10
标题: 通过HA去关闭PVE服务器以及下面的虚拟机
原贴地址:http://halo.naspro.cc/archives/1753281664105新建PVE脚本脚本要求先关闭102 虚拟机 在关闭PVE服务器宿主机
#!/bin/bash# 定义要关闭的虚拟机IDVMID=102# 定义最大等待时间(秒)TIMEOUT=120echo "正在关闭 VM $VMID..."qm shutdown $VMID# 等待虚拟机关闭for ((i=0; i<$TIMEOUT; i++)); do STATUS=$(qm status $VMID | grep -o "status:.*" | awk '{print $2}') echo "当前状态: $STATUS" if [ "$STATUS" != "running" ]; then echo "VM $VMID 已成功关闭" break fi sleep 1done# 如果虚拟机仍未关闭,强制关闭if [ "$STATUS" == "running" ]; then echo "等待超时,强制关闭 VM $VMID..." qm stop $VMIDfi# 延迟 5 秒再关闭宿主机,确保日志输出完整sleep 5echo "正在关闭 PVE 宿主机..."shutdown -h now保存并退出
按 Ctrl + O 保存
按 Enter 确认文件名
按 Ctrl + X 退出
4.赋予脚本执行权限
执行以下命令使脚本可执行:
chmod +x /root/shutdown_with_vm.sh
5.手动测试脚本是否能成功运行(可选)
在 PVE 中测试脚本执行是否正常(注意:这会立即关机!请谨慎操作):
/root/shutdown_with_vm.sh
你应该会看到类似如下输出:
正在关闭 VM 102...当前状态: running当前状态: running...VM 102 已成功关闭正在关闭 PVE 宿主机...# 生成Homeassistant秘钥在Homeassistant终端中执行
进入终端后执行:
mkdir -p /config/sshssh-keygen -t rsa -b 2048 -f /config/ssh/id_rsa会在 /config/ssh/ 下生成以下文件:
id_rsa(私钥)id_rsa.pub(公钥)[color=var(--post-link-color)] 你可以通过 Samba 或 File Editor 插件查看这些文件。
[color=var(--post-link-color)] # 配置PVE服务器 上传秘钥在PVE终端中执行
添加公钥到 PVE 的 root 用户
执行以下命令(确保 .ssh 文件夹存在):
mkdir -p ~/.sshnano ~/.ssh/authorized_keys粘贴刚刚复制的公钥内容。
保存并退出:按 Ctrl + O,回车,Ctrl + X。
设置权限:
chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys# 验证 Home Assistant 能否登录 PVE 主机在 Home Assistant Web 终端中运行:
IP 替换成你的PVE服务器IP地址
ssh -i /config/ssh/id_rsa -o 'StrictHostKeyChecking=no' root@192.168.1.100 'echo success'如果返回:
success[color=var(--post-link-color)]
则说明免密登录已成功,可以远程执行脚本了。 # 在 Home Assistant 中配置按钮来执行 PVE 关机脚本第一步:在 configuration.yaml 添加 shell_command
打开 File Editor 插件(或你用的任何编辑器),在 configuration.yaml 中添加以下内容:
shell_command: shutdown_pve_with_vm: ssh -i /config/ssh/id_rsa -o 'StrictHostKeyChecking=no' [email protected] '/root/shutdown_with_vm.sh'请确保 IP 地址与你实际一致(你的是 192.168.31.130)
第二步(推荐):封装为脚本方便 UI 调用
在 configuration.yaml 中继续添加(如果已有 script: 段,则合并):
script: shutdown_pve_script: alias: 一键关闭 PVE 和 Unraid sequence: - service: shell_command.shutdown_pve_with_vm第三步:检查配置并重启 Home Assistant
在前端依次点击:
设置 → 系统 → 检查配置
无误后点击 重启 Home Assistant
第四步:添加按钮到 Lovelace 控制面板
进入 Lovelace 仪表盘,添加按钮卡片,YAML 模式如下:
type: buttonname: 关闭 PVE 宿主机icon: mdi:powertap_action: action: call-service service: script.shutdown_pve_script confirmation: text: 你确定要关闭 PVE 和 Unraid 虚拟机吗?完成后,点击该按钮即可远程触发 PVE 执行 /root/shutdown_with_vm.sh:
先关闭 VM-102 → 再关闭 PVE 宿主机。
[color=var(--post-link-color)] # 补充内容 增加WOL 唤醒PVE服务器- 在 configuration.yaml 中添加 wake_on_lan 支持
script: wake_pve_script: alias: 唤醒 PVE 服务器 sequence: - service: wake_on_lan.send_magic_packet data: mac: "70:70:4D:6B:05:CE" broadcast_address: "192.168.31.255"2.重启 Home Assistant
设置 → 系统 → 检查配置
确认无误后 → 重启 Home Assistant
3.添加 Lovelace 按钮卡片(唤醒)
type: buttonname: 唤醒 PVEicon: mdi:powertap_action: action: call-service service: script.wake_pve_script confirmation: text: 你确定要唤醒 PVE 服务器吗?[color=var(--link-hover-color)]
作者: xieahui 时间: 2025-7-24 14:06
做个记号 以前有这个需求,现在被查了 
作者: 隔壁的王叔叔 时间: 2025-7-24 16:17
一键三联
作者: ghostist 时间: 2025-7-24 17:14
D大不是有个插件么
作者: 心之向阳 时间: 2025-7-24 22:50
有现有集成,地址在这https://github.com/dougiteixeira/proxmoxve
欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) |
Powered by Discuz! X3.5 |