В этой статье мы рассмотрим пример использования Telegram бота на сервере с Linux CentOS, покажем, как настроить простые уведомления в чат-бот для мониторинга вашего сервера, а также несколько управляющих команд.
В эпоху мобильных гаджетов, стало актуально использование различных мессенджеров не только для общения с реальными людьми, но и использование различных ботов. Например, в Telegram существует широкий функционал для бота, который можно использовать в различных целях — выдать информацию о заказе клиенту, информация по посылке у почтового оператора и, например, мониторинг собственного сервера.
Создание чат-бота в Telegram
Для создания чат-бота в Telegram используется бот @BotFather . Чтобы создать своего бота, нужно найти @BotFather у себя в Telegram и перейти в чат с ним:
Нажмите START . Чтобы создать нового бота, выберете в меню /newbot , введите имя бота в формате “имя_bot». После создания бота, вы получите API токен бота, который нужен будет в дальнейшей настройке.
Теперь нужно узнать user_id — это ID часа с ботом, в который он будет отправлять уведомления. Перейдите в ваш с ним чат и нажмите старт и отправить любой символ. После этого в браузере перейдите по адресу:
https://api.telegram.org/bot<token>/getUpdates
— где <token> это API который выдал BotFather.
На скриншоте выделен ваш 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 уведомления? Например, при создании резервной копии вы можете отправлять уведомления о ее создании или же отправлять ссылку на скачивание копии в чат с ботом. Вы можете отправлять себе в 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 при каждом входе пользователей на сервер:
Хочу напомнить, что во всех командах, нужно указывать именно своей 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:
# ln -s /usr/local/bin/python3 /usr/bin/python3
И установите ПО для самого бота:
# pip3 install python-telegram-bot --upgrade
Теперь скачайте и распакуйте к себе на сервер в каталог root/admin три файла из архива telegram_bot.zip :
- bot.sh
- config.py
- bot.py
Рассмотрим файл config.py . В нем нам нужно указать token(API) и ID вашего чата с ботом, а также путь до директорий с бэкапами и директории, размер которой вы будете в дальнейшем проверять:
Файл bot.sh не требует настройки, в нем лишь указываем путь до bot.py :
И самый основной файл, который собственно и позволит нам управлять сервером, это bot.py . В нем описаны функции, которые будут доступны в чате с ботом и собственно туда, мы можем добавлять свой собственный функционал. Например, в первом блоке описываются доступные команды бота в чате:
Тут описываются все функции, которые будут доступны, после ввода команды /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 :
В файле 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 , вы получите список доступных команд.
Например, в данный момент у меня на сервере остановлен веб-сервер Apache :
Запустим его на сервере и проверим статус через Telegram:
Еще несколько примеров выполнения команд:
Таким образом, вы можете выполнять мониторинг своего Linux сервера или даже частичное администрирование через Telegram , что поможет сильно сократить время на выполнение типовых действий.
Так же хотел бы заметить, что авторизация сервера с ботом происходит именно по ID и token(API) (любой другой человек, не зная ваших данных, подключиться не сможет).
На момент выпуска статьи, тестовый бот удален.