监视每个用户的SSHstream量

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

多个服务器,台式机和便携式计算机连接到EC2实例,并使用自己的login凭据通过SFTP推送备份。

如果他们需要恢复文件,他们可以通过一个简单的SFTP客户端浏览文件,并恢复他们的文件。 这在过去的8个月里运行得非常好。

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

有什么可以让我做这个吗?

操作系统:Ubuntu 10.10

这花了一些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上进行testing)。

您可以通过IP(在日志文件中提供)跟踪用户login,然后几乎可以使用任何stream量监控解决scheme(Netflow和IPtraf)来跟踪该IP的端口22stream量。

不幸的是,前几个月的历史使用情况是不可用的,除非您已经设置了这个function。

你可能想在sftp日志中看看这个post 。 我认为这会得到你想要的,还有一些额外的工作来parsing日志。

auditd是一个很好的工具,可以知道对每个文件做了什么。 这可能不是你需要强硬的东西。