内网环境实现OpenWrt定时对ESXi进行关机操作

场景说明

内网穿透之后,很多内网服务器24小时暴露在公网会增加安全隐患,同时也为了节约电费减少电脑硬件的使用消耗,将内网设备和服务做定时的关机和断电处理很有必要。当然如群晖或者Linux系统本身就支持定时自动关机,因此实现较为方便,而ESXi作为虚拟机宿主系统要关机则需要手动操作。因此如能实现定时自动关机则省心多了,不过前提是需要将系统中所有的虚拟机都自动关机后再执行宿主机的关机。

前置条件

内网有OpenWrt的软路由,不管是ARM还是X86架构的都支持

ESXi可以是6/7/8,有root权限即可

实现原理

OpenWrt创建Crontab定时任务,执行远程登录到ESXi服务器,然后执行关机或者重启命令

实现步骤

1. ssh方式登录OpenWrt,安装需要用到的软件包
opkg update
opkg install sshpass
2. 在OpenWrt中,如root目录下,编写一个ESXi的关机脚本,如shutdown_esxi.sh,并添加可执行权限chmod +x shutdown_esxi.sh
#!/bin/sh
sshpass -p 'ESXi密码' ssh -o StrictHostKeyChecking=no root@ESXi服务器IP '/sbin/poweroff'
重启使用/sbin/reboot
3. 将脚本添加为OpenWrt的定时任务(每天0点45分执行),手动刷新cron守护进程生效
crontab -e

45 0 * * * /bin/sh /root/shutdown_esxi.sh

service cron reload
4. 手动执行脚本测试关机效果,之后就是Crontab自动执行
/bin/sh /root/shutdown_esxi.sh

常见问题

执行命令后提示需要信任,将ESXi服务器IP加入信任列表

opkg install openssh-client-utils
ssh-keyscan -H ESXi服务器IP >> ~/.ssh/known_hosts

微信截图_20230529183916.png
微信截图_20230529184129.png

ESXi开启ssh服务重启后又关闭了

调整服务策略即可

微信截图_20230529221202.png

附录ESXi常用命令

#查询所有虚拟机,可获取到VMID
vim-cmd vmsvc/getallvm
#关闭虚拟机电源(等同于拔插头,无需VMware tools的配合)
#例:vim-cmd vmsvc/power.off 1
vim-cmd vmsvc/power.off [VMID]
#关闭虚拟机(系统级别正常关机,需要VMware tools的配合)
#例:vim-cmd vmsvc/power.shutdown 1
vim-cmd vmsvc/power.shutdown [VMID]
#重启ESXi
/sbin/reboot

#查询虚拟机的电源状态。(开机、关机)
#例:vim-cmd vmsvc/power.getstate 1
vim-cmd vmsvc/power.getstate [VMID]
#打开虚拟机电源(开机)
#例:vim-cmd vmsvc/power.on 1
vim-cmd vmsvc/power.on [VMID]
#重启虚拟机(系统级别正常重启,需要VMware tools的配合)
#例:vim-cmd vmsvc/power.reboot 1
vim-cmd vmsvc/power.reboot [VMID]
#显示虚拟机构成信息
#例:vim-cmd vmsvc/get.summary 1
vim-cmd vmsvc/get.summary [VMID]

标签: 无

发表评论: