如何用脚本监控IPMI SOL输出匹配指定内容并触发响应与发送按键?
嘿,没问题!你的需求完全可以通过脚本来实现,而且发送按键(比如回车)刷新界面也不在话下——我来一步步给你拆解和演示。
核心问题解答
- 能不能实现监控SOL输出的功能? 必须可以!我们可以通过脚本捕获SOL会话的输出流,实时检测是否出现“login:”字符串,一旦匹配就触发后续操作。
- 能不能向SOL发送按键? 当然能!不管是回车还是其他按键,都可以通过交互式脚本工具(比如
expect)模拟输入,完美解决需要刷新界面的场景。
脚本实现示例
我用bash结合expect来写这个脚本——expect专门用来处理交互式命令的场景,非常适合IPMI SOL的交互需求。
首先,你需要确保系统上安装了ipmitool和expect:
# Debian/Ubuntu系 sudo apt install ipmitool expect # RHEL/CentOS系 sudo yum install ipmitool expect
接下来是脚本本身,你可以保存为check_sol_login.sh:
#!/bin/bash # 配置信息,根据你的实际情况修改 IPMI_USER="admin" IPMI_PASS="your_password" SERVER_LIST="servers.txt" # 每行一个服务器IP/名称 # 遍历服务器列表 while read -r server; do echo "Checking server: $server" # 使用expect处理SOL交互 expect << EOF # 启动SOL会话 spawn ipmitool -I lanplus -H $server -U $IPMI_USER -P $IPMI_PASS sol activate # 先发送回车刷新界面,避免界面停滞导致检测不到目标字符串 send "\r" expect { # 检测到login:字符串时的处理逻辑 "login:" { send_user "$server is available for login\n" # 关闭SOL会话(多数厂商用~.退出,若不好使可查对应IPMI文档) send "~.\r" expect eof } # 超时处理:10秒无响应则退出会话 timeout 10 { send_user "$server SOL session timed out\n" send "~.\r" expect eof } } EOF done < "$SERVER_LIST"
脚本关键部分说明
- 配置区:记得把
IPMI_USER、IPMI_PASS改成你的真实认证信息,SERVER_LIST是存储服务器IP/名称的文本文件,每行一个条目即可。 - 遍历逻辑:通过
while read循环逐个读取服务器列表里的机器,实现批量检测。 - SOL交互:
- 用
spawn启动SOL会话,建立和目标服务器的连接。 - 先发送回车刷新界面,解决部分场景下界面停滞的问题。
- 监听输出流,匹配到“login:”就输出提示信息,再发送退出命令关闭会话。
- 加入超时机制,避免脚本卡在无响应的服务器上。
- 用
小提醒
- 不同服务器厂商的SOL退出命令可能有差异,如果
~.不好使,可以试试Ctrl+]或者查阅对应厂商的IPMI文档。 - 建议先手动执行
ipmitool sol activate命令,确保能正常连接目标服务器的SOL会话,再用脚本批量操作。 - 如果后续需要扩展功能(比如自动输入用户名密码),也可以在
expect里继续添加匹配逻辑,比如检测到“Password:”时自动发送密码。
初次接触IPMI脚本很正常,慢慢调试就行,遇到小问题不用慌~
内容的提问来源于stack exchange,提问作者nuker186




