用Linux Shell脚本轻松管理Radius服务器

简介:
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://dgd2010.blog.51cto.com/1539422/1567085

公司的无线环境采用mac地址认证的方式,mac地址被绑定到Radius的users配置文件中,将注册了的mac地址作为用户名和密码。为了方便的管理这些mac地址,自己写了一个shell脚本来管理。

shell脚本所特有的强大文本处理能力和各种命令函数的组合,使得管理员的工作能轻松不少。

下面就列出该脚本的功能以示参考:

  1. 添加mac地址

  2. 删除mac地址

  3. 查找mac地址

  4. 去除重复mac地址

  5. 检查mac地址合法性

  6. TODO,导入导出mac地址,添加注释

其中用到的Shell脚本技术包括但不限于:

  1. 文本文件的列处理和行处理,如sed、awk等命令

  2. 字符串查找、过滤、大小写转换,bash和grep等命令

  3. 获取、计算、比较字符串长度,bash和wc等命令

  4. mac地址正则表达式的处理和类型转换

  5. shell编程操作、包括文件包含、函数、参数传递、返回值等

  6. 其他

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#!/bin/bash
#
 
# Source function library.
/etc/rc .d /init .d /functions
 
RADIUSD= /usr/sbin/radiusd
LOCKF= /var/lock/subsys/radiusd
CONFIG= /etc/raddb/radiusd .conf
USERCONFIG= /etc/raddb/users
 
[ -f $RADIUSD ] ||  exit  0
[ -f $CONFIG ] ||  exit  0
[ -f $USERCONFIG ] ||  exit  0
 
RETVAL=0
 
OPERATION=$1
MACADDRESS=$2
 
function  help()
{
     clear
     echo  $ ""
     echo  $ "===================================================================================="
     echo  $ "For Radius on Fedora/CentOS/RadHat Linux Server, Written by Chris"
     echo  $ "===================================================================================="
     echo  $ "A tool to manage Radius server"
     echo  $ ""
     echo  $ "Usage: $0 {find|add|modify|delete|check|remove|start|stop|status|restart|reload} mac"
     #TODO
     echo  $ "Usage: $0 {import|export|debug}"
     echo  $ ""
     echo  $ "For more information please contract dgdenterprise@gmail.com"
     echo  $ "===================================================================================="
     echo  $ ""
     exit  1
}
 
function  mac()
{
     if  [ -z $MACADDRESS ]; then
         echo  $ "no mac address is signed! "
         echo  $ "\$2 is $MACADDRESS"
         exit  1
     else
                 if  [[  "${#MACADDRESS}"  !=  "12"  ]] && [[  "${#MACADDRESS}"  !=  "17"  ]] ; then
             echo  "mac length is ${#MACADDRESS}"
                         echo  "mac address is illegal! "
             exit  1
#                else
#                        echo $"mac which you input is $MACADDRESS"
                 fi
         #echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}/p'
         #echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}/p'
         #echo $MACADDRESS | sed -nr '/[A-Fa-f0-9]{12}/p'
         if  [[ ` echo  $MACADDRESS |  grep  -` ]]; then
             PROMAC=` echo  $MACADDRESS |  sed  -nr  '/[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}-[A-Fa-f0-9]{2}/p'  tr  '[:upper:]'  '[:lower:]'  sed  's/-//g' `
         elif  [[ ` echo  $MACADDRESS |  grep  :` ]]; then
             PROMAC=` echo  $MACADDRESS |  sed  -nr  '/[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}/p'  tr  '[:upper:]'  '[:lower:]'  sed  's/://g' `
         else
             PROMAC=` echo  $MACADDRESS |  tr  '[:upper:]'  '[:lower:]' `
         fi
         echo  $PROMAC
     fi
}
 
function  find ()
{
     MAC=`mac`
     echo  $ "accepted mac is $MAC"
     if  [[ ` grep  $MAC $USERCONFIG` ]];  then
         MACLINE=` grep  -n $MAC $USERCONFIG |  awk  -F  ':'  '{print $1}' `
         #echo $MACLINE
         MACLINECOUNT=$( echo  $MACLINE |  wc  -w)
         #echo $MACLINECOUNT
         if  [[  "$MACLINECOUNT"  !=  "1"  ]]; then
             echo  $ "ERROR, this mac $MAC has duplicate record, you should use $0 remove $MAC to remove duplicate record"
             exit  1
         fi
         echo  $ "Successfully find $MAC in $MACLINE line of file $USERCONFIG! "
         echo
         REVAL=$?
     else
         echo  $ "Can not find $MAC in file $USERCONFIG! "
         echo
         exit  1
         REVAL=$?
     fi
}
 
function  add()
{
     MAC=`mac`
     echo  $ "accepted mac is $MAC"
     #find $MAC
     LINENUM=` grep  -n  "Cleartext-Password :='"  $USERCONFIG |  grep  - v  \ # | head -n1 | awk -F ":" '{print $1}'`
     SEDOPERATION=$LINENUM "a"
     sed  -i  "$SEDOPERATION $MAC    Cleartext-Password :='$MAC'"  $USERCONFIG
     find  $MAC
     restart
}
 
function  modify()
{
     MAC=`mac`
     find  $MAC
     #TODO
     
}
 
function  delete()
{
         MAC=`mac`
         echo  $ "accepted mac is $MAC"
         if  [[ ` grep  $MAC $USERCONFIG` ]];  then
                 MACLINE=` grep  -n $MAC $USERCONFIG |  awk  -F  ':'  '{print $1}' `
                 ##echo $MACLINE
                 #MACLINECOUNT=$(echo $MACLINE | wc -w)
                 ##echo $MACLINECOUNT
                 #if [[ "$MACLINECOUNT" != "1" ]];then
                 #        echo $"ERROR, this mac $MAC has duplicate record, you should use $0 remove $MAC to remove duplicate record"
                 #        exit 1
                 #fi
                 echo  $ "Successfully find $MAC in $MACLINE line of file $USERCONFIG! "
         echo  $ "It will be deleted! "
         sed  -i  "$MACLINE d"  $USERCONFIG
         #TODO
         echo  $ "If you see 'Can not find $MAC in file $USERCONFIG! ', it means successfully! "
         find  $MAC
                 echo
                 REVAL=$?
         else
                 echo  $ "Can not find $MAC in file $USERCONFIG! "
                 echo
                 REVAL=$?
         fi
}
 
function  check()
{
     MAC=`mac`
     find  $MAC
     remove $MAC
}
 
function  remove()
{
     MAC=`mac`
         echo  $ "accepted mac is $MAC"
     #TODO
     #echo $"backuped file to file $FILENAME"
         if  [[ ` grep  $MAC $USERCONFIG` ]];  then
                 MACLINE=` grep  -n $MAC $USERCONFIG |  awk  -F  ':'  '{print $1}' `
                 #echo $MACLINE
                 MACLINECOUNT=$( echo  $MACLINE |  wc  -w)
                 #echo $MACLINECOUNT
                 if  [[  "$MACLINECOUNT"  ==  "1"  ]]; then
                         echo  $ "WARNNING, this mac $MAC is good record, no duplicate record has found! "
                         exit  0
                 fi
     TOREMOVE= "$MAC    Cleartext-Password :='$MAC'"
     sed  -i  "/^$TOREMOVE$/d"  $USERCONFIG
     add $MAC
     fi
}
 
function  restart()
{
     service radiusd restart
}
 
function  reload()
{
     service radiusd reload
}
 
function  status()
{
     service radiusd status
}
 
case  "$1"  in 
     find )
         find
         RETVAL=$?
     ;;
     add)
         add
         RETVAL=$?
     ;;
     modify)
         modify
         RETVAL=$?
     ;;
     delete)
         delete
         RETVAL=$?
     ;;
     check)
         check
         RETVAL=$?
     ;;
     remove)
         remove
         RETVAL=$?
     ;;
     start)
         start
         RETVAL=$?
     ;;
     stop)
         stop
         RETVAL=$?
     ;;
     status)
         status
         RETVAL=$?
     ;;
     restart)
         restart
         RETVAL=$?
     ;;
     reload)
         reload
         RETVAL=$?
     ;;
     *)
         help
         exit  1
     ;;
esac

其中有一些可以改进的地方,比如换一种方法或者增强用户的使用体验都是可以的,欢迎大家提出意见。

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1567085

目录
相关文章
|
2月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
77 2
6种方法打造出色的Shell脚本
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
63 4
|
2月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
90 4
|
2月前
|
运维 监控 安全
盘点Linux服务器运维管理面板
随着云计算和大数据技术的迅猛发展,Linux服务器在运维管理中扮演着越来越重要的角色。传统的Linux服务器管理方式已经无法满足现代企业的需求,因此,高效、安全、易用的运维管理面板应运而生。
|
2月前
|
运维 监控 Linux
服务器管理面板大盘点: 8款开源面板助你轻松管理Linux服务器
在数字化时代,服务器作为数据存储和计算的核心设备,其管理效率与安全性直接关系到业务的稳定性和可持续发展。随着技术的不断进步,开源社区涌现出众多服务器管理面板,这些工具以其强大的功能、灵活的配置和友好的用户界面,极大地简化了Linux服务器的管理工作。本文将详细介绍8款开源的服务器管理面板,包括Websoft9、宝塔、cPanel、1Panel等,旨在帮助运维人员更好地选择和使用这些工具,提升服务器管理效率。
|
2月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
89 1
|
2月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
83 2
|
1月前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
2月前
|
缓存 Unix Linux
服务器linux!!!
本文介绍了计算机的演变历史、硬件基础知识及服务器相关知识。从电子管时代的ENIAC到冯-诺伊曼架构,再到现代计算机系统组成,详细讲解了计算机的发展历程。此外,文章还介绍了服务器的分类、品牌、硬件组成以及IDC机房的上架流程,为读者提供了全面的技术背景知识。
66 0
服务器linux!!!
|
2月前
|
人工智能 安全 Linux

热门文章

最新文章