Search
Write a publication
Pull to refresh

Comments 8

'теперь вы будете получать уведомления о удачных и неудачных попытках входа по ssh на ваше сервер'

Ну такое... Не самое оптимальное решение, да еще и телегу нужно ставить, что само по себе избыточно, я сделал все тоже самое, только на email просто одной строчкой в /etc/ssh/sshrc без вышеописанных плясок с бубном и теперь получаю уведомления об удачных входах.

' делается до 500 попыток подключиться ко мне по ssh'

Админу может быть это и полезно знать, в крайне редком случае, но простому пользователю? Зачем мне получать инфо о неудачных входах решительно непонятно, поскольку настроена авторизация по ключу, и кто туда ломится без ключа и пароля абсолютно фиолетово и только будет раздражать постоянными уведомлениями.

Если порт не стандартный и кто-то вроде в него стучится, я лично поставил такое лплвещение, пока никто не стучится

nohup telegram_notification.sh &

госпаде, не надо так делать. юнит к системд написать 5 секунд

Можно так запустить свой скрипт как пользовательскую systemd-службу:

systemd-run --user --unit=telega telegram_ notification.sh

создаст временный (до перезагрузки конфиг) - если нужно чтобы служба была постоянная можно его перенести из пути указанном в выводе команды

systemctl --user show -p FragmentPath telega.service

в директорию: ~/.config/systemd/user/ (будет от пользователя запускаться) или в /etc/systemd/system/ (будет от root'а запускаться или указать директиву User) - правда там нужно еще добавить:

[Install]
WantedBy=multi-user.target

И добавить в автозапуск:

systemctl --user enable --now telega.service

попробуйте лучше mmonit.com/monit, еще в 2018м настроил себе алерты в телегу без всякий башей на коленке

Заменил команду sendmail на свою версию которая шлет все письма в телеграм.

Раньше все сообщения сыпались в локальный почтовый ящик рута. А теперь уходят в телеграм. И можно вручную послать echo "test" | sendmail

#!/usr/bin/env python3
#/usr/sbin/sendmail
#pip install pyTelegramBotAPI

import sys, platform, io, datetime
import telebot


token   = 'ttt'
id      = iii


bot = telebot.TeleBot(token)


if __name__ == "__main__":

    header = '[' + platform.node() + '] ' + str(sys.argv)
    text = sys.stdin.read()

    now = datetime.datetime.now()
    date_time = now.strftime("%d-%m-%Y %H-%M-%S")

    bot.send_message(id, header, disable_notification=True)

    if len(text) > 4096:
        with io.BytesIO() as f:
            f.write(text.encode())
            f.seek(0)
            bot.send_document(id, f, disable_notification=True, caption = f'{date_time}.txt')
    else:
        bot.send_message(id, text, disable_notification=True)

Чуть по другому писал бы код на bash

Вместо:

if echo "$line" | grep "Ban" &> /dev/null; then 
   check_failed_attempts 
fi 

лучше так (короче и без лишних вызовов команд и перенаправлений):

grep -q "Ban" <<< "$line"  &&   check_failed_attempts

Лог авторизации это хорошо, а как же оповещение при аномальной нагрузке? Или отказе сервисов?

Sign up to leave a comment.

Articles