droplimiter 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/bin/bash
  2. database="/root/usuarios.db"
  3. echo $$ > /tmp/pids
  4. fun_drop () {
  5. port_dropbear=`ps aux | grep dropbear | awk NR==1 | awk '{print $17;}'`
  6. log=/var/log/auth.log
  7. loginsukses='Password auth succeeded'
  8. clear
  9. pids=`ps ax |grep dropbear |grep " $port_dropbear" |awk -F" " '{print $1}'`
  10. for pid in $pids
  11. do
  12. pidlogs=`grep $pid $log |grep "$loginsukses" |awk -F" " '{print $3}'`
  13. i=0
  14. for pidend in $pidlogs
  15. do
  16. let i=i+1
  17. done
  18. if [ $pidend ];then
  19. login=`grep $pid $log |grep "$pidend" |grep "$loginsukses"`
  20. PID=$pid
  21. user=`echo $login |awk -F" " '{print $10}' | sed -r "s/'/ /g"`
  22. waktu=`echo $login |awk -F" " '{print $2"-"$1,$3}'`
  23. while [ ${#waktu} -lt 13 ]; do
  24. waktu=$waktu" "
  25. done
  26. while [ ${#user} -lt 16 ]; do
  27. user=$user" "
  28. done
  29. while [ ${#PID} -lt 8 ]; do
  30. PID=$PID" "
  31. done
  32. echo "$user $PID $waktu"
  33. fi
  34. done
  35. }
  36. if [ ! -f "$database" ]
  37. then
  38. echo "Arquivo /root/usuarios.db não encontrado"
  39. exit 1
  40. fi
  41. while true
  42. do
  43. clear
  44. echo -e "\E[42;1;37m LIMIT DROPBEAR \E[0m"
  45. echo -e "\E[42;1;37m User Conexao/Limite \E[0m"
  46. while read usline
  47. do
  48. user="$(echo $usline | cut -d' ' -f1)"
  49. s2ssh="$(echo $usline | cut -d' ' -f2)"
  50. s3drop="$(fun_drop | grep "$user" | wc -l)"
  51. if [ -z "$user" ] ; then
  52. echo "" > /dev/null
  53. else
  54. fun_drop | grep "$user" | awk '{print $2}' |cut -d' ' -f2 > /tmp/userpid
  55. sed -n '2 p' /tmp/userpid > /tmp/tmp2
  56. rm /tmp/userpid
  57. tput setaf 3 ; tput bold ; printf ' %-35s%s\n' $user $s3drop/$s2ssh; tput sgr0
  58. if [ "$s3drop" -gt "$s2ssh" ]; then
  59. echo -e "\E[41;1;37m User disconnected for exceeding the limit! \E[0m"
  60. while read line
  61. do
  62. tmp="$(echo $line | cut -d' ' -f1)"
  63. kill $tmp
  64. done < /tmp/tmp2
  65. rm /tmp/tmp2
  66. fi
  67. fi
  68. done < "$database"
  69. sleep 6
  70. done