监控每个用户的SSH流量

Modified on: Thu, 11 Jul 2019 03:00:02 +0800

我们有一个每12小时运行一次的备份应用程序。

多台服务器,台式机和笔记本电脑连接到EC2实例,并使用自己的登录凭据通过SFTP推送备份。

如果需要恢复文件,他们可以通过简单的SFTP-Client浏览文件并恢复文件。在过去的8个月里,这种情况一直很顺利。

我想知道每个用户通过SSH每月传输多少数据。我不需要过去8个月的日志,但从现在开始记录它的东西会很棒。

有什么东西允许我这样做吗?

操作系统:Ubuntu 10.10

作者:,Bart De Vos

最佳答案

这需要一些awk-magic,这是我的同事和我能够组合在一起的。

#!/bin/bash

main() {
  if [ -e $1 ] ; then
    MONTH=$(date | awk '{ print $2 }')
  elif [ $1 -ge 1 -a $1 -le 12 ] ; then
    month $1
  else
    exit 1
  fi

  echo
  echo "Usage statistics for month $MONTH"
  echo

  USERS=(`awk '/^'$MONTH'.*session opened for local user.*$/ { print $(NF-2) } ' /var/log/auth.log* | sort | uniq`)
  for i in "${USERS[@]}"
  do :
    echo "################################"
    echo "Usage for user: $i"
    READ=0
    WRITTEN=0
    #processes for this user  
    PROCS=(`awk '/^'$MONTH'.*session opened for local user '$i'.*$/ { gsub("\\[|]|sftp-server|:","", $(NF-8)); print $(NF-8) } ' /var/log/auth.log* | sort | uniq`)
    for j in "${PROCS[@]}"
    do :

      TEMP_READ=$(awk '/^'$MONTH'.*\['$j'\].*\ read\ [0-9]+\ written\ [0-9]+$/ { sum+=$(NF-2)}END{ print sum}' /var/log/auth.log*)
      READ=$(($TEMP_READ+$READ))
      TEMP_WRITTEN=$(awk '/^'$MONTH'.*\['$j'\].*\ read\ [0-9]+\ written\ [0-9]+$/ { sum+=$(NF)}END{ print sum}' /var/log/auth.log*)
      WRITTEN=$(($TEMP_WRITTEN+$WRITTEN))
    done
    echo "Read     $(($READ/(1024*1024))) MiB"
    echo "Written  $(($WRITTEN/(1024*1024))) MiB"
    echo "################################"
    echo
  done
}

month() {
case "$1" in
  1)  MONTH='Jan'
    ;;
  2)  MONTH='Feb'
    ;;
  3)  MONTH='Mar'
    ;;
  4)  MONTH='Apr'
    ;;
  5)  MONTH='May'
    ;;
  6)  MONTH='Jun'
    ;;
  7)  MONTH='Jul'
    ;;
  8)  MONTH='Aug'
    ;;
  9)  MONTH='Sep'
    ;;
  10)  MONTH='Oct'
    ;;
  11)  MONTH='Nov'
    ;;
  12)  MONTH='Dec'
    ;;
  *) echo 'Crash and Burn!'
     exit 1
   ;;
esac
}

main $1
exit 0

在sshd_config中我把它放在:

 Subsystem sftp /usr/lib/openssh/sftp-server -l VERBOSE

警告:此脚本占用内存!如果您有大型日志文件,脚本最多可能需要10分钟才能完成(在EC2 Micro上测试)。

作者:,Bart De Vos

相关问答

添加新评论