Intelligent Platform Management Interface
需求:已知BMC帳號id2為root管理員帳號,添加id5bmc帳號
工具:ipmitool version 1.8.14
系統:CentOS release 6.6 (Final)
1,通過yum安裝ipmitool安裝源
[root@zxl]# yum install ipmitool
已加載插件:fastestmirror, security
設置安裝進程
Loading mirror speeds from cached hostfile
解決依賴關系
--> 執行事務檢查
---> Package ipmitool.x86_64 0:1.8.11-20.el6 will be 升級
---> Package ipmitool.x86_64 0:1.8.11-21.el6 will be an update
--> 完成依賴關系計算
依賴關系解決
==============================================================================================================
軟件包 架構 版本 倉庫 大小
==============================================================================================================
正在升級:
ipmitool x86_64 1.8.11-21.el6 updates 463 k
事務概要
==============================================================================================================
Upgrade 1 Package(s)
總下載量:463 k
確定嗎?[y/N]:y
2,新建ip.csv文件,將BMC的IP(第一列)、ID 2的用戶名(第二列)、ID2的密碼(第三列)、ID5的用戶名(第四列)、ID5的密碼(第五列)
bmc_ip,bmc_user1,bmc_pass1,bmc_user2,bmc_pass2
10.27.11.86,admin,admin,bmc,calvin 10.27.11.17,admin,admin,bmc,calvin 10.27.11.68,admin,admin,bmc,calvin
3,新建bmc_adduser_id5_bmc.sh文件
#!/bin/bash VERSION=0.0.1 MODIFY_DATE=20170824 #判斷當前bmc是否是活的 function judgeActive() { res=`ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD mc info` if [ $? -ne 0 ] then echo "ip:$IP_ADDR not available" return 1 fi echo "ip:$IP_ADDR is available" return 0 } #獲取user1用戶的userid function judgeUserID() { USER_ID=`ipmitool -H $IP_ADDR -U $USER_NAME -P $PASSWD -I lanplus user list | grep " $USER_NAME " | awk '{print $1}'` if [ $? -ne 0 ] then return 1 fi return 0 } #判斷user2是否是活的 function checkNewUser() { res=`ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME2 -P $PASSWD2 mc info` if [ $? -ne 0 ] then echo "ip:$IP_ADDR $USER_NAME2 $PASSWD2 not available" return 1 fi echo "ip:$IP_ADDR $USER_NAME2 $PASSWD2 is available" return 0 } #輸出幫助信息 function printHelp() { echo "Usage:./bmc_adduser_id5_bmc_v2_170825.sh -i ipFile ipFile is bmc machine info file include ip username and password all info output file dump.csv" } #給id5增加用戶 function changeuser() { CHANNEL1=1 CHANNEL8=8 BMCID=5 #設置id5用戶名 ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD user set name $BMCID $USER_NAME2 if [ $? -ne 0 ] then echo "ip:$IP_ADDR $USER_NAME $PASSWD user set name not available" return 1 fi #設置id5密碼 ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD user set password $BMCID $PASSWD2 if [ $? -ne 0 ] then echo "ip:$IP_ADDR $USER_NAME $PASSWD user set password not available" return 1 fi #設置id5 channel1權限為administrator ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD user priv $BMCID 4 $CHANNEL1 if [ $? -ne 0 ] then echo "ip:$IP_ADDR $USER_NAME $PASSWD user priv $CHANNEL1 not available" return 1 fi #設置id5 channel8權限為administrator ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD user priv $BMCID 4 $CHANNEL8 if [ $? -ne 0 ] then echo "ip:$IP_ADDR $USER_NAME $PASSWD user priv $CHANNEL8 not available" return 1 fi #設置id5 channel1打開callin=on ipmi=true link=on privilege=4權限 ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD channel setaccess $CHANNEL1 $BMCID callin=on ipmi=true link=on privilege=4 if [ $? -ne 0 ] then echo "ip:$IP_ADDR $USER_NAME $PASSWD channel setaccess $CHANNEL1 not available" return 1 fi #設置id5 channel8打開callin=on ipmi=true link=on privilege=4權限 ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD channel setaccess $CHANNEL8 $BMCID callin=on ipmi=true link=on privilege=4 if [ $? -ne 0 ] then echo "ip:$IP_ADDR $USER_NAME $PASSWD channel setaccess $CHANNEL8 not available" return 1 fi #設置channel1的sol ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD sol payload enable $CHANNEL1 $BMCID if [ $? -ne 0 ] then echo "ip:$IP_ADDR $USER_NAME $PASSWD sol payload enable $CHANNEL1 not available" return 1 fi #user2使能 ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD user enable $BMCID if [ $? -ne 0 ] then echo "ip:$IP_ADDR $USER_NAME $PASSWD user enable not available" return 1 fi return 0 } case $1 in -h|--help) printHelp exit 0 ;; esac #獲取shell腳本參數 while getopts ":i:" opt do case $opt in i) IP_FILE=$OPTARG echo "ip file is "$IP_FILE ;; *) echo "argument error" exit 1;; esac done #判斷參數是否合法 if [ ${#IP_FILE} -eq 0 ] then echo "please assign ip file. detail info check -h" exit 0 fi echo "IP,check_original_user,original_userID,change_user,check_new_user">dump.csv declare -i i=0 #逐行讀取文件 for LINE in `cat $IP_FILE`; do { let i++ if [ $i -eq 1 ] then continue fi #判斷文件行的大小,若長度小於10則認為非法 if [ ${#LINE} -lt 10 ] then continue; fi #聲明變量並賦值 IP_ADDR=`echo $LINE | awk -F, '{print $1}'` USER_NAME=`echo $LINE | awk -F, '{print $2}'` PASSWD=`echo $LINE | awk -F, '{print $3}'` USER_NAME2=`echo $LINE | awk -F, '{print $4}'` PASSWD2=`echo $LINE | awk -F, '{print $5}' | sed 's/\r//g'` #判斷bmc是否是活的 judgeActive if [ $? -eq 1 ] then check_original_user="fail" echo "$IP_ADDR,$check_original_user,$original_userID,$change_user,$check_new_user">${IP_ADDR}.insdat continue else check_original_user="success" fi #判斷userid judgeUserID if [ $? -eq 1 ] then original_userID="get error" echo "$IP_ADDR,$check_original_user,$original_userID,$change_user,$check_new_user">${IP_ADDR}.insdat continue fi original_userID="is $USER_ID" #添加用戶 changeuser if [ $? -eq 1 ] then change_user="fail" echo "$IP_ADDR,$check_original_user,$original_userID,$change_user,$check_new_user">${IP_ADDR}.insdat continue else change_user="success" fi #檢查新添加的用戶 checkNewUser if [ $? -eq 1 ] then check_new_user="fail" echo "$IP_ADDR,$check_original_user,$original_userID,$change_user,$check_new_user">${IP_ADDR}.insdat continue else check_new_user="sucess" fi #輸出日志到日志文件 echo "$IP_ADDR,$check_original_user,$original_userID,$change_user,$check_new_user">${IP_ADDR}.insdat echo "$IP_ADDR dump info over" } done wait #匯集日志信息 allfile=`ls *.insdat` for file in $allfile do cat $file >> dump.csv done #刪除單個的日志文件 rm -r *.insdat echo "all dump info over"
4,執行./bmc_adduser_id5_bmc.sh -i ip.csv
ip:10.27.11.11 is available
ip:10.27.11.12 is available
ip:10.27.11.13 is available
5,執行完成后查看驗證文件cat dump.csv
10.27.11.11,success,,success,fail 10.27.11.12,success,,success,fail 10.27.11.13,success,,success,fail