在服务器管理的日常工作中,对多台服务器的 IPMI(Intelligent Platform Management Interface)进行批量管理是一项常见且重要的任务。手动逐台操作不仅效率低下,还容易出错。今天,我就来介绍一个强大的 Shell 脚本,它能帮助你轻松实现 IPMI 的批量管理,大大提升工作效率。
脚本功能概述 #
这个 Shell 脚本支持多种 IPMI 操作,涵盖了服务器的电源管理、启动模式设置、BMC(Baseboard Management Controller)管理等多个方面。具体功能如下:
- 电源管理:查看电源状态、开机、关机、重启
- 启动模式设置:PXE 启动、BIOS 启动、从 CD/DVD 启动、从硬盘启动
- BMC 管理:查看 BMC 用户信息、冷重启 BMC、热重启 BMC
- 系统管理:冷重启系统
#!/bin/bash
# 定义函数用于执行 IPMI 操作
ipmi_action() {
local ip=$1
local username=$2
local password=$3
local action=$4
case $action in
"power_status")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" chassis power status
;;
"power_on")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" chassis power on
;;
"power_off")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" chassis power off
;;
"power_reset")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" chassis power reset
;;
"pxe_boot")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" chassis bootdev pxe options=persistent
;;
"bios_boot")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" chassis bootdev bios options=persistent
;;
"cdrom_boot")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" chassis bootdev cdrom options=persistent
;;
"disk_boot")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" chassis bootdev disk options=persistent
;;
"bmc_user_info")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" user list
;;
"bmc_cold_reset")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" bmc reset cold
;;
"bmc_warm_reset")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" bmc reset warm
;;
"system_cold_reset")
ipmitool -I lanplus -H "$ip" -U "$username" -P "$password" chassis power cycle
;;
*)
echo "不支持的操作: $action"
return 1
;;
esac
if [ $? -eq 0 ]; then
echo "对 $ip 执行 $action 操作成功"
else
echo "对 $ip 执行 $action 操作失败"
fi
}
# 检查命令行参数是否正确
if [ $# -ne 3 ]; then
echo "用法: $0 <ip_list_file> <username> <password> [power_status|power_on|power_off|power_reset|pxe_boot|bios_boot|cdrom_boot|disk_boot|bmc_user_info|bmc_cold_reset|bmc_warm_reset|system_cold_reset]"
exit 1
fi
ip_list_file=$1
username=$2
password=$3
action=$4
# 检查 IP 列表文件是否存在
if [ ! -f "$ip_list_file" ]; then
echo "IP 列表文件 $ip_list_file 不存在"
exit 1
fi
# 遍历 IP 列表文件并执行操作
while IFS= read -r ip; do
ipmi_action "$ip" "$username" "$password" "$action"
done < "$ip_list_file"
使用方法 #
- 准备 IP 列表文件
创建一个 .txt 文件,例如 ip_list.txt,将服务器的 IP 地址逐行写入该文件。示例如下:
192.168.1.100
192.168.1.101
192.168.1.102
- 保存脚本
将上述代码保存为一个文件,例如 ipmi_batch_full.sh
- 赋予执行权限
在终端中运行以下命令为脚本赋予执行权限:
chmod +x ipmi_batch_full.sh
- 执行脚本
根据需求执行相应的命令,例如查看所有服务器的电源状态:
./ipmi_batch_full.sh ip_list.txt admin password power_status
总结 #
通过这个 Shell 脚本,你可以方便快捷地对多台服务器的 IPMI 进行批量管理。它不仅提高了工作效率,还减少了人为错误的发生。希望这个脚本能帮助你更好地管理服务器,让你的工作更加轻松高效!