Лайфхаки

Маленькие, полезные хитрости

Управление linux сервером через Telegram: как создать бота на python

28.02.2024 в 03:01
Содержание
  1. Управление linux сервером через Telegram: как создать бота на python
  2. Связанные вопросы и ответы
  3. Как создать Telegram-бота на python для доступа к linux серверу
  4. Какие модули python необходимы для написания бота, обеспечивающего доступ к серверу
  5. Какие команды можно использовать для управления linux сервером через Telegram-бота
  6. Какие меры безопасности следует принять при использовании Telegram-бота для доступа к серверу
  7. Как можно настроить уведомления о состоянии сервера через Telegram-бота
  8. Можно ли подключить к боту функции автоматического резервного копирования данных на сервере
  9. Какие преимущества предоставляет использование Telegram-бота для управления сервером по сравнению с другими способами

Управление linux сервером через Telegram: как создать бота на python

Приветствую всех. Из этой статьи вы узнаете как запустить Telegram бота на виртуальном сервере, и настроить службу для его авто запуска и перезапуска.

Телеграм бот

#main.py import telebot bot = telebot.TeleBot("ТОКЕН") @bot.message_handler(func=lambda message: message.text.lower() in ) def send_welcome(message): bot.reply_to(message, "Здравствуйте!") @bot.message_handler(func=lambda message: True) def echo_all(message): bot.reply_to(message, 'Я тебя не понимаю(') bot.infinity_polling()

Виртуальный сервер

Для демонстрации я буду использовать виртуальный сервер от Beget стоимостью 210 рублей в месяц. Вы можете использовать другого хостинг провайдера, или выбрать другую конфигурацию, в зависимости от вашего проекта.

Доступ к linux серверу с помощью Telegram-бота на Python. Как запустить Python Telegram бота на VPS

Подключение к виртуальной машине

После того как вы создали VPS у вас откроется панель управления, где вы можете скопировать IP адрес машины и подключаться к ней по SSH.

Доступ к linux серверу с помощью Telegram-бота на Python. Как запустить Python Telegram бота на VPS

Для этого можно использовать программу PuTTY или клиент OpenSSH, который входит в состав Windows 10. Для подключения по SSH выполните следующую команду:

ssh root@213.139.209.81

И введите пароль который вы указали при создании VPS.

Подготовка сервера

После того как вы подключились к серверу, выполните команды которые обновят списки, и устаревшие пакеты до последней версии.

sudo apt update sudo apt upgrade

Перейдите в каталогhomeи создайте папку для вашего проекта выполнив команды.

cd /home mkdir ramziv_bot cd ramziv_bot

Зайдите панель управления VPS и откройте Файловый менеджер .

Доступ к linux серверу с помощью Telegram-бота на Python. Как запустить Python Telegram бота на VPS

Загрузите файлы вашего проекта на сервер, в моем случаи это только один файлmain.py.

Доступ к linux серверу с помощью Telegram-бота на Python. Как запустить Python Telegram бота на VPS

Установите зависимости вашего проекта, и запустите бота.

Примечание: Ubuntu 20.04 поставляется с установленной Python 3.8 из коробки, если для вашего проекта нужна другая версия, установите ее или используйте другую версию дистрибутива.

pip install pyTelegramBotAPI python3 main.py

Теперь перейдите в Телеграм и протестируйте работу.

Доступ к linux серверу с помощью Telegram-бота на Python. Как запустить Python Telegram бота на VPS

Работает.

Авто запуск и перезапуск телеграм бота

Создайте systemd службу для бота.

sudo nano /lib/systemd/system/ramziv_bot.service

С конфигурацией:

Description=Ramziv - Telegram Bot After=syslog.target After=network.target Type=simple WorkingDirectory=/home/ramziv_bot/ ExecStart=/usr/bin/python3 /home/ramziv_bot/main.py RestartSec=60 Restart=always WantedBy=multi-user.target

Нажмите CTRL+S и CTRL+X что бы сохранить и выйти.

Выполните эти две команды что бы запустить службу.

sudo systemctl enable ramziv_bot sudo systemctl start ramziv_bot

Ваш бот запушен. Перейдите в Телеграм и убедитесь в этом.

Связанные вопросы и ответы:

1. Какой функционал может предоставить Telegram-бот для доступа к linux серверу на python

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

2. Как можно настроить безопасное соединение между Telegram-ботом и linux сервером

Для безопасного соединения между Telegram-ботом и linux сервером можно использовать токены аутентификации, SSL-шифрование и настройку ограничений доступа к серверу.

3. Какие библиотеки на python можно использовать для создания Telegram-бота для доступа к linux серверу

Для создания Telegram-бота на python для доступа к linux серверу можно использовать библиотеки python-telegram-bot, aiogram или telepot.

4. Какие команды могут быть полезны для управления linux сервером через Telegram-бота

Полезные команды для управления linux сервером через Telegram-бота могут включать в себя команды для запуска и остановки сервисов, перезагрузки сервера, мониторинга загрузки системы и логов.

5. Как настроить оповещения об аварийных ситуациях на linux сервере с помощью Telegram-бота

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

6. Как можно расширить функционал Telegram-бота для доступа к linux серверу на python

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

Как создать Telegram-бота на python для доступа к linux серверу

Для начала, обновим репозитории ОС до актуальной версии и установим данные обновления:

apt update

apt upgrade

Для работы Python-бота , на сервер необходимо установить Python . Вводим следующую команду:

apt install python3-pip python-is-python3

Введем следующую команду для проверки версии Python :

python -V

Если у Вас вышло подобное окошко, значит Вы корректно установили Python на VPS сервер . Теперь, для нашего бота необходимо установить библиотеку pytelegrambotapi , для того, чтобы связать запросы с нашего VPS сервера с серверами Telegram :

Теперь можно загрузить сам бот. Для этого используем команду wget :

wget https://raw.githubusercontent.com/Sullik/testbot/main/bot.py

После этого, откроем файл в текстовом редакторе nano :

nano bot.py

Должно появиться подобное окошко.

Далее, необходимо создать своего бота в Telegram. Для этого перейдите в аккаунт @BotFather в Telegram и введите команду:

/newbot

После успешного создания бота, Вам будет предоставлен индивидуальный API ключ. Он выделен на скриншоте выше. Также нам необходимо получить user_id (id пользователя Telegram). Для этого в поисковике Telegram наберите « @getmyid_bot » и напишите следующую команду:

/start

Далее Вам бот предоставит user_id , как на скриншоте ниже.

Необходимо снова открыть файл bot.py на сервере и внести некоторые изменения:

nano bot.py

В поле bot = telebot . TeleBot(" bot_token ") вместо « bot_token » вставляем токен бота , который Вам предоставил Telegram.

В поле user_id = XXXXXXXXX все X-ы заменяем на Ваш user_id .

После этого, необходимо сохранить изменения. Для этого вводим следующие комбинации клавиш :

Ctrl + O — записать изменения

Ctrl + X — выйти из редактора nano.

Для удобства использования бота, создадим системную службу telegrambot .



Какие модули python необходимы для написания бота, обеспечивающего доступ к серверу


На сервере создаем файл bot.py:nano bot.pyИ вставляем в него код:

from subprocess import check_output import telebot import time bot = telebot.TeleBot("XXXXXXXXX:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")#токен бота user_id = 0 #id вашего аккаунта @bot.message_handler(content_types=) def main(message): if (user_id == message.chat.id): #проверяем, что пишет именно владелец comand = message.text #текст сообщения try: #если команда невыполняемая - check_output выдаст exception bot.send_message(message.chat.id, check_output(comand, shell = True)) except: bot.send_message(message.chat.id, "Invalid input") #если команда некорректна if __name__ == '__main__': while True: try:#добавляем try для бесперебойной работы bot.polling(none_stop=True)#запуск бота except: time.sleep(10)#в случае падения

Заменяем в нём токен бота на тот, который выдал, и user_id — на значение id вашего аккаунта. Проверка id юзера нужна для того, чтобы бот предоставлял доступ к вашему серверу только вам. Функцияcheck_output()выполняет переданную команду и возвращает результат.Осталось только запустить бота. Для запуска процессов на сервере я предпочитаю использоватьscreen(sudo apt-get install screen):

screen -dmS ServerBot python3 bot.py

(где «ServerBot» — идентификатор процесса)Процесс автоматически запустится в фоном режиме. Перейдем в диалог с ботом и проверим, что всё работает, как надо:Сongratulations! Бот выполняет присылаемые ему команды. Теперь, чтобы получить доступ к серверу, вам достаточно открыть диалог с ботом.

Какие команды можно использовать для управления linux сервером через Telegram-бота

Я давно собирался написать статью про, чтобы помочь его продвижению в массы. Не то, чтобы он в нём нуждался, но хотелось просто описать свой опыт использования и поделиться восхищением.

Но такого добра, думаю, уже навалом написали, потому это будет полезная статья о том, как использовать Telegram для получения информации с Linux-сервера, а именно:

  • статус Apache;
  • статус MySQL;
  • использование процессора;
  • объём свободной оперативной памяти;
  • использование места на жёстком диске.

Для этого будет использоваться консольный клиент.

Опишу своё рабочее окружение. Есть удалённый Linux-сервер с Ubuntu 14.04.1 LTS , размещённый у хостера. Я подключаюсь к нему по SSH под учётной записьюroot(то есть, домашняя папка:/root).

Подразумевается, что вы знакомы с Linux, потому я не буду писать о том, как скопировать файл, как разрешить скрипт на выполнение и прочем подобном.

Сначала надо запилить библиотеки:

apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev make

Теперь, находясь в/root, получаем из репозитория веткуtest- она самая обновляемая, потому я взял её, хотя понятно, чем это может грозить.

git clone -b test --recursive https://github.com/vysheng/tg.git

Переходим в/root/tg. Там выполняем:

./configure make

Дальше нужно создать каталог с данными и файл конфига:

mkdir /root/.telegram-cli touch /root/.telegram-cli/config

Вот, кстати, то, что я это делаю всё отroot, внесло коррективы в читаемые мной руководства. В основном это воплотилось в использовании опции-U root.

Итак, первый запуск:

bin/telegram-cli -k tg-server.pub -U root

Он запустится, выведет что-то типа:

Telegram-cli version 1.2.0, Copyright ( C ) 2013-2015 Vitaly Valtman Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type ` show_license '. This is free software, and you are welcome to redistribute it under certain conditions; type `show_license' for details. Telegram-cli uses libtgl version 1.2.0 I: config dir =

Тутнадо подождать, пока не появится запрос номера телефона, ввести его, получить SMS и ввести код из него:

Теперь можно посмотреть список контактов на аккаунте:

contact_list

Написать одному из контактов сообщение можно так:

msg vasya_ivanov ololo

Выход из приложения:

safe_quit

Понятно, что для автоматической отправки сообщений такое не подходит, а нам нужна именно она. Создаём скрипт/root/tg_msg_send.sh:

Теперь можно отправлять сообщения так:

./tg_msg_send.sh vasya_ivanov "Hello, madafaqa! :)"

Скрипт сбора информации

Файл/root/status.sh

nginx добавился позднее, так как через какое-то время я установил и его. Потому если у вас nginx отсутствует, то удалите его переменную из этого скрипта.

Так как у нас тут теперь текстовый файлstatus.txt, а не просто строка сообщения, надо написать новый скрипт/root/tg_text_send.sh

/root/tg_status_send.sh

crontab:

crontab -e

Подробно о редактировании таблицы заданий можно прочитать в хорошей статье.

Какие меры безопасности следует принять при использовании Telegram-бота для доступа к серверу

Прелесть этого токена в том, что он служит для идентификации вас, и предоставления к возможностям Bot API. С помощью этого токена бот (Разработчики, администраторы серверов, все кто знает этот токен, далее только бот) можно читать все сообщения, которые отправляют пользователи. Для того что бы запросить у Telegram сообщения, бот имеет два способа связи "Web hook" И "GET/POST запрос".

  1. Web hook. Бот говорит Telegram куда отправлять сообщения. После того Web hook настроен, Telegram каждое сообщение пользователя отправляет на указанную страницу.
  2. GET/POST запрос. Более простой способ узнать, какие сообщения были отправлены. Бот отправляет GET/POST запрос, с вопросом "Что нового?". В ответ на него получает последние сообщения, которые он не увидел.
Пример ответа Telegram на GET запрос

Для обоих способов, что бы написать ответ пользователю бот должен отправить GET/POST запрос на специальную страницу Telegram. После чего Telegram уже отправляет указанному пользователю.

Давайте теперь разберем безопасность на каждом шаге.  

Для использования Web hook Telegram требует наличие SSL сертификата. GET/POST запросы к Telegram так же проходят через HTTPS. Исходя из этого можно сделать простой и очевидный вывод: Telegram сделал все возможное, что бы бот в обязательном порядке общался с ним через защищенный канал связи. 

Однако, не забывайте есть ведь еще сам бот. И вот тут начинается самое интересное.

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

А из этого уже легко сделать вывод, что защищенность отправленных данных прямо пропорциональна защищенности сервера и честности тех, кто ими владеет. Например, если разработчик арендует сервер в Data-центре (А зачастую так и происходит), то сдающая компания имеет полный доступ к данным на нем. То есть в данном случае данные есть не только у бота и его разработчика, но и у компании предлагающие услуги аренды сервера.

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

Как можно настроить уведомления о состоянии сервера через Telegram-бота


Python и django идеально подходят для работы с telegram ботом. Что такое бот? В этом контексте, бот — это интерфейс взаимодействия между вашим приложением и клиентом telegram. Этот интерфейс позволит отправлять сообщения в зависимости от бизнес логики вашего приложения.Я не буду расписывать здесь весь процесс создания и настройки веб приложения на django — врят ли у меня получится сделать это лучше чем у создателей официальной докумментации. Скажу только, что это не должно занять у вас больше десяти минут, если вы уже работали с этим фреймворком.Хочется сказать спасибо Павлу Дурову и его команде — благодаря возможности установки webHook, работать с ботом стало максимально просто и удобно. Все что необходимо это:
  • Создать своего бота при помощи интерфейса BotFather в клиенте телеграм и настроить его, следуя инструкциям папы бота
  • Установить webHook, используя свой token, который папа бот поможет вам получить. Для этого переходим по url: api.telegram.org/bot {{ token }}/setWebhook?url={{ url }} , где token — ваше кольцо аутентификации, а url — это ссылка, запрос на которую обрабатывает контроллер вашего телеграм бота. Отмечу так же, что использоваться может только https протокол, т.е. необходим SSL.
  • Создать контроллер, обрабатывающий url из пункта 2, создать бизнес логику для вашего бота. Привязать контроллер к обработчику url. В часть url необходимо так же добавить свой token чтобы обеспечить другие люди не могли слать запросы на этот адрес.

Можно ли подключить к боту функции автоматического резервного копирования данных на сервере

Меня зовут Вадим Резвов, я начинающий системный администратор.

В мои обязанности входит: мониторинг состояния всех основных сервисов и систем проекта, создание бэкапов, поддержка ключевых компонентов сервера.

В одном из моих текущих проектов возникла задача - создавать регулярные бэкапы БД PostgreSQL за определенные отрезки времени (1, 2, 3 дня, 1 неделя, 1 месяц, 6 месяцев, каждый год - такое расписание я сформировал по запросу заказчика, чтобы была возможность откатиться на короткий, средний или длинный срок), также бэкап включает в себя папку с media и static контентом.

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

В зависимости от того насколько давно возникла ошибка, можно откатиться на 1 день, месяц, год и т.д. - расписание можно поменять вserver-backup-example/src/main.py, в 35-44 строке, все числа указаны в днях:

BACKUPS_TIMETABLE =

Бэкап попадающий в интервал между:

0 и 1, - бэкап за 1 день,
1 и 2, - за 2 день,
2 и 3, - за 3 день,
3 и 7, за 1 неделю,
7 и 30, за 1 месяц, и т.д.

В каждом интервале всегда находится только 1 бэкап попадающий в интервал, другой бэкап либо сдвигается в следующий интервал, либо удаляется.

Бэкапы в интервале после 360 - создаются за каждый год, и не удаляются.

Сообщения об ошибках и успешных бэкапах будут приходить в “Support” Telegram топик, - это сделано для того, чтобы постоянные сообщения о бэкапах не спамили в основной топик.

Какие преимущества предоставляет использование Telegram-бота для управления сервером по сравнению с другими способами


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

from aiogram import Bot, types from aiogram.dispatcher import Dispatcher from aiogram.types import ParseMode from aiogram.contrib.middlewares.logging import LoggingMiddleware from aiogram.utils import executor # Инициализация бота и диспетчера bot = Bot(token="YOUR_BOT_TOKEN") dp = Dispatcher(bot) dp.middleware.setup(LoggingMiddleware()) # Обработка команды /start @dp.message_handler(commands=) async def on_start(message: types.Message): # Сохранение состояния пользователя в базе данных user_id = message.from_user.id await message.answer("Добро пожаловать! Ваше состояние сохранено.") if __name__ == '__main__': from aiogram import executor executor.start_polling(dp, skip_updates=True)

Мы используем библиотеку aiogram для обработки команды/startи сохранения состояния пользователя. Библиотека упрощает управление состоянием и хранением данных пользователя.Важно подчеркнуть, что управление состоянием и хранение данных должны быть реализованы таким образом, чтобы быть масштабируемыми и надежными, особенно в условиях высокой нагрузки.