用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

目录
相关文章
|
4天前
|
安全 Shell Linux
探索Linux命令chsh:更改用户的默认shell
`chsh`是Linux命令,用于更改用户的默认登录shell。它涉及用户环境配置和系统安全,允许用户选择更适合自己的shell以提升效率。命令有交互式选项和参数如`-s`来指定新shell。在使用时要注意新shell的可执行性、权限问题及选择合适的shell。例如,要更改为bash,用户可运行`chsh`后按提示操作,而root用户能用`sudo chsh -s /bin/zsh john`为用户`john`设定zsh。在更改前,确认shell路径、权限,并了解不同shell的特点。
|
4天前
|
存储 监控 Linux
性能监控之Telegraf+InfluxDB+Grafana linux服务器实时监控
【6月更文挑战11天】标题性能监控之 Java Metrics 度量包性能监控之Telegraf+InfluxDB+Grafana linux服务器实时监控
20 2
|
5天前
|
监控 Shell Linux
Linux的Shell脚本详解
Linux的Shell脚本详解
|
5天前
|
Linux 网络安全
|
1天前
|
数据可视化 网络协议 Linux
Linux 怎样通过win 远程桌面连接链接Linux后台服务器的可视化图形界面
Linux 怎样通过win 远程桌面连接链接Linux后台服务器的可视化图形界面
8 0
|
3天前
|
存储 Shell 开发者
Shell 变量详解:如何定义、使用和管理
**Shell脚本中,变量是核心元素,用于暂存数据。变量默认为字符串,赋值时等号两侧无空格。命名遵循:数字、字母、下划线,以非数字开头。常用特殊变量如 `$0` (脚本名),`$#` (参数个数)。定义变量可使用单引号(不解析变量)、双引号(解析变量)或不加引号(注意空格)。使用花括号明确变量边界,`readonly` 则可设定只读变量,`unset` 删除变量。实践这些概念以加深理解。**
10 0
|
8天前
|
Linux 数据库 iOS开发
超级签名源码/超级签/ios分发/签名端本地linux服务器完成签名
该系统完全在linux下运行,不存在使用第三方收费工具,市面上很多系统都是使用的是第三方收费系统,例如:某心签名工具,某测侠等,不开源而且需要每年交费,这种系统只是在这些工具的基础上套了一层壳。请需要系统的放大你们的眼睛。
13 0
|
1天前
|
存储 弹性计算 Linux
阿里云账号注册、完成实名认证、试用云服务器和购买云服务器流程参考
本文为大家介绍新手用户从注册阿里云账号,完成实名认证,然后试用云服务器和购买云服务器的主要流程,适合初次购买和试用阿里云服务器的新手用户参考。
阿里云账号注册、完成实名认证、试用云服务器和购买云服务器流程参考
|
4天前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。
|
18小时前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。