You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用脚本监控IPMI SOL输出匹配指定内容并触发响应与发送按键?

嘿,没问题!你的需求完全可以通过脚本来实现,而且发送按键(比如回车)刷新界面也不在话下——我来一步步给你拆解和演示。

核心问题解答
  • 能不能实现监控SOL输出的功能? 必须可以!我们可以通过脚本捕获SOL会话的输出流,实时检测是否出现“login:”字符串,一旦匹配就触发后续操作。
  • 能不能向SOL发送按键? 当然能!不管是回车还是其他按键,都可以通过交互式脚本工具(比如expect)模拟输入,完美解决需要刷新界面的场景。
脚本实现示例

我用bash结合expect来写这个脚本——expect专门用来处理交互式命令的场景,非常适合IPMI SOL的交互需求。

首先,你需要确保系统上安装了ipmitoolexpect

# 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"

脚本关键部分说明

  1. 配置区:记得把IPMI_USERIPMI_PASS改成你的真实认证信息,SERVER_LIST是存储服务器IP/名称的文本文件,每行一个条目即可。
  2. 遍历逻辑:通过while read循环逐个读取服务器列表里的机器,实现批量检测。
  3. SOL交互
    • spawn启动SOL会话,建立和目标服务器的连接。
    • 先发送回车刷新界面,解决部分场景下界面停滞的问题。
    • 监听输出流,匹配到“login:”就输出提示信息,再发送退出命令关闭会话。
    • 加入超时机制,避免脚本卡在无响应的服务器上。
小提醒
  • 不同服务器厂商的SOL退出命令可能有差异,如果~.不好使,可以试试Ctrl+]或者查阅对应厂商的IPMI文档。
  • 建议先手动执行ipmitool sol activate命令,确保能正常连接目标服务器的SOL会话,再用脚本批量操作。
  • 如果后续需要扩展功能(比如自动输入用户名密码),也可以在expect里继续添加匹配逻辑,比如检测到“Password:”时自动发送密码。

初次接触IPMI脚本很正常,慢慢调试就行,遇到小问题不用慌~

内容的提问来源于stack exchange,提问作者nuker186

火山引擎 最新活动