====== Récap accès ssh ====== Un script pour récapituler les connexions ssh réussies #!/usr/bin/awk -f # Ce script est prévu pour s'appliquer sur le auth.log (ou syslog, suivant la conf) et récapituler les accès ssh. # Quand la connexion est close immédiatemment on efface simplement (robots qui lancent des commandes à distance, ici un accès toutes les minutes). # Sinon, on efface les lignes mais on restitue un résumé à la fin. BEGIN { nb=0; only_ssh_by_key=0; # Si on ne veut pas le reste del_short_conn=0; # en fait, supprime les fermetures qui suivent immédiatement l'ouverture } /Accepted p[^ ]+ for/ { var=1; nb++; case[nb]=$7; user[nb]=$9; pidssh[nb]=$5; ip[nb]=$11; debut[nb]=$1 " " $2 " " $3; next; } { if (var==1) { # on oublie toujours la ligne 'session opened for user' qui suit 'Accepted publickey' var++; next; } if (var==2){ # mais ici, on a pas toujours le close sur la ligne qui suit, on vérifie if (pidssh[nb]=$5 && del_short_conn==1) { # OK on efface nos variables et on oublie la ligne delete case[nb] delete user[nb] delete pidssh[nb]; delete ip[nb]; delete debut[nb]; var=0; next; } var=0; } for (i in pidssh) { if (pidssh[i]=$5) { # on est sur le close ssh, on vire la ligne mais on mémorise l'heure delete pidssh[i]; fin[i]=$1 " " $2 " " $3; next; } } # fin des traitements, on affiche si on ne voulait pas que le recap if (only_ssh_by_key == 0) { print $0 } } END { print "Les connexions ssh réussies :"; for (i in ip) { print user[i] "(" ip[i] ") s'est connecté de *" debut[i] "* à *" fin[i] "* (" case[i] ")";} }