原贴地址: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)]
|