Notificações de login do servidor (SSH / TERMINAL) baratas e alegres

Saudações à comunidade. Esta é a primeira publicação, longe de ser um administrador profissional, mas eu só queria compartilhar uma experiência curta e simples que pode ser útil para um novato como eu.

Aconteceu que era necessário controlar cerca de 30 VDS-oks no Debian, que eu "transferi" com segurança para supervisão (e eu sou mais um programador do que um * nix-administrador). E o primeiro pensamento que me veio à mente após as operações básicas de alteração e verificação de acessos foi "Se eu perdi alguma coisa, quero saber rapidamente sobre as conexões". Existem receitas (inclusive no Habré) para vincular eventos de autorização SSH e notificações por email, que eu usei como base, mas eu ainda queria ser responsivo e informativo. Em geral, acabei adquirindo esse tipo de "sistema", que por um mês funciona com bastante sucesso e me informa de qualquer fato de autorização.

  1. Usando manuais em telegramas de API, um token e um ID de bate-papo para o bot de notificação foram recebidos (não distribuirei aqui, tudo é fácil e simplesmente localizado na linha 1-2 do mecanismo de pesquisa).
  2. Dois scripts foram criados, cujo código será publicado abaixo. Em princípio, você pode colocar tudo em um arquivo, mas porque Eu queria modularidade, depois coloquei em um script separado a função de enviar notificações para o bot de telegrama.
  3. Em dois arquivos de configurações, adicionei uma chamada ao script para registrar o evento de login no servidor e reiniciei o serviço SSH.

Tudo leva cerca de 5 a 10 minutos, não mais. Bem, agora na verdade os técnicos.

PS. Tudo estava rodando no Debian9 x64 (se isso 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 

Talvez tudo isso seja banal e simples, mas alguém estará interessado ou apenas a base para criar algo próprio.

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


All Articles