-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnewSSHusrToTelegram.sh
executable file
·71 lines (68 loc) · 3.31 KB
/
newSSHusrToTelegram.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#! /bin/bash
# Escript para enviar por telegram las nuevas conexiones al servidor junto con su IP
# Me queda:
# 1-Incluir el supuesto de que se desconecte y conecta alguien al mismo tiempo (el numero de conexiones no cambia)
# 2-Se desconecten dos y conecte uno o al reves
##### Hay un problema con la forma en la que se ordenan las nuevas ips
# Direccion al cliente de telegram
telegram=/home/pi/programas/tg/bin/telegram-cli
to=Julen
# Direccion del fichero de control
control=/home/pi/programas/varios/control
# Parece ser que telegram abre nuevas conexiones que aparecen con estado TIME_WAIT al usar netstat, por lo que
# hay que tenerlo en cuenta
# Comprobamos que haya conexiones nuevas cada x segundos
while true
do
# Guardamos la cantidad de conexiones SSH que tenemos abiertas
longi=`w -h | grep "pts/" | wc -l`
# Siempre que haya usuarios conectados
if (($longi > 0))
then
# Primero comprobamos que haya mayor o menor cantidad de conexiones que en el analisis previo
previo=`wc -l $control | awk '{print $1}'`
balance=$((longi - previo))
# Si el balance es mayor que cero habra alguna conexion nueva
if (($balance > 0))
then
# Por cada nueva linea vamos a recabar los datos y enviar un mensaje (por si se conectan 2 al mismo tiempo)
for pos in $(seq $longi)
do
# Parametros del nuevo usuario conectado
# Como las ips no se almacenan en orden hay que hacer un sort sirviendonos de lo que creo q es el puerto
ip=`netstat -nt | grep "ESTABLISHED" | sort -k 5,5 | sed -n ${pos}p | awk '{print $5}'`
puerto=`w -h | grep "pts/" | sed -n ${pos}p | awk '{print $2}'`
user=`w -h | grep "pts/" | sed -n ${pos}p | awk '{print $1}'`
# Comprobamos no haber avisado antes sobre este usuario
coinci=`grep -c "$user $puerto $ip" $control`
if [ "$coinci" -eq "0" ]
then
# Si no hay aviso previo mandamos mensaje y guardamos
(echo "contact_list";sleep 1;echo "msg $to Usuario $user conectado al puerto $puerto con ip $ip"; echo "safe_quit") |$telegram
echo "$user $puerto $ip" >> $control
fi
done
# Si se han perdido usuarios desde la ultima vez
elif (($balance < 0))
then
# Por cada nueva linea vamos a recabar los datos
longifich=`wc -l $control | awk '{print $1}'`
for n in $(seq "$longifich")
do
# Obtenemos la ip del usuario conectado previamente (suponiendo que no habra ips repetidas)
ip=`cat $control | sed -n ${n}p | awk '{print $3}'`
# Buscamos esa IP entre los usuarios conectados
coinci=`netstat -nt | grep -c "$ip"`
# Si no hay coincidencia toca eliminarlo e informar de que se ha salido
if [ "$coinci" -eq "0" ]
then
datos=`cat $control | sed -n ${n}p`
(echo "contact_list";sleep 1;echo "msg $to $datos desconectado"; echo "safe_quit") |$telegram
temporal=`grep -v "$datos" $control`
echo "$temporal" > $control
fi
done
fi
fi
sleep 5
done