上下文:我在Redhat Radius服务器上工作,我有一个Shell脚本,每次未经授权的用户尝试访问网络时,该脚本都会向我发送一封电子邮件(例如:无效的用户:交换机:交换机xxx |端口:xx | Mac地址:xxxxxxxxxxxxxx )
我的脚本如下所示:
#!/bin/bash
while :
do
if [ ! -e myFile ] ; then
grep Invalid radius.log > myFile
mailx -E -s Radius-Invalid-User [email protected] < myFile
else
comm -23 <(grep Trigger-Word radius.log) myFile| mailx -E -s Radius-Invalid-User [email protected]
grep Trigger-Word radius.log > myFile
fi
sleep 1
done
该脚本可以正常工作,并且完全可以完成它的工作,但是邮件中的Output只是日志文件中的一行,很难读取:
Mon Jan 22 09:38:24 2018 : Auth: (18) Invalid user: [000000000] (from client client-id port 15 cli xx-xx-xx-xx-xx-xx) switchname Port: |15|
所以我必须进行修复.麻烦开始了.
|-------------------------------------------------------------|
Switch:
|-------------------------------------------------------------|
Port-Nr:
|-------------------------------------------------------------|
MAC-Address:
|-------------------------------------------------------------|
我认为脚本部分应如下所示:
(
echo "|-------------------------------------------------------------|"
echo " "
echo " Switch: `awk 'END {print $19}' myFile`"
echo " "
echo "|-------------------------------------------------------------|"
echo " "
echo " Port-Nr: `awk 'END {print $21}' myFile`"
echo " "
echo "|-------------------------------------------------------------|"
echo " "
echo " MAC-Address: `awk 'END {print $11}' myFile`"
echo " "
echo "|-------------------------------------------------------------|"
) | mailx -E -s Radius [email protected]
这里的问题是,该邮件不再为空,因此mailx命令中的-E不能帮助它不再检查是否已发送此邮件.因为这是一个无休止的循环,所以它以“空白表格”发送永久邮件.
有人可以帮我解决该脚本的功能与第一个脚本完全相同的问题,但是可以使用正确的格式发送邮件.
如果您需要更多信息,请告诉我
提前谢谢
解决方法:
#!/bin/bash
l=radius.log # logfile, all logs
m=myFile
_sendMail(){ # send mail if not empty
local f msg="$(</dev/stdin)" # mail contents
if [[ -n "$msg" ]]; then # if contents not empty
while read -r -a f || [[ -n "${f[20]}" ]]; do # read line by line
[[ -z "${f[20]}" ]] && continue # ignore mal-formatted log
echo "|-------------------------------------------------------------|"
echo " Switch: ${f[18]}"
echo "|-------------------------------------------------------------|"
echo " Port-Nr: ${f[20]}"
echo "|-------------------------------------------------------------|"
echo " MAC-Address: ${f[10]}"
echo "|-------------------------------------------------------------|"
done <<<"$msg" | (echo "-----> $1"; cat) # fake sending for test
#done <<<"$msg" | mailx -E -s "$1" [email protected] # real sending, $1 = subject
fi
}
while :; do # endless loop
if [[ ! -e "$m" ]]; then
grep "Invalid user" "$l" >"$m"
_sendMail "Invalid $l" <"$m"
else
n=$(grep "Invalid user" "$l")
comm -23 <(echo "$n") "$m" | _sendMail "Radius Invalid User"
echo "$n" >"$m"
fi
sleep 1
done
去测试:
>运行bash脚本
>在另一个终端上,将日志行连续添加到radius.log中,例如:
$echo’Auth:(18)无效的用户:[000000000](来自客户端client-id端口15 cli xx-xx-xx-xx-xx-xx)switchname端口:| 15 |’ >> radius.log
> bash脚本检测到新日志,如果该日志行包含“ Invalid user:”,则发送邮件.
输出:
$./report-error.sh
-----> Radius Invalid User
|-------------------------------------------------------------|
Switch: switchname
|-------------------------------------------------------------|
Port-Nr: |23|
|-------------------------------------------------------------|
MAC-Address: [000000000]
|-------------------------------------------------------------|
-----> Radius Invalid User
|-------------------------------------------------------------|
Switch: switchname
|-------------------------------------------------------------|
Port-Nr: |33|
|-------------------------------------------------------------|
MAC-Address: [000000000]
|-------------------------------------------------------------|
-----> Radius Invalid User
|-------------------------------------------------------------|
Switch: switchname
|-------------------------------------------------------------|
Port-Nr: |33|
|-------------------------------------------------------------|
MAC-Address: [000000000]
|-------------------------------------------------------------|
|-------------------------------------------------------------|
Switch: switchname
|-------------------------------------------------------------|
Port-Nr: |33|
|-------------------------------------------------------------|
MAC-Address: [000000000]
|-------------------------------------------------------------|
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。