Notifications de connexion au serveur (SSH / TERMINAL) bon marché et joyeuses

Salutations à la communauté. Ceci est la première publication, loin d'être un administrateur pro, mais je voulais juste partager une expérience courte et simple qui pourrait être utile pour le même débutant que moi.

Il s'est avéré qu'il était nécessaire de contrôler environ 30 VDS-oks sur Debian, que j'ai «transféré» en toute sécurité vers la supervision (et je suis plus un programmeur qu'un administrateur * nix). Et la première pensée qui m'est venue à l'esprit après les opérations de base de modification et de vérification des accès a été: «Si j'ai raté quelque chose, je veux connaître rapidement les connexions.» Il existe des recettes (y compris sur Habré) pour lier les événements d'autorisation SSH et les notifications par e-mail, que j'ai utilisées comme base, mais je voulais toujours être réactif et informatif. En général, j'ai finalement obtenu ce genre de "système" qui, depuis un mois, fonctionne assez bien et m'informe de tout fait d'autorisation.

  1. À l'aide de manuels sur les télégrammes API, un jeton et un identifiant de chat pour le bot de notification ont été reçus (je ne les distribuerai pas ici, ils sont tous facilement et simplement situés dans la ligne 1-2 du moteur de recherche).
  2. Deux scripts ont été créés, dont le code sera affiché ci-dessous. En principe, vous pouvez tout mettre dans un seul fichier, mais parce que Je voulais de la modularité, puis j'ai mis dans un script séparé la fonction d'envoi de notifications au bot télégramme.
  3. Dans deux fichiers de paramètres, il a ajouté un appel au script pour enregistrer l'événement de connexion au serveur et redémarré le service SSH.

Tout sur tout prend environ 5 à 10 minutes, pas plus. Eh bien, maintenant en fait les détails techniques.

PS. Tout fonctionnait sur Debian9 x64 (si cela importe).

/ sbin / onlogged

#!/bin/sh if [ "$1" = "ssh" ] && [ -z "$TERM" ] ; then MESS="USER USE SSH AUTH [not console]" elif [ "$1" = "bash" ] && [ ! -z "$TERM" ] ; then if [ ! -z "$SUDO_USER" ] && [ "$TERM" = "linux" ] ; then MESS="USER USE SUDO DISPLAY CONSOLE [terminal]" elif [ ! -z "$SUDO_USER" ] && [ ! "$TERM" = "linux" ] ; then MESS="USER USE SUDO SSH CONSOLE [ssh session]" elif [ "$TERM" = "linux" ] ; then MESS="USER USE DISPLAY CONSOLE [terminal]" elif [ ! -z "$SSH_TTY" ] ; then MESS="USER USE SSH CONSOLE [ssh session]" else MESS="USER LOGGED [unknown]" fi fi if [ ! -z "$MESS" ] ; then if [ ! -z "$SSH_TTY" ] ; then M_TTY=" TTY = $SSH_TTY |" fi if [ ! -z "$SUDO_USER" ] ; then M_SUDO=" SUDO = $SUDO_USER |" fi if [ ! -z "$TERM" ] ; then M_TERM=" TERM = $TERM |" fi SEND="$MESS | USER = $USER |$M_TTY$M_SUDO$M_TERM" /sbin/telegram "$SEND" "ALERT" > /dev/null fi 

/ sbin / telegram

 #!/bin/sh if [ $# -gt 0 ] then text="[$2] `cat /etc/hostname` : $1" url="https://api.telegram.org/bot{TOKEN}/sendMessage" curl \ --data-urlencode "chat_id={CHAT_ID}" \ --data-urlencode "text=$text" \ --connect-timeout 10 \ --max-time 10 \ $url > /dev/null 2>&1 else echo "Text is empty" fi 

/ etc / ssh / sshrc

 /sbin/onlogged ssh 

/etc/bash.bashrc

 ...     ... /sbin/onlogged bash 

Peut-être que tout cela est banal et simple, mais quelqu'un sera intéressé ou simplement la base pour créer quelque chose qui lui est propre.

Source: https://habr.com/ru/post/fr441774/


All Articles