(转自“服务器BMC”)服务器BMC——IPMI和Redfish协议

📅 2026/7/29 23:47:30
(转自“服务器BMC”)服务器BMC——IPMI和Redfish协议
前几天给朋友科普服务器BMC问了我一个问题IPMI和Redfish是什么正好周末学习学习当服务器操作系统崩溃SSH无法连接甚至BIOS都还没加载时怎么远程控制呢答案就是带外管理Out-of-Band Management协议。而带外管理协议中最具代表性的两个就是 IPMIIntelligent Platform Management Interface和 Redfish下一代标准现代化、自动化友好。搞BMC的朋友应该都知道IPMI和Redfish协议。个人认为简单理解就是硬件载体BMC芯片上运行软件执行带外管理协议的程序。1. IPMI经典带外协议由英特尔于1998年牵头制定提供了控制电源、风扇、温度、硬件日志、SOL串口重定向等基础功能采用命令行方式通信多通过 UDP 623 端口常见工具ipmitool后来IPMI在2015年公布2.0 v1.1标准后不再更新被RedFish永久代替Intel也宣布不再维护号召大家转战RedFish。这是因为技术上IPMI相对来说安全性不高。而Redfish采用RESTful API JSON格式基于HTTPS易于编程集成支持更复杂的系统拓扑如存储、网络并具备更强的安全机制和可扩展性。2. Redfish为现代系统管理而生由 DMTF分布式管理任务组于2014年发布基于RESTful API JSON设计理念原生支持 HTTPS、OAuth、安全认证、HATEOAS 链接跳转易于与 Web 系统、自动化平台如 Ansible、Terraform对接Redfish 除了提供 IPMI 的全部功能还支持 KVM、远程 BIOS、ISO 挂载、固件管理等现代运维需求。Redfish 是“现代 Web API 化” 的设计而 IPMI 是“低层二进制协议”思想。Redfish 不是 IPMI 的简单替代它是一种面向自动化、云平台、平台即服务PaaS设计的远程管理新范式一种让带外管理融入现代 DevOps 流水线的解决方案也是国产化服务器管理系统全面转向的主流方向网上找了读取CPU温度为例IPMI方案发送原始十六进制命令需要通过raw命令向BMC发送一串十六进制的命令代码其意义难以直接理解ipmitool raw 0x04 0x2dRedfish方案访问明确资源路径通过访问一个含义明确的URL路径/Thermal热管理来获取温度信息。import requestsurl https://10.0.0.11/redfish/v1/Chassis/1/Thermalr requests.get(url, auth(admin, password), verifyFalse) # 解析JSON中的CPU温度读数data r.json()cpu_temp [s[ReadingCelsius] for s in data.get(Temperatures, []) if CPU in s[Name]]print(cpu_temp)看出IPMI的raw命令可读性差而Redfish的API端点如/Thermal表意明确开发维护都友好些。可以理解为IPMI 是基础Redfish是未来。