Notificaciones de inicio de sesión en el servidor (SSH / TERMINAL) baratas y alegres

Un saludo a la comunidad. Esta es la primera publicación, lejos de ser un administrador profesional, pero solo quería compartir una experiencia corta y simple que puede ser útil para el mismo novato que yo.

Dio la casualidad de que era necesario controlar unos 30 VDS-oks en Debian, que "transfirí" de forma segura a supervisión (y me parezco más a un programador que a un administrador * nix). Y el primer pensamiento que me vino a la mente después de las operaciones básicas de cambiar y verificar los accesos fue "Si me perdí algo, quiero saber rápidamente sobre las conexiones". Hay recetas (incluso en Habré) para eventos de autorización de SSH vinculantes y notificaciones por correo electrónico, que utilicé como base, pero aún quería ser receptivo e informativo. En general, finalmente obtuve este tipo de "sistema", que durante bastante mes funciona con bastante éxito y me informa de cualquier hecho de autorización.

  1. Mediante el uso de manuales en telegramas API, se recibió un token y una identificación de chat para el bot de notificación (no distribuiré aquí, todo está fácil y simplemente ubicado en la línea 1-2 del motor de búsqueda).
  2. Se crearon dos scripts, cuyo código se publicará a continuación. En principio, puede poner todo en un archivo, pero porque Quería modularidad, luego puse en un script separado la función de enviar notificaciones al bot de telegramas.
  3. En dos archivos de configuración, agregué una llamada al script para registrar el evento de inicio de sesión en el servidor y reinicié el servicio SSH.

Todo sobre todo lleva unos 5-10 minutos, no más. Bueno, ahora en realidad lo técnico.

PS. Todo se estaba ejecutando en Debian9 x64 (si eso importa).

/ 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 

Quizás todo esto sea banal y simple, pero alguien estará interesado o simplemente será la base para crear algo propio.

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


All Articles