sshmonitor 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/bin/bash
  2. clear
  3. if [[ -e /usr/lib/licence ]]; then
  4. database="/root/usuarios.db"
  5. tmp_now=$(printf '%(%H%M%S)T\n')
  6. fun_drop () {
  7. port_dropbear=`ps aux | grep dropbear | awk NR==1 | awk '{print $17;}'`
  8. log=/var/log/auth.log
  9. loginsukses='Password auth succeeded'
  10. clear
  11. pids=`ps ax |grep dropbear |grep " $port_dropbear" |awk -F" " '{print $1}'`
  12. for pid in $pids
  13. do
  14. pidlogs=`grep $pid $log |grep "$loginsukses" |awk -F" " '{print $3}'`
  15. i=0
  16. for pidend in $pidlogs
  17. do
  18. let i=i+1
  19. done
  20. if [ $pidend ];then
  21. login=`grep $pid $log |grep "$pidend" |grep "$loginsukses"`
  22. PID=$pid
  23. user=`echo $login |awk -F" " '{print $10}' | sed -r "s/'/ /g"`
  24. waktu=`echo $login |awk -F" " '{print $2"-"$1,$3}'`
  25. while [ ${#waktu} -lt 13 ]; do
  26. waktu=$waktu" "
  27. done
  28. while [ ${#user} -lt 16 ]; do
  29. user=$user" "
  30. done
  31. while [ ${#PID} -lt 8 ]; do
  32. PID=$PID" "
  33. done
  34. echo "$user $PID $waktu"
  35. fi
  36. done
  37. }
  38. echo -e "\033[0;37m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m"
  39. echo -e "\E[44;1;37m Usuario Status Conexão Tempo \E[0m"
  40. echo -e "\033[0;37m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m"
  41. while read usline
  42. do
  43. user="$(echo $usline | cut -d' ' -f1)"
  44. s2ssh="$(echo $usline | cut -d' ' -f2)"
  45. if [ "$(cat /etc/passwd| grep -w $user| wc -l)" = "1" ]; then
  46. sqd="$(ps -u $user | grep sshd | wc -l)"
  47. else
  48. sqd=00
  49. fi
  50. [[ "$sqd" = "" ]] && sqd=0
  51. if [[ -e /etc/openvpn/openvpn-status.log ]]; then
  52. ovp="$(cat /etc/openvpn/openvpn-status.log | grep -E ,"$user", | wc -l)"
  53. else
  54. ovp=0
  55. fi
  56. if netstat -nltp|grep 'dropbear'> /dev/null;then
  57. drop="$(fun_drop | grep "$user" | wc -l)"
  58. else
  59. drop=0
  60. fi
  61. cnx=$(($sqd + $drop))
  62. conex=$(($cnx + $ovp))
  63. if [[ $cnx -gt 0 ]]; then
  64. tst="$(ps -o etime $(ps -u $user |grep sshd |awk 'NR==1 {print $1}')|awk 'NR==2 {print $1}')"
  65. tst1=$(echo "$tst" | wc -c)
  66. if [[ "$tst1" == "9" ]]; then
  67. timerr="$(ps -o etime $(ps -u $user |grep sshd |awk 'NR==1 {print $1}')|awk 'NR==2 {print $1}')"
  68. else
  69. timerr="$(echo "00:$tst")"
  70. fi
  71. elif [[ $ovp -gt 0 ]]; then
  72. tmp2=$(printf '%(%H:%M:%S)T\n')
  73. tmp1="$(grep -w "$user" /etc/openvpn/openvpn-status.log |awk '{print $4}'| head -1)"
  74. [[ "$tmp1" = "" ]] && tmp1="00:00:00" && tmp2="00:00:00"
  75. var1=`echo $tmp1 | cut -c 1-2`
  76. var2=`echo $tmp1 | cut -c 4-5`
  77. var3=`echo $tmp1 | cut -c 7-8`
  78. var4=`echo $tmp2 | cut -c 1-2`
  79. var5=`echo $tmp2 | cut -c 4-5`
  80. var6=`echo $tmp2 | cut -c 7-8`
  81. calc1=`echo $var1*3600 + $var2*60 + $var3 | bc`
  82. calc2=`echo $var4*3600 + $var5*60 + $var6 | bc`
  83. seg=$(($calc2 - $calc1))
  84. min=$(($seg/60))
  85. seg=$(($seg-$min*60))
  86. hor=$(($min/60))
  87. min=$(($min-$hor*60))
  88. timerusr=`printf "%02d:%02d:%02d \n" $hor $min $seg;`
  89. timerr=$(echo "$timerusr" | sed -e 's/[^0-9:]//ig' )
  90. else
  91. timerr="00:00:00"
  92. fi
  93. if [[ $conex -eq 0 ]]; then
  94. status=$(echo -e "\033[1;31mOffline \033[1;33m ")
  95. echo -ne "\033[1;33m"
  96. printf '%-17s%-14s%-10s%s\n' " $user" "$status" "$conex/$s2ssh" "$timerr"
  97. else
  98. status=$(echo -e "\033[1;32mOnline\033[1;33m ")
  99. echo -ne "\033[1;33m"
  100. printf '%-17s%-14s%-10s%s\n' " $user" "$status" "$conex/$s2ssh" "$timerr"
  101. fi
  102. echo -e "\033[0;37m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m"
  103. done < "$database"
  104. fi
  105. #exit