Ssh

監控每個使用者的 SSH 流量

  • February 6, 2012

我們有一個每 12 小時執行一次的備份應用程序。

多台伺服器、台式機和筆記型電腦連接到 EC2 實例,並使用自己的登錄憑據通過 SFTP 推送備份。

如果他們需要恢復文件,他們可以通過簡單的 SFTP 客戶端瀏覽文件並恢復文件。在過去的 8 個月裡,這一直執行得非常好。

我想知道每個使用者每月通過 SSH 傳輸多少數據。我不需要過去 8 個月的日誌,但是從現在開始記錄它的東西會很棒。

有什麼可以讓我這樣做嗎?

作業系統: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 上測試)。

引用自:https://serverfault.com/questions/251823