实现功能:单个ip登陆当天只提醒一次,跳过白名单发送提示邮件。效果如下
设置linux 邮箱发邮件功能可能查看我的这篇文档:https://blog.csdn.net/cbuy888/article/details/88287883
[root@ald8 ~]# vim /etc/profile //编辑/etc/profile,在最后面添加下面代码即可(一定要编辑/etc/profile这个文件才有效果)
#------------用户登陆提醒
aipurl="/usr/local/dltx.ip"
[ ! -f "$aipurl" ] && :>$aipurl
ipin=`echo $(w|sed -n '3p'|awk '{print$3}')`
AIP=(`cat $aipurl`)
email=(ald8cn@163.com lcf@ald8.cn)
WhiteList=(192.168.1.1 192.168.2.1)
wTrue="false"
iTrue="false"
# 判断时间,如果时间不是当天的则清除AIP数据
if [ ! $ADATE ];then
ADATE=`date +%Y%m%d`
else
temp=`date +%Y%m%d`
if [ $ADATE != $temp ];then
:>$aipurl
fi
fi
# 循环判断当前IP是否在集合里
for ip in ${AIP[@]}
do
if [ $ipin == $ip ];then
iTrue="true"
fi
done
# 循环判断ipin是否在白名单里
for ip in ${WhiteList[@]}
do
if [ $ipin == $ip ];then
wTrue="true"
fi
done
# 如果不在白名单里并且当天还未发送过登陆提示邮件的才进行邮件发送
if [ $iTrue == "false" -a $wTrue == "false" ];then
content=`echo "连接服务器用户名:$(whoami) 服务器主机名: $(hostname) 服务器IP: $(curl ipin.ald8.cn -s) || 登陆时间:$(date) 客户端口IP: $(w|sed -n '3p'|awk '{print$3}')"`
temp=`date +%s`
echo $ipin >> $aipurl
for y in ${email[@]}
do
echo $content | mail -s "登陆提示$temp(server ip address: $(curl ipin.ald8.cn -s))" $y
done
fi
补充说明:
[ ! -f "$aipurl" ] && :>$aipurl //用于连续记录当天所有不同ipin的值
ipin=echo $(w|sed -n '3p'|awk '{print$3}') //获取登陆者ip
email=(ald8cn@163.com lcf@ald8.cn) //发送提示邮件地址(空格做间隔)
WhiteList=(192.168.1.1 192.168.2.1) //白名单ip(空格做间隔)
wTrue=“false” //true表是白名单内的ip,false表示不是白名单内的ip.
iTrue="false" //true表示当天已经发送过提示邮件,false表示还未发送过邮件的ipin