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
Лог авторизации это хорошо, а как же оповещение при аномальной нагрузке? Или отказе сервисов?
Bash + Telegram: мониторинг сервера и мгновенные уведомления