简介:IPMITool 1.8.19 for Windows 是一款面向企业 IT 运维人员与服务器管理员的命令行工具,用于通过 IPMI 协议在本地或远程监控、管理兼容服务器硬件。它独立于操作系统运行,可在系统崩溃或无法启动时完成电源控制、硬件诊断与固件升级,适合数据中心批量运维、远程故障排查及无人值守部署等场景。资源包共 12 个文件,以 6 个 dll 动态库、2 个 exe 可执行程序及 2 个 c 源码文件为主,另含 ipmitool 与 ipmievd 的 ltshwrapper 包装脚本,压缩包约 4.69MB,解压后即可获得 ipmitool.exe 主程序。目前已有 1940 人学习下载。借助该工具,读者可读取温度、电压、风扇转速等传感器数据,查看并清除系统事件日志,远程开关机与重启,还能通过脚本自动化重复管理任务,从而显著提升服务器可管理性与运维效率。
1. 为什么 Windows 上跑 ipmitool 1.8.19 值得你花半小时折腾
如果你手里有一台带 BMC 的服务器,不管是放在机房还是塞在工位底下,你迟早会遇到一个场景:系统还没起来,或者网络已经断了,但你需要看传感器读数、开关机、改启动项、刷 FRU。这时候 SSH 进不去,远程桌面更别想,唯一还活着的就是那块独立供电的管理芯片。ipmitool 就是跟它对话的命令行工具,而 1.8.19 是很多老平台和国产 BMC 兼容性最稳的一个版本。Windows 上没有官方原生构建,网上流传的包质量参差不齐,有的缺 DLL,有的版本号对不上,有的干脆是改了名的旧版。这篇笔记把我自己在 Windows 上把 ipmitool 1.8.19 跑通、跑稳、跑进脚本的完整路径拆开讲,包括依赖怎么补、参数怎么设、哪些坑我踩过。适合手里有服务器、需要带外管理、又不想装 Linux 虚拟机的运维和硬件工程师。
2. 先把 ipmitool 1.8.19 在 Windows 上的运行底座搭起来
2.1 为什么 Windows 版不是官方直接给的
ipmitool 的主线开发一直在类 Unix 环境,官方发布页里 Windows 二进制包长期缺席。1.8.19 这个版本之所以被反复提起,是因为它在 IPMI 2.0 的 RMCP+ 会话、LAN 通道配置、SOL 串口重定向这几块上,对老一代 BMC 固件的兼容性比后续版本更宽容。很多 2.0 以后的改动反而让某些国产 BMC 的 LAN 会话建立失败,报Unable to establish LAN session或者Get Device ID command failed。所以你在 Windows 上要找的,本质是一个用 MinGW 或 Cygwin 交叉编译出来的可执行文件,外加它运行时需要的几个动态库。常见做法是找已经编译好的压缩包,解压后把 exe 和 dll 放在同一个目录,然后把这个目录加进 PATH。我一般会单独建一个C:\Tools\ipmitool,不跟系统目录混在一起,方便以后换版本。
2.2 依赖库补齐:三个 DLL 缺一不可
Windows 上跑 ipmitool 1.8.19,最常见的翻车现场就是双击 exe 一闪而过,或者命令行里报「找不到 xxx.dll」。这个版本通常依赖三个库:libcrypto-1_1-x64.dll、libssl-1_1-x64.dll和libgcc_s_seh-1.dll。前两个来自 OpenSSL 1.1.1 系列,第三个是 MinGW 的运行时。注意版本要对上,32 位 exe 配 32 位 dll,64 位配 64 位,混用会直接报「不是有效的 Win32 应用程序」。把这三个 dll 和ipmitool.exe放在同一层目录,不要试图只放 system32,因为不同软件带的 OpenSSL 版本会打架。下面是我常用的目录结构和验证命令:
# 目录结构示例 C:\Tools\ipmitool\ ipmitool.exe libcrypto-1_1-x64.dll libssl-1_1-x64.dll libgcc_s_seh-1.dll # 在 PowerShell 里验证依赖是否齐全 cd C:\Tools\ipmitool .\ipmitool.exe -V-V会打印版本号和编译选项。如果输出里能看到ipmitool version 1.8.19,说明底座已经稳了。如果报错缺 dll,就回到上一步检查位数和文件名。参数说明:-V是大写,小写-v是 verbose 输出,别搞混。这一步不需要管理员权限,普通用户就能跑。
2.3 把 ipmitool 加进 PATH 并验证基本连通性
加 PATH 的目的是让你在任何目录下都能直接敲ipmitool,而不是每次都切到C:\Tools\ipmitool。在 PowerShell 里临时加:
$env:Path += ";C:\Tools\ipmitool" # 永久加需要改系统环境变量,或者用 setx setx PATH "$env:Path;C:\Tools\ipmitool" /M/M是系统级,需要管理员权限。加完之后新开一个终端,敲ipmitool -V确认。然后拿一台你知道 IP 的 BMC 做连通性测试:
ipmitool -I lanplus -H 192.168.1.100 -U admin -P password chassis status-I lanplus指定用 IPMI 2.0 的 LAN 接口,-H是 BMC 地址,-U和-P是凭据。如果返回System Power : on之类的状态,说明整条链路通了。如果卡住或者报Error: Unable to establish IPMI v2 / RMCP+ session,先别怀疑 ipmitool,去检查 BMC 那边有没有开 LAN 通道、有没有限制来源 IP、密码有没有特殊字符被 shell 吃掉。
3. 用 ipmitool 1.8.19 做带外管理的四个高频操作
3.1 传感器读数与阈值排查:sdr 和 sensor 怎么选
带外管理最常用的就是看温度、电压、风扇转速。ipmitool 里有两个相关命令:sdr和sensor。sdr读的是静态数据仓库,返回的是原始记录,速度快但可能不刷新;sensor会实时查询,数据新但慢一些。我一般先用sdr list快速扫一遍,发现异常再针对具体传感器用sensor get拿细节。
# 列出所有传感器,只看温度和风扇 ipmitool -I lanplus -H 192.168.1.100 -U admin -P password sdr type Temperature ipmitool -I lanplus -H 192.168.1.100 -U admin -P password sdr type Fan # 获取某个具体传感器的实时读数 ipmitool -I lanplus -H 192.168.1.100 -U admin -P password sensor get "CPU1 Temp"sdr type后面的类型名要跟 BMC 里的定义匹配,常见的有Temperature、Fan、Voltage、Current。如果报Sensor type not found,先用sdr list不带类型看全部,找到实际名称再查。sensor get返回的Status字段很关键,ok表示正常,nc表示不可恢复,cr表示临界,nr表示需要复位。这些状态比单纯看数值更能说明问题,因为阈值是 BMC 固件里预设的,不同厂商定义不一样。
3.2 开关机与启动项设置:chassis 和 chassis bootparam
远程开关机是带外管理的基本盘。chassis status看当前状态,chassis power on/off/cycle/reset执行动作。注意off是硬断电,soft是发 ACPI 关机信号,能不能软关取决于 OS 有没有装对应的驱动。我一般先试soft,等 30 秒没反应再off。
# 查看电源状态 ipmitool -I lanplus -H 192.168.1.100 -U admin -P password chassis status # 软关机 ipmitool -I lanplus -H 192.168.1.100 -U admin -P password chassis power soft # 设置下次启动从光驱引导,只生效一次 ipmitool -I lanplus -H 192.168.1.100 -U admin -P password chassis bootparam set bootflag force_cdrombootparam set bootflag支持force_pxe、force_disk、force_cdrom、force_bios等。force_前缀表示一次性,下次重启后恢复默认。如果要去掉一次性设置,用chassis bootparam set bootflag none。这里有个坑:有些 BMC 对force_cdrom的实现是「优先尝试光驱,失败后回退硬盘」,而有些是「必须从光驱启动,失败就卡住」。所以设完之后最好配合 KVM 或 SOL 看一眼启动过程,别设完就不管了。
3.3 FRU 和 SEL 读取:硬件清单与事件日志
FRU 是现场可替换单元的信息,包含厂商、型号、序列号、资产标签。SEL 是系统事件日志,记录温度超限、电源故障、内存错误等。这两个命令在排查硬件问题时非常有用,尤其是机器已经宕机、OS 起不来的时候。
# 读取 FRU 信息,只看内置区域 ipmitool -I lanplus -H 192.168.1.100 -U admin -P password fru print 0 # 列出 SEL 全部条目 ipmitool -I lanplus -H 192.168.1.100 -U admin -P password sel list # 清空 SEL(谨慎操作) ipmitool -I lanplus -H 192.168.1.100 -U admin -P password sel clearfru print 0里的0是 FRU 设备 ID,大多数主板内置 FRU 就是 0。如果返回FRU Device Description : Builtin FRU Device但后面字段全是N/A,说明 BMC 没有烧录 FRU 信息,这不是 ipmitool 的问题。sel list的输出里,每条记录有时间戳、传感器名、事件描述。如果时间戳全是Pre-Init Time,说明 BMC 的 RTC 没电或者没同步,这时候事件顺序会乱,排查时要靠传感器名和事件类型来推断。sel clear会清空所有日志,生产环境慎用,我一般只在实验室机器上清。
3.4 SOL 串口重定向:在 Windows 上抓启动日志
SOL 是 Serial Over LAN,把服务器的串口输出重定向到网络。对于没有 KVM 的机器,这是看 BIOS 自检、OS 启动日志的唯一手段。Windows 上 ipmitool 的 SOL 功能依赖终端对原始字符的处理,用 PowerShell 或 CMD 直接跑可能会遇到按键无响应、回车换行错乱的问题。我一般用-e指定转义字符,配合-C 3强制使用 IPMI 2.0 的加密套件。
# 激活 SOL 会话 ipmitool -I lanplus -H 192.168.1.100 -U admin -P password -e '~' sol activate # 退出 SOL 会话的转义序列:先按 ~ 再按 .-e '~'把转义字符从默认的~显式指定一遍,避免某些终端把它吃掉。进入 SOL 后,你会看到服务器的串口输出。要退出,按~然后按.,注意不是同时按。如果按了没反应,可能是终端把~当成了本地字符,试试在 CMD 里跑而不是 PowerShell,或者用-e换一个不常用的字符比如^。SOL 的稳定性跟 BMC 固件关系很大,有些老固件在 SOL 会话里传大段文本会丢字符,这时候只能降低波特率或者改用 KVM。
4. 避坑:Windows 上跑 ipmitool 1.8.19 的五个血泪教训
4.1 报错「Unable to establish LAN session」但密码明明是对的
现象:命令敲下去,等几秒,返回Error: Unable to establish IPMI v2 / RMCP+ session。原因:BMC 的 LAN 通道没启用,或者启用了但只允许 IPMI 1.5,而lanplus强制走 2.0。解决:先用-I lan试一下,如果lan能通,说明 BMC 只支持 1.5,那就别用lanplus。如果lan也不通,去 BMC 的 Web 界面确认 LAN 通道的访问模式是「always available」而不是「disabled」或「shared」。还有一个隐蔽原因:BMC 的密码里有$或!,在 PowerShell 里被解释成了变量,实际传过去的密码是错的。用单引号包住密码,或者先set一个变量再引用。
4.2 命令返回乱码或者中文传感器名显示为问号
现象:sdr list输出里,传感器名带中文的地方全是???或者方块。原因:Windows 终端默认代码页是 GBK,而 ipmitool 输出的是 UTF-8 或者原始字节流。解决:在 CMD 里先chcp 65001切到 UTF-8,再跑 ipmitool。如果还是乱码,说明 BMC 返回的字符串本身就不是 UTF-8,这时候只能靠sdr dump把原始数据导出来,用十六进制工具看。我一般会在脚本里加chcp 65001 >nul,避免每次手动切。
4.3 脚本里调用 ipmitool 偶尔卡死,手动跑却正常
现象:批处理或者 Python 脚本里循环调用 ipmitool,跑几十次之后某一次卡住不返回,超时设置也没用。原因:ipmitool 在 Windows 上对网络超时的处理有缺陷,某些情况下 socket 没有正确关闭,导致后续调用复用了坏掉的句柄。解决:每次调用都加-N 3 -R 1,-N是重试次数,-R是重试间隔秒数。更稳妥的做法是给每次调用套一个超时包装,比如用 Python 的subprocess.run(timeout=10),超时就 kill 掉重新来。另外,不要在同一个进程里并发调多个 ipmitool,BMC 那边对并发会话数有限制,超了就会静默丢包。
4.4 换了一台机器,同样的命令报「Invalid argument」
现象:在 A 机器上跑得好好的命令,复制到 B 机器上就报Invalid argument或者Command not supported。原因:不同 BMC 厂商对 IPMI 命令的支持程度不一样,有的裁剪了 SEL,有的不支持 SOL,有的chassis bootparam的参数名拼写不同。解决:先用ipmitool -I lanplus -H x.x.x.x -U user -P pass mc info看 BMC 的厂商和固件版本,然后查对应厂商的 IPMI 兼容性列表。如果某个命令不支持,别硬试,换用厂商自己的 CLI 工具或者 Web API。我一般会在脚本里先跑一遍mc info,根据返回的厂商字段走不同的分支。
4.5 防火墙或安全软件把 ipmitool 当成了可疑程序
现象:ipmitool 第一次跑的时候弹窗询问是否允许网络访问,点了拒绝之后所有命令都超时。原因:Windows 防火墙或者第三方安全软件对未知 exe 的入站/出站规则默认拦截。解决:在防火墙里给ipmitool.exe显式放行出站 UDP 623 端口。如果用的是企业统一管控的安全软件,可能需要找管理员加白名单。另一个隐蔽点:某些安全软件会 hook socket 调用,导致 ipmitool 的 RMCP+ 会话建立失败,但错误信息看起来像是 BMC 没响应。遇到这种玄学问题,先临时关掉安全软件试一次,能通就说明是拦截。
5. 把 ipmitool 1.8.19 塞进自动化脚本的一个实用技巧
前面讲的都是单条命令,实际运维里你肯定不想每次手敲。我最后分享一个我在用的模式:用 PowerShell 包一层,把凭据、目标、超时、重试都做成参数,输出统一转成 JSON,方便后续接监控或者工单系统。这个脚本不依赖任何外部模块,纯 PowerShell 5.1 就能跑。
param( [string]$BmcIp, [string]$User = "admin", [string]$Pass = "admin", [string]$Command = "chassis status", [int]$TimeoutSec = 15 ) $ipmi = "C:\Tools\ipmitool\ipmitool.exe" $args = @("-I", "lanplus", "-H", $BmcIp, "-U", $User, "-P", $Pass, "-N", "3", "-R", "1") + $Command.Split(" ") $job = Start-Job -ScriptBlock { param($exe, $a) & $exe @a 2>&1 } -ArgumentList $ipmi, $args if (Wait-Job $job -Timeout $TimeoutSec) { $out = Receive-Job $job Remove-Job $job -Force [PSCustomObject]@{ Target = $BmcIp Command = $Command Success = $true Output = $out -join "`n" } | ConvertTo-Json -Depth 3 } else { Stop-Job $job Remove-Job $job -Force [PSCustomObject]@{ Target = $BmcIp Command = $Command Success = $false Output = "Timeout after $TimeoutSec seconds" } | ConvertTo-Json -Depth 3 }这个脚本的关键点有三个。第一,用Start-Job把 ipmitool 放到独立进程里跑,超时可以直接Stop-Job杀掉,不会卡住主流程。第二,-N 3 -R 1让 ipmitool 自己在网络抖动时重试三次,减少误报。第三,输出统一转 JSON,Success字段让上层逻辑不用去解析 ipmitool 的文本错误。参数说明:$TimeoutSec默认 15 秒,对于sdr list这种返回大量数据的命令可以调到 30;$Command传字符串,内部按空格拆成数组,所以命令里不要带需要保留空格的参数值,比如传感器名里有空格的情况,得改成直接传数组。这个模式我用了两年多,从单台服务器到几十台的批量巡检都扛得住。唯一要注意的是别在循环里开太多 Job,PowerShell 的 Job 有并发上限,批量跑的时候加个Start-Sleep -Milliseconds 200错开一下。希望帮到你。
本文还有配套的精品资源,点击获取