Ssh
監控每個使用者的 SSH 流量
我們有一個每 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 上測試)。