Telegram bot для Linux сервера: мониторинг, уведомления, управление

В этой статье мы рассмотрим пример использования Telegram бота на сервере с Linux CentOS, покажем, как настроить простые уведомления в чат-бот для мониторинга вашего сервера, а также несколько управляющих команд.

В эпоху мобильных гаджетов, стало актуально использование различных мессенджеров не только для общения с реальными людьми, но и использование различных ботов. Например, в Telegram существует широкий функционал для бота, который можно использовать в различных целях — выдать информацию о заказе клиенту, информация по посылке у почтового оператора и, например, мониторинг собственного сервера.

Создание чат-бота в Telegram

Для создания чат-бота в Telegram используется бот @BotFather . Чтобы создать своего бота, нужно найти @BotFather у себя в Telegram и перейти в чат с ним:

BotFather создать нового бота telegram

Нажмите START . Чтобы создать нового бота, выберете в меню /newbot , введите имя бота в формате “имя_bot». После создания бота, вы получите API токен бота, который нужен будет в дальнейшей настройке.

получить API токен бота телеграм Теперь нужно узнать user_id — это ID часа с ботом, в который он будет отправлять уведомления. Перейдите в ваш с ним чат и нажмите старт и отправить любой символ. После этого в браузере перейдите по адресу:

https://api.telegram.org/bot<token>/getUpdates — где <token> это API который выдал BotFather.

user_id бота telegram На скриншоте выделен ваш ID.

Итак, мы создали бота в Telegram и получили авторизационные данные.

Отправка в чат Telegram уведомлений с сервера

С помощью ранее созданного бота и полученных ID можно отсылать с сервера уведомления в Telegram чат, и таким образом получать какие-то интересные нам данные или алерты.

Для отправки сообщения в чат, нужно использовать следующий URL:

https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat_id>&text=<text>
Где:
<token> — это API который выдал @BotFather
<chat_id> — это ID вашего чата с ботом.

Например:

# curl -s -X POST https://api.telegram.org/bot944496485:AAEtGaGCVrQ7d26Rc3r_cqXPIhrKVokh8e4/sendMessage -d chat_id=336116180 -d text="Доброе утро, страна"

отправка сообщений в telegram бот через api и url

Для чего можно использовать такие Telegram уведомления? Например, при создании резервной копии вы можете отправлять уведомления о ее создании или же отправлять ссылку на скачивание копии в чат с ботом. Вы можете отправлять себе в Telegram уведомления с информацией о сбоях в системе. Можно добавить в крон выполнение каких-либо проверок с последующей отправкой в Telegram.

Еще пример использования подобных уведомлений:

# curl -s -X POST https://api.telegram.org/bot944496485:AAEtGaGCVrQ7d26Rc3r_cqXPIhrKVokh8e4/sendMessage -d chat_id=336116180 -d text=" User $(whoami) logged into $(hostname) on $(date) from $(echo $SSH_CLIENT | awk '{ print $1}')" &>/dev/null 2>&1

Добавьте этот код в /etc/profile и будете получать уведомления в Telegram при каждом входе пользователей на сервер:

отправка сообщений в telegram через post и curl

Хочу напомнить, что во всех командах, нужно указывать именно своей token(API) и ID чата.

Управление Linux сервером в чат-боте Telegram

Есть набор скриптов, которые позволяет управлять сервером Linux из Telegram чата, отправляя различные команды в чат с ботом. Для этого нужно установить Python, ряд инструментов и загрузить на сервер скрипты.

# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
# yum install xz -y
# tar -xpJf Python-3.6.0.tar.xz
# cd Python-3.6.0
# yum groupinstall "Development tools" -y
# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel -y
# ./configure
# make
# make install

установка Python 3 в centos 7

Создайте симлинк для Python:

# ln -s /usr/local/bin/python3 /usr/bin/python3

И установите ПО для самого бота:

# pip3 install python-telegram-bot --upgrade

pip3 install python-telegram-bot

Теперь скачайте и распакуйте к себе на сервер в каталог root/admin три файла из архива telegram_bot.zip :

  • bot.sh
  • config.py
  • bot.py

Рассмотрим файл config.py . В нем нам нужно указать token(API) и ID вашего чата с ботом, а также путь до директорий с бэкапами и директории, размер которой вы будете в дальнейшем проверять:

config.py настройки telegram бота

Файл bot.sh не требует настройки, в нем лишь указываем путь до bot.py :

bot.sh

И самый основной файл, который собственно и позволит нам управлять сервером, это bot.py . В нем описаны функции, которые будут доступны в чате с ботом и собственно туда, мы можем добавлять свой собственный функционал. Например, в первом блоке описываются доступные команды бота в чате:

python скрипт для telegram бота

Тут описываются все функции, которые будут доступны, после ввода команды /help .

Ниже описывается сама функция, например,

#функция команады ifconfig_x000D_def ifconfig(bot, update):_x000D_reload(config)_x000D_user = str(update.message.from_user.id)_x000D_if user in config.admin: #если пользовательский id в списке admin то команда выполняется_x000D_run_command("ifconfig")_x000D_bot.sendMessage(chat_id=update.message.chat_id, text=textoutput)

И эту функцию, нужно описать как команду:

ifconfig_handler = CommandHandler('ifconfig', ifconfig)_x000D_dispatcher.add_handler(ifconfig_handler)

То есть как видим, это выполнение стандартной функции проверки сетевых настроек ifconfig.

При знакомстве с ботом я попытался добавить собственную команду, например для проверки Apache:

# service httpd status

Но только через настройку данного файла это не сработало. Как я понял, здесь можно выполнить только команду описанную одним словом или символами. Я решил проблему создав файл apache_status.sh с содержимым:

#!/bin/bash
service httpd status

И создал на него симлинк:

# ln -s /root/admin/apache_status.sh /usr/local/sbin/apachestatus

Теперь при вызове команды apachestatus , у меня выводит статус веб-сервера apache :

apachestatus

В файле bot.py я заполнил все три блока, согласно других функций. Чтобы bot заработал, нужно запустить файл bot.sh . Для удобства, создадим отдельный сервис для Telegram бота. Создаем нужный файл и выставляем права:

# touch /etc/systemd/system/telegram-bot.service
# chmod 664 /etc/systemd/system/telegram-bot.service

После чего заходим в файл сервиса:

# nano /etc/systemd/system/telegram-bot.service

И добавляем содержимое:

[Unit]_x000D_Description=Telegram bot_x000D_After=network.target_x000D_[Service]_x000D_ExecStart=/root/admin/bot.sh_x000D_[Install]_x000D_WantedBy=multi-user.target

Теперь добавляем сервис в автозагрузку и запускаем:

# systemctl start telegram-bot.service
# systemctl enable telegram-bot.service
# systemctl status telegram-bot.service

Теперь, если в чате с вашим ботом ввести /help , вы получите список доступных команд.

список доступных команд в telegram боте

Например, в данный момент у меня на сервере остановлен веб-сервер Apache :

команда состояния сервера в telegram боте

Запустим его на сервере и проверим статус через Telegram:

проверка статуса apache из telegram

Еще несколько примеров выполнения команд:

команды для сервера linux в telegram боте

Таким образом, вы можете выполнять мониторинг своего Linux сервера или даже частичное администрирование через Telegram , что поможет сильно сократить время на выполнение типовых действий.

Так же хотел бы заметить, что авторизация сервера с ботом происходит именно по ID и token(API) (любой другой человек, не зная ваших данных, подключиться не сможет).

На момент выпуска статьи, тестовый бот удален.

EnglishRussianUkrainian