专栏首页猫先生的日常点滴批量更改服务器BMC硬件管理地址

抱歉,你查看的文章已删除

批量更改服务器BMC硬件管理地址

200台服务器,已经安装完系统了,现在需要配置每台服务器的带外硬件管理地址。200台服务器分发到100个站点,每个站点的IP地址、掩码、网关都不一样,手工改的话,一台平均下来至少需要10分钟。此文基于服务器已经安装好操作系统的前提下,系统Centos7.6,本地yum已配置,因为这200台是用脚本批量安装的,都用脚本配置好了本地yum。

这里分享我的思路,用到的工具包括expect,ipmitool。用expect无人交互工具,把配置BMC地址的脚本批量上传到所有服务器,然后再批量登录每台主机,执行脚本,脚本会根据当前服务器的序列号,查找预定义的IP信息,自动配置IP地址。

1,统计所有主机序列号以及每个站点的bmc 地址信息,文件名称自定义bmcip,内容格式如下:

#主机序列号    地址 掩码 网关    每一项之间用空格隔开。
419203764 172.16.125.2 255.255.255.240 172.16.125.1
419203769 172.16.125.1 255.255.255.240 172.16.125.1
419203751 172.16.126.178 255.255.255.240 172.16.126.177
419203811 172.16.126.179 255.255.255.240 172.16.126.177
419203755 172.16.125.18 255.255.255.240 172.16.125.17

2,编写在每台主机上要执行的脚本,需要安装修改bmc地址用到的ipmitool。然后根据本机的序列号来筛选预定义的IP信息,再进行配置。ipmi.sh内容如下:

#!/bin/bash
#通过yum安装ipmitool
yum install -y ipmitool
#定义当前主机的序列号变量
SN=`dmidecode -t 1 |grep "Serial Number" |awk -F ": " '{print $2}'`
#根据当前主机的序列号在bmcip中筛选查找所对应的ip地址
ip=`cat /tmp/bmcip |grep $SN |awk -F " " '{print $2}'`
#根据当前主机的序列号在bmcip中筛选查找所对应的掩码
netmask=`cat /tmp/bmcip |grep $SN |awk -F " " '{print $3}'`
#根据当前主机的序列号在bmcip中筛选查找所对应的网关
gateway=`cat /tmp/bmcip |grep $SN |awk -F " " '{print $4}'`
#配置bmc为静态模式
ipmitool lan set 1 ipsrc static
#配置bmc地址
ipmitool lan set 1 ipaddr $ip
#配置bmc掩码
ipmitool lan set 1 netmask $netmask
#配置bmc网关
ipmitool lan set 1 defgw ipaddr $gateway

3,在管理机器上安装expect 和nmap工具,然后用nmap 扫描在线的主机,形成host_ip文件,记得排除管理机IP和交换机等IP

nmap -sP 192.168.70.1/24 > host_ip

host_ip内容格式如下:

192.168.70.11
192.168.70.12
192.168.70.13
192.168.70.14
192.168.70.15
192.168.70.16
192.168.70.17
192.168.70.18
192.168.70.19
192.168.70.22
192.168.70.23
192.168.70.24

4,编写批量上传文件的脚本和执行命令的脚本bmc.sh内容如下

#!/bin/bash
#在host_ip中循环列出所有的目标IP
for row in `cat host_ip | awk -F " " '{print $1}'`
  do
#定义IP变量
ip=`echo ${row} | awk -F " " '{print $1}'`
#上传ipmi.sh到所有目标主机
/usr/bin/expect <<-EOF
spawn scp /var/www/html/script/ipmi.sh $ip:/tmp/
expect {
        "yes/no" {send "yes\r";exp_continue}
        "password: " {send "admin@123\r";exp_continue}
    }
EOF
 done
for row in `cat host_ip | awk -F " " '{print $1}'`
  do
#定义IP变量
ip=`echo ${row} | awk -F " " '{print $1}'`
#上传bmcip到所有目标主机
/usr/bin/expect <<-EOF
spawn scp /var/www/html/script/bmcip $ip:/tmp/
expect {
        "yes/no" {send "yes\r";exp_continue}
        "password: " {send "admin@123\r";exp_continue}
        }
EOF
done
    for row in `cat host_ip | awk -F " " '{print $1}'`
  do
#定义IP变量
ip=`echo ${row} | awk -F " " '{print $1}'`
#在host_ip中的每个主机中依次执行下面的命令,无需人工干预,全部无交互
/usr/bin/expect <<-EOF
spawn ssh root@$ip
expect {
        "yes/no" {send "yes\r";exp_continue}
        "password: " {send "admin@123\r";exp_continue}
         }
set timeout -1
expect "*#"
send "chmod +x /tmp/ipmi.sh\r"
expect "*#"
send "/tmp/ipmi.sh\r"
expect "*#"
send "exit\r"
expect eof
EOF
done

在管理机上执行bmc.sh即可,bmc.shhost_ip须在同一目录下

版权说明:若无注明,本文皆为“猫先生的日常点滴”原创,转载请保留文章出处。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python3无法print中文的解决方案

    python 的编码问题很让人窝火,本来以为 python3 不会再遇到各种奇怪的编码问题,没想到又跳到一个大坑里。在 shell 环境中,用 python3 ...

    章鱼喵
  • 吃瓜笔记 | 旷视研究院:被遮挡人脸区域检测的技术细节(PPT+视频)

    主讲人:袁野 | 旷视研究院研究员 屈鑫 编辑整理 量子位 出品 | 公众号 QbitAI 12月27日晚,量子位·吃瓜社联合Face++论文解读系列第四期开讲...

    量子位
  • Python 中那些令人拍案叫绝的功能!

    链接:www.oschina.net/translate/python-functions

    Rocky0429
  • Python字符串,列表

    字符串: 字符串的创建: 单引号, 双引号 ,三引号 <注意: 转义字符的使用> 字符串的特殊性: 索引 切片 连接 重复 成员操作符(in, not in...

    py3study
  • python协程

    https://docs.python.org/zh-cn/3/library/asyncio.html

    润森
  • JAVA回调机制(CallBack)详解

    最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack...

    哲洛不闹
  • 用Python写个迷你版“天黑请闭眼”游戏

    游戏的逻辑,我们这里做了处理,弄的很简单,随机发牌,用一个死循环,让用户一直玩这个游戏时:

    数据森麟

扫码关注云+社区

领取腾讯云代金券