Уведомления сервера в Telegram

Допустим у нас есть бот в Telegram. Сделаем так, чтобы он присылал именно нам уведомления.

Для начала набросаем вот такой вот небольшой скрипт Python отправки сообщений:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from urllib.parse import urlparse, urlencode
from urllib.request import urlopen
import argparse, sys
token = 'TOKEN_BOT'
id = 'ID_USER'
host = sys.argv[1]
parser = argparse.ArgumentParser()
parser.add_argument('-m', default=host, dest='MESSAGE')
namespace = parser.parse_args()
message = namespace.MESSAGE
turl = 'https://api.telegram.org/bot'
tfull = '{0}{1}/sendMessage'.format(turl, token)
tparams = urlencode({'chat_id': id, 'text': message}).encode('utf-8')
urlopen(tfull, tparams)

Или на bash:

#!/bin/bash
ID_USER="TOKEN_BOT"
TOKEN_BOT="D_USER"
message=$1
curl -s -X POST "https://api.telegram.org/bot"$TOKEN_BOT"/sendMessage" -F chat_id=$ID_USER -F text="$message"

Где:
TOKEN_BOT — токен бота
ID_USER — id Вашего аккаунта.

Создадим вот такой вот скрипт:

#!/bin/bash
command1=$(netstat -tuwnlp | grep "LISTEN")
command2=$(top -bn1 | grep Cpu)
command3=$(ps -eo %C%p%u%c --sort %cpu | tail -n 1)
command4=$(curl ifconfig.io)
command5=$(date)
command6=$(uptime)
command7=$(netstat -anp |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n)
in=$(echo -e "Server status: \n \nOpen PORTS: \n$command1 \n \nConnect ips: \n$command7 \n \nCPU loads: \n$command2 \n \nUptime: \n$command6 \n \nHard procces: \n$command3 \n \nIP-address: \n$command4 \n \nNetdata: \nhttp://$command4:19999 \n \nTime server: \n$command5")
python3 /root/src/send_telegram.py -m "$in"

Скрипт будет отправлять информацию нам через бота, а именно:
1 — список открытых портов
2 — нарузку на CPU
3 — самый «тяжёлый» процесс
4 — IP сервера
5 — Время сервера
6 — Аптайм
7 — количество соедиений с сервером

Так же, /root/src/send_telegram.py — путь к первому скрипту отправки сообщения.

Добавим выполнение скрипта в крон каждые 4 часа:

crontab -e
* */4 * * * /bin/bash /root/src/status_server.sh

Можно такой же логикой проверять сайты\сервера на наличие работы (пинга).
Пример скрипта:

#!/bin/bash
IP='example.com'
ping -c 1 $IP 2>/dev/null 1>/dev/null
if [ "$?" = 0 ]
then
echo ""OK"
else
python3 /root/src/send_telegram.py -m "$IP not available!!!"
fi

Добавляем в cron с интервалом выполения 5 минут:

crontab -e
*/5 * * * * /bin/bash /root/src/ping_status.sh

Еще один пример. Создаём файл rc в папке пользователя в .ssh и добавляем туда следующие строки:

data=$(date "+%Y-%m-%d %H:%M:%S")
ip=$SSH_CONNECTION
user=$USER
enter=$(echo " \n ")
INFO="SSH LOGIN [** $user **] $enter Date: $data $enter IP: $ip $enter User: $user"
python3 /root/src/send_telegram.py -m "$INFO"

И теперь каждый раз, когда мы или кто-то залогинится под данным пользователем — мі будем получать уведомление в телеграм о том что кто-то вошёл в систему по SSH под, его IP и дату.

Так же можно настроить чтобы на сервере автоматически менялся пароль и падал нам в Telegram.
Пример скрипта:

#!/bin/bash
KAY=$( cat /dev/urandom | tr -d -c '0-9a-zA-Z' | fold -w 22 | head -1)
echo -e "$KAY\n$KAY\n" | passwd root
SEND=$(echo -e "\n ")
python3 /root/src/send_telegram.py -m "New password for [root]: $SEND $KAY"

И добавляем выполнение скрипта в cron с интервалом раз в сутки:

crontab -e
0 0 * * * /bin/bash /root/src/pass_edit.sh

Вот и всё. Всем добра 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *