前言

在日常运维工作中,经常会遇到需要给服务器安装新的操作系统,或者需要配置 BIOS、RAID 等操作,而这些操作一般都需要用到服务器的图形化界面。当然有的大佬可能会说,可以使用专用的命令行工具如 racadm、MegaCli、StorCli、ssacli 去配置和管理 BIOS、RAID,这当然是可以的!所以在这里,我会强调一下,我们这里仅说在一般的情况下。

但事实上,很多时候我们是无法直接进入机房,或者说进入机房的流程会相当麻烦。因此,就我个人而言,能远程操作我就不会去机房。这个时候,服务器自身提供的 KVM 终端就是一个非常好的选择,而使用 KVM 终端的前提是,我们需要先给服务器配置好带外 IP 地址(服务器后面板几乎都会提供一个标记为 Mgmt 的电口或者旁边画有扳手形状的电口),这个时候我们就可以通过 ipmitool 命令行工具直接去配置带外 IP,并设置好用户名和密码,登录带外打开 KVM 终端就可以进行图形化界面操作了。

IPMI 本身的功能是很强大的,但是想要使用好,还是需要花费一番功夫的。本篇内容主要是将我自己在生产、测试环境中常用到的一些命令和场景分享给大家。如有不当之处,欢迎指正!


一、ipmi 简介

IPMI 的英文全称为“Intelligent Platform Management Interface”,翻译过来即“智能型平台管理接口”。它是一种开放标准的硬件管理接口规范,由 Intel、HP、DELL 等公司联合制定,定义了嵌入式管理子系统进行通信的特定方式。

IPMI 信息通过基板管理控制器(BMC)进行交换。其最大的优势在于只要服务器接通了电源,就可以实现对服务器的监控,如温度监测、电压监测、风扇工作状态监测、以及机箱是否拆卸过等。


二、ipmitool 安装与参数解析

2.1. ipmitool 安装

一般来说,ipmitool 工具默认不会安装到 Linux 等操作系统里面;所以,我们往往在需要使用 ipmitool 命令工具查询或配置时,会被提示找不到该工具。ipmitool 支持 rpm 包安装方式和源码编译安装方式。下面是我在虚拟机环境中进行安装的过程,之前有在真实的物理机环境中安装过,但是没有保留下安装日志。不过我觉得虽然可能会有一些出入,但还是可以作为一个参考。

ipmitool 下载链接

IPMITOOL_1_8_18: Release Version 1.8.18

ipmitool 安装步骤

Step1:准备好安装包(我放在了 /tmp 目录下)。

[root@mylinux ~]# ls -l /tmp |grep -i ipmi
-rw-r--r--  1 root     root     1030845 4月  23 15:15 ipmitool-1.8.18.tar.gz

Step2:解压安装包。

[root@mylinux ~]# cd /tmp/
[root@mylinux tmp]# tar -xf ipmitool-1.8.18.tar.gz 

Step3:编译安装。

[root@mylinux tmp]# cd ipmitool-1.8.18/
[root@mylinux ipmitool-1.8.18]# ./configure
[root@mylinux ipmitool-1.8.18]# make && make install

注意事项1:

如果没有安装 gcc 包,在执行 configure 时会提示缺少的 C 的编译器,错误提示如下:

configure: error: in `/tmp/ipmitool-1.8.18':
configure: error: no acceptable C compiler found in $PATH

所以,一旦出现这个报错,建议配置好本地 yum 源,然后安装 gcc 包,如下所示:

[root@mylinux ipmitool-1.8.18]# yum -y install gcc

注意事项2:

由于我的实验环境是虚拟机,无法和物理机相比,编译安装过程中会有些告警,且相关的依赖模块也是无法加载的;但是没关系,即使在物理机上,安装方法也是一样的,只不过需要手工去加载几个模块,方法如下:

Step4:加载模块并检查当前模块是否加载正确。

# modprobe ipmi_msghandler
# modprobe ipmi_devintf
# modprobe ipmi_si

# lsmod |grep ipmi   //正常情况下可以看到有关 ipmi 的几个模块是被加载的。
ipmi_si                57587  0
ipmi_devintf           17603  0
ipmi_msghandler        46607  2 ipmi_devintf,ipmi_si

Step5:检查 ipmitool 是否安装成功。

[root@mylinux ipmitool-1.8.18]# whereis ipmitool
ipmitool: /usr/local/bin/ipmitool   //ipmitool工具被安装到 “/usr/local/bin/” 目录下。

[root@mylinux ~]# ipmitool lan print 1   //最简单的检验方法是跑一条查询语句。

2.2. ipmitool 参数解析

参数参数说明
lan局域网信道,IPMI 利用 UDP 协议通过以太局域网与 BMC 建立连接,进行信息交互
chassis获取机箱状态以及设置电源状态
power机箱电源命令的快捷方式
event向 BMC 控制台发送一个已经定义好的事件,可用于测试 SNMP 是否配置成功
mc查看管理控制台的状态,以及开启全局的配置项
sensor打印详细的传感器信息
fru打印内置 FRU 信息并扫描 SDR 以查找 FRU 定位器
sel即 “System Event Log” 的缩写,打印系统事件日志
user配置管理控制台的用户信息
channel配置管理控制器信道

三、ipmitool 常用使用姿势

3.1. ipmitool 本机与非本机执行

ipmitool 在本机系统执行

ipmitool lan print [ChannelNo]

ipmitool 在非本机系统执行

【命令格式如下:】
ipmitool –H (BMC管理IP地址) –I lanplus –U (BMC登录用户名) –P (BMC 登录用户名的密码) lan print [ChannelNo]

【命令参数说明:】
H:Host,即为目标节点的 BMC 管理 IP 地址
I:Interface,即接口类型,这里面一般都是“lanplus”
U:User,即为目标节点的 BMC 登录的用户名
P:Password,即为目标节点的 BMC 登录所需的密码
ChannelNo:Lan 通道编号,一般是“1”,也有的是“8”(一般用来表示是专用管理口还是复用管理口)

3.2. ipmitool 五种常用姿势

3.2.1. 查看并配置带外管理口网络

【查看当前带外口网络配置信息,命令如下:】
ipmitool lan print [ChannelNo]   //“ChannelNo” 为 LAN 的通道编号,大部分是“1”,少量服务器是“8”。

【设置带外口网络 IP 地址的获取方式,命令如下:】
ipmitool lan set <ChannelNo> ipsrc <static/dhcp>   //指定静态获取 IP 地址还是动态获取 IP 地址。

【设置带外口网络 IP 地址,命令如下:】
ipmitool lan set <ChannelNo> ipaddr <IP Addr>

【设置带外口网络子网掩码,命令如下:】
ipmitool lan set <ChannelNo> netmask <Netmask>

【设置带外口网络默认网关,命令如下:】
ipmitool lan set <ChannelNo> defgw ipaddr <Getway>

3.2.2. 管理服务器电源

ipmitool power status   //查看服务器当前电源状态(在非本机系统执行的情况会更多一些)。
ipmitool power <on/off>   //打开或关闭服务器电源。
ipmitool power reset   //重启服务器电源。

3.2.3. 管理带外用户

带外用户名和密码管理

【查看当前带外口用户信息,命令如下:】
ipmitool user list [ChannelNo]

【根据用户 ID 设置带外口用户名称,命令如下:】
ipmitool user set name <user id> <username>

【根据用户 ID 设置带外口用户密码,命令如下:】
ipmitool user set password <user id> <password>   //有些服务器由于 BMC 固件版本不同,对密码复杂度要求也不一样,往往设置一些简单的密码时会报错。

带外用户权限管理

【命令格式如下:】
ipmitool user priv <user id> <privilege level> [ChannelNo]

【权限说明:】
2:普通用户权限
3:运维人员权限
4:超级管理员权限
ipmitool user <enable/disable> <user id>   //启用或禁用某个用户账号

3.2.4. 查看 SEL 日志

ipmitool sel list   //通过字符形式查看 BMC 控制台的告警信息

3.2.5. 查看 FRU 信息

ipmitool fru list   //可以看到有关服务器“主板、机型、序列号、制造商”等信息

四、ipmitool 使用场景

4.1. 配置带外管理口网络

需求说明如下

  • 为带外管理口配置一个静态 IP 地址,用于 IPMI 管理。

配置方法如下

ipmitool lan set 1 ipsrc static
ipmitool lan set 1 ipaddr 10.10.160.172
ipmitool lan set 1 netmask 255.255.255.0
ipmitool lan set 1 defgw ipaddr 10.10.160.254

4.2. 修改带外用户名和密码

需求说明如下

  • 将原来的 root 用户名修改为 ADMIN,密码设置为 12345678;
  • 新增 root 用户,密码设置为 12345678,具备超级管理员权限。

配置方法如下

Step1:查看当前 root 用户所对应的 ID 信息。

# ipmitool user list 1

ID  Name         Callin  Link Auth    IPMI Msg   Channel Priv Limit
1                    true    false      false      NO ACCESS
2   Administrator    true    true       true       ADMINISTRATOR
3   root             true    false      true       ADMINISTRATOR   //root 用户对应的 ID 是 3
4   (Empty User)     true    false      true       NO ACCESS
5   (Empty User)     true    false      true       NO ACCESS
6   (Empty User)     true    false      true       NO ACCESS
7   (Empty User)     true    false      true       NO ACCESS
8   (Empty User)     true    false      true       NO ACCESS
9   (Empty User)     true    false      true       NO ACCESS
10  (Empty User)     true    false      true       NO ACCESS
11  (Empty User)     true    false      true       NO ACCESS
12  (Empty User)     true    false      true       NO ACCESS
13  (Empty User)     true    false      true       NO ACCESS

Step2:将 root 用户名修改为 ADMIN。

# ipmitool user set name 3 ADMIN

Step3:修改 ADMIN 用户的密码。

# ipmitool user set password 3 12345678

Set User Password command successful (user 3)

Step4:将 ID 4 设置为 root 用户。

# ipmitool user set name 4 root

Step5:修改 root 用户的密码。

# ipmitool user set password 4 12345678

Set User Password command successful (user 4)   //此时 root 用户的权限级别是:USER(只具备浏览权限和修改自己的密码,不能做其它操作)。

Step6:设置 root 用户权限为管理权权限。

# ipmitool user priv 4 4 1   //第一个“4”是指“User ID”,第二个“4”是指“privilege”,第三个“1”是指“ChannelNo”。

Set Privilege Level command successful (user 4)

Step7:检查用户的配置结果。

# ipmitool user list 1

ID  Name         Callin  Link Auth    IPMI Msg   Channel Priv Limit
1                    true    false      false      NO ACCESS
2   Administrator    true    true       true       ADMINISTRATOR
3   ADMIN            true    false      true       ADMINISTRATOR   //ID 3 对应 ADMIN 用户,管理员权限。
4   root             true    false      true       ADMINISTRATOR   //ID 4 对应 root 用户,管理员权限。
5   (Empty User)     true    false      true       NO ACCESS
6   (Empty User)     true    false      true       NO ACCESS
7   (Empty User)     true    false      true       NO ACCESS
8   (Empty User)     true    false      true       NO ACCESS
9   (Empty User)     true    false      true       NO ACCESS
10  (Empty User)     true    false      true       NO ACCESS
11  (Empty User)     true    false      true       NO ACCESS
12  (Empty User)     true    false      true       NO ACCESS
13  (Empty User)     true    false      true       NO ACCESS

总结

说实话,如果操作的环境里面没有安装 ipmitool 工具,或者说服务器本身就没有接 BMC 的网络,那其实想要用 ipmitool 工具还是比较麻烦的。我自己的一个亲身感受是,有的时候需要登录带外去做一些操作,但是往往没有人记得带外的 IP 地址和用户名、密码;所以当我发现系统里面安装了 ipmitool 工具的时候,上去就是一波骚操作,分分钟解决这个不算是问题的问题。做 IT 运维的,往往就是比较享受这种掌握一些奇技淫巧所得到的“卑微”满足感,哈哈。


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐