Shell脚本监控服务器pts登录情况记录为日志并邮件通知【CentOS 6.5】

(一)配置服务器sendmail发邮件功能:

  安装sendmail服务:

# yum  install  sendmail  -y

 

  下面启动sendmail服务:

# /etc/init.d/sendmail  restart

    启动后请单独用mail -s测试邮件是否可以发送出去,此处不介绍了。

 

(二)Linux下用nali查询IP地址归属地:

  下载nali的tar包:

# wget  http://chenze.name/wenjian/nali-0.2.tar.gz

 

  解压,并放到合适位置:

# tar  xvf nali-0.2.tar.gz

# mv  nali-0.2  /mydata/nali

 

  编译安装:

# cd  /mydata/nali

# ./configure

# make  &&  make  install

 

  更新本地nali地址库(建议制定计划任务,每天自动更新一次IP地址库):

# nali-update

 

 

  使用nali命令瞧一瞧:

# nali  42.96.189.63

 

 

  查看一下环境变量nali在哪个目录下:

 

 

    如果nali命令得到的中文地名输入到log中或发送出去的邮件中为空或乱码,那可能是服务器、脚本的编码问题,请自行解决。下面说正事儿:

 

  首先编写下面这个脚本,不要放在/root目录下!

# vim  /mydata/bash_shell/ssh_login_monitor.sh

------------------------------------------------------------------------

#!/bin/bash

echo
CommonlyIP=("139.168.55.6")                          #  常用ssh登陆服务器的IP地址,即IP白名单
SendToEmail=("opsadmin@rjl.com" "123456789@qq.com")           #  接收报警的邮箱地址

LoginInfo=`last | grep "still logged in" | head -n1`
UserName=`echo $LoginInfo | gawk '{print $1}'`
LoginIP=`echo $LoginInfo | gawk '{print $3}'`
LoginTime=`date +'%Y-%m-%d %H:%M:%S'`
LoginPlace=`/usr/local/bin/nali $LoginIP | gawk -F'[][]' '{print $2}'`
SSHLoginLog="/var/log/login_access.log"

for ip in ${CommonlyIP[*]}  # 判断登录的客户端地址是否在白名单中
do
    if [ "$LoginIP" == $ip ];then
        COOL="YES"
    fi
done

if [ "$COOL" == "YES" ];then
    echo "用户【 $UserName 】于北京时间【 $LoginTime 】登陆了服务器,其IP地址安全!" >> $SSHLoginLog
elif [ $LoginIP ];then
    echo "用户【 $UserName 】于北京时间【 $LoginTime 】登陆了服务器,其IP地址为【 $LoginIP 】,归属地【 $LoginPlace 】" | mail -s "【 通知 】 有终端SSH连上服务器了!" ${SendToEmail[*]}
    echo "用户【 $UserName 】于北京时间【 $LoginTime 】登陆了服务器,其IP地址为【 $LoginIP 】,归属地【 $LoginPlace 】" >> $SSHLoginLog
fi
echo

------------------------------------------------------------------------

 

  将脚本添加到hosts.allow里,登录终端自动执行该脚本一次:

# vim  /etc/hosts.allow

------------------------------------------------------------------------

# 添加下面这句话即可

sshd:All:spawn (/bin/sh /mydata/bash_shell/ssh_login_monitor.sh) &:allow

------------------------------------------------------------------------

 

BUG提示】本人在后期使用过程中发现,如果写在/etc/hosts.allow中,会有一个BUG,那就是第一个SSH终端登录的用户将不会被“监视”到,也就是无法触发脚本,不会记录下日志。于是做如下改进:

  将脚本写到到 /etc/ssh/sshrc 中,ssh登录时自动执行该脚本一次:

# vim  /etc/ssh/sshrc

------------------------------------------------------------------------

# 添加下面这句话即可

/bin/sh  /mydata/bash_shell/ssh_login_monitor.sh

------------------------------------------------------------------------

    由于/etc/hosts.allow 无论登录用户是谁,执行该文件中的都将是root用户,因此,被调用的脚本也是root执行的。但是 /etc/ssh/sshrc 中就不一样了,哪个用户登录的,就是哪个用户执行脚本,那么问题来了,记录登录信息的日志此时可能权限为644(echo生成的txt文件默认权限),普通用户写不成该文件!所以一定要记得用root用户赋予login_access.log文件 666 权限(如果结合zabbix自定义报警的话,就需要读文件,在这里读写权限一起给了):

# chmod  666  /var/log/login_access.log

 

   可以打开一个新的终端试试效果了。如果脚本没有执行,请赋予脚本可执行权限(chmod +x),讲道理/bin/sh已经避免了权限导致脚本不可执行的问题。下面是实际效果:

  查看邮箱:

160429_8pm4_2853264.png

     查看服务器上登录记录日志:

     # vim  /var/log/login_access.log

161254_aw25_2853264.png

  至此,监控终端登陆全部完成!

 

转载于:https://my.oschina.net/jamieliu/blog/718863

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值