用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

目录
相关文章
|
3天前
|
Linux
Linux 服务器下载百度网盘文件
本教程指导如何使用 `bypy` 库从百度网盘下载文件。首先通过 `pip install bypy` 安装库,接着运行 `bypy info` 获取登录链接并完成授权,最后将文件置于指定目录并通过 `bypy downdir /Ziya-13b-v1` 命令下载至本地。
14 1
Linux 服务器下载百度网盘文件
|
3天前
|
Shell Linux Perl
linux服务器自动生成本地快照
【8月更文挑战第28天】本文介绍了在Linux服务器上通过两种常见方式创建本地快照的方法:Btrfs文件系统与LVM。Btrfs原生支持快照功能,操作简单快捷;LVM则提供了灵活的逻辑卷管理,可在不影响原始数据的情况下创建快照。文章详细列出了创建、查看、挂载及清理快照的具体步骤,并提供了一个自动化的Shell脚本示例,便于用户根据需求定期创建快照并清理过期快照。
12 3
|
2天前
|
缓存 Linux 调度
Linux服务器如何查看CPU占用率、内存占用、带宽占用
Linux服务器如何查看CPU占用率、内存占用、带宽占用
8 0
|
3天前
|
Linux 网络安全 网络架构
如何处理在学校Linux连接不上服务器
如何处理在学校Linux连接不上服务器
16 0
|
15天前
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
|
5天前
|
弹性计算 负载均衡 数据库
阿里云轻量应用服务器全面解析:收费标准、产品优势及适用场景
在云计算领域,阿里云凭借其强大的技术实力和丰富的产品线,为用户提供了一系列高效、便捷的云服务器产品。其中,轻量应用服务器(Simple Application Server)作为面向个人开发者、中小企业等用户的入门级云产品,凭借其易用性、高性价比以及一站式服务体验,受到了广泛的欢迎。本文将全面解析阿里云轻量应用服务器的收费标准、产品优势以及适用场景,帮助用户更好地了解和选择这一产品。
阿里云轻量应用服务器全面解析:收费标准、产品优势及适用场景
|
9天前
|
弹性计算 负载均衡 数据库
阿里云轻量应用服务器收费标准、性能及适用场景全面解析
阿里云轻量应用服务器(Simple Application Server)作为面向个人开发者、中小企业等用户的入门级云产品,凭借其易用性、高性价比以及一站式服务体验,受到了广泛的欢迎。本文将全面解析阿里云轻量应用服务器的收费标准、最新活动价格以及适用场景,帮助用户更好地了解和选择这一产品。
阿里云轻量应用服务器收费标准、性能及适用场景全面解析
|
18天前
|
云安全 弹性计算 安全
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器不仅提供了一些基础防护,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为大家介绍一下阿里云服务器的基础安全防护有哪些,以及阿里云的一些安全防护类云产品。
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
|
17天前
|
机器学习/深度学习 弹性计算 人工智能
阿里云第八代云服务器ECSg8i实例深度解析:性能及适用场景参考
目前企业对云服务器的性能、安全性和AI能力的要求日益提高。阿里云推出的第八代云服务器ECS g8i实例,以其卓越的性能、增强的AI能力和全面的安全防护,除了适用于通用互联网应用和在线音视频应用等场景之外,也广泛应用于AI相关应用。本文将深入解析ECS g8i实例的技术特性、产品优势、适用场景及与同类产品的对比,以供参考。
阿里云第八代云服务器ECSg8i实例深度解析:性能及适用场景参考
|
24天前
|
编解码 分布式计算 Linux
最新阿里云服务器、轻量应用服务器、GPU云服务器活动价格参考
阿里云服务器产品包含云服务器、轻量应用服务器、GPU云服务器等,本文汇总了这些云服务器当下最新的实时活动价格情况,包含经济型e实例云服务器价格、通用算力型u1实例云服务器价格、第七代云服务器价格、轻量应用服务器最新价格、GPU云服务器价格,以供大家参考。
最新阿里云服务器、轻量应用服务器、GPU云服务器活动价格参考
下一篇
云函数