dhcpd服务器添加主机MAC地址脚本
2013年03月22日
最近开始负责公司办公网络的dhcp服务器管理,主要职责就是谁的电脑要上网都要找我注册一下,把mac地址加入到dhcp服务器的配置文件/etc/dhcpd.conf中,而且还要先备份,再修改,再重启。对这种重复性操作一向深恶痛绝,所以琢磨了一下,写个脚本,每次输入hostname 和 mac地址就直接开始备份,添加,重启操作,岂不痛快?
现在每次都是一句话搞定所有步骤,十分轻松。下面就是整个脚本的内容了,有需要的同仁尽管拿去用吧。
一般dhcpd.conf的配置文件如下格式:
default-lease-time 21600;
max-lease-time 43200;
group {
host test { hardware ethernet 12:12:12:12:12:12 ; }
...
host test-again { hardware ethernet aa:aa:aa:aa:aa:aa; }
}
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.2;
range range 192.168.1.3 192.168.1.254;
}
每次有新的机器要加入到内网中都要在group里面添加一行主机的mac记录,操作有三步:备份、修改、加载。下面的脚本简化了这三部操作。
#!/bin/bash
# Add a Mac Address to the /etc/dhcpd.conf
# date 20130321 by lhzhi
FILE_DIR=/etc/
if [ ! $# -eq 2 ] ; #需要两个参数,一个是hostname,一个是MAC地址
then
echo "This script need 2 argument" #服务器上没中文环境,所以提示都是英文
echo "Usage: $0 host-name mac_address" #用department-name作为主机名识别
exit
else
DEPART=$1 #Department name is hostname
MAC_ADDR=$2 #Mac address
fi
is_mac(){
len1=`echo $1 | awk -F: '{print NF}'` #截取出来的段数
len2=`echo $1 | awk -F: '{i=1;while(i<=NF){if($i ~/^[0-9a-fA-F][0-9a-fA-F]$/) {print $i} i++}}' | wc -l` #awk正则表达式匹配内容。
if [ $len1 -eq $len2 ] && [ $len1 -eq 6 ] && [ ${#1} -eq 17 ] ; then #很傻冒的办法,看不懂说明您已经是高等人类,大脑自动屏蔽了这种恶心的办法
echo 'mac is valid'
else
echo "mac address is invilide,please check it before try again"
exit
fi
}
is_mac $MAC_ADDR #is this mac address invilide
if [ ! -f ${FILE_DIR}dhcpd.conf ];then
echo "Error:${FILE_DIR}dhcpd.conf is not exist,check it first" #检查/etc/dhcpd.conf是否存在,没有的话可能是你登录错服务器了,或者是出大问题了
exit
fi
Low_MAC_ADDR=`echo $MAC_ADDR | tr A-Z a-z`
UPP_MAC_ADDR=`echo $MAC_ADDR | tr a-z A-Z` #MAC地址可能是大写也可能是小写,如果你是在同一个MAC地址中既大写又小写,请您绕道吧
if grep $Low_MAC_ADDR ${FILE_DIR}dhcpd.conf || grep $Low_MAC_ADDR ${FILE_DIR}dhcpd.conf || awk '/^host/{print $2}' ${FILE_DIR}dhcpd.conf | grep ^${DEPART}$ ;then #继续走二货路线
echo 'this record is already exist.'
exit
else
echo 'it is a new user'
fi
BACKUP_FILENAME=${FILE_DIR}dhcpd.conf.backup`date +%Y%m%d%H%M%S` #先备份配置文件
ADD_LINE="host $DEPART { hardware ethernet $MAC_ADDR ; }" #构造要插入的行
cp ${FILE_DIR}dhcpd.conf $BACKUP_FILENAME #先备份配置文件
if [ $? -eq 0 ];
then
LAST_MAC=`sed -n '/^host/h;${x;p}' ${FILE_DIR}dhcpd.conf | awk '{print $6}'` #获取最后一行host的mac地址,
sed -i "/${LAST_MAC}/a\\${ADD_LINE}" ${FILE_DIR}dhcpd.conf #将新的mac地址插到这一行的下面
fi
if [ $? -eq 0 ];
then
/etc/init.d/dhcpd reload && echo "dhcpd reload ok..." #重启,收工
fi
这脚本确实不够优雅,如果各位看官有什么更高明的办法,还望不吝赐教~
将脚本保存为ADDIP.sh文件,下面就可以开始测试了,
# bash ADDIP.sh ops-lhzhi ab:ab:ab:ab:ab:ab
看看你的/etc/dhcpd.conf中是不是已经有了一个新DHCP客户机的mac地址呢?
其实这个脚本功能还不是很完善
1.如果有一台客户机要给一个固定IP,就需要使用fixed-address ip 这种语句,但是现在也没遇到这种情况,所以先不考虑这个问题了
2.不能删除MAC记录,文件中已经四百多个MAC记录了,但是一般在线人数只有不到一百人,大量的离职员工MAC地址没清除掉,十分不利于管理。
一切等有需求了再说!
当前暂无评论 »