Управление linux сервером через Telegram: как создать бота на python
- Управление linux сервером через Telegram: как создать бота на python
- Связанные вопросы и ответы
- Как создать Telegram-бота на python для доступа к linux серверу
- Какие модули python необходимы для написания бота, обеспечивающего доступ к серверу
- Какие команды можно использовать для управления linux сервером через Telegram-бота
- Какие меры безопасности следует принять при использовании Telegram-бота для доступа к серверу
- Как можно настроить уведомления о состоянии сервера через Telegram-бота
- Можно ли подключить к боту функции автоматического резервного копирования данных на сервере
- Какие преимущества предоставляет использование 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 рублей в месяц. Вы можете использовать другого хостинг провайдера, или выбрать другую конфигурацию, в зависимости от вашего проекта.
Подключение к виртуальной машине
После того как вы создали VPS у вас откроется панель управления, где вы можете скопировать IP адрес машины и подключаться к ней по SSH.
Для этого можно использовать программу PuTTY или клиент OpenSSH, который входит в состав Windows 10. Для подключения по SSH выполните следующую команду:
ssh root@213.139.209.81
Подготовка сервера
После того как вы подключились к серверу, выполните команды которые обновят списки, и устаревшие пакеты до последней версии.
sudo apt update
sudo apt upgrade
Перейдите в каталогhome
и создайте папку для вашего проекта выполнив команды.
cd /home
mkdir ramziv_bot
cd ramziv_bot
Зайдите панель управления VPS и откройте Файловый менеджер .
Загрузите файлы вашего проекта на сервер, в моем случаи это только один файлmain.py
.
Установите зависимости вашего проекта, и запустите бота.
Примечание: Ubuntu 20.04 поставляется с установленной Python 3.8 из коробки, если для вашего проекта нужна другая версия, установите ее или используйте другую версию дистрибутива.
pip install pyTelegramBotAPI
python3 main.py
Теперь перейдите в Телеграм и протестируйте работу.
Работает.
Авто запуск и перезапуск телеграм бота
Создайте systemd службу для бота.
sudo nano /lib/systemd/system/ramziv_bot.service
Выполните эти две команды что бы запустить службу.
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)#в случае падения
check_output()
выполняет переданную команду и возвращает результат.Осталось только запустить бота. Для запуска процессов на сервере я предпочитаю использоватьscreen
(sudo apt-get install screen
):
screen -dmS ServerBot python3 bot.py
Какие команды можно использовать для управления 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 для управления Linux-сервером, и наконец, я это сделал.
Команды для управления Linux-сервером через Telegram-бот
/start
- запустить приложение/stop
- остановить приложение/restart
- перезапустить приложение/list_contacts
- список контактов на аккаунте/send_message id текст
- отправить сообщение контакту с ID id с текстом текст
Для начала вам нужно запилить библиотеки:
apt-get install libssl-dev libcurl4-openssl-dev
Затем создайте каталог с данными и файл конфига:
mkdir data && touch config.json
Теперь можно запустить приложение:
node app.js
Он запустится и выведет что-то типа:
Telegram Bot started
Теперь можно посмотреть список контактов на аккаунте:
/list_contacts
Напишите одному из контактов сообщение:
/send_message id "Привет, мир!"
Выход из приложения:
/stop
Если у вас есть nginx, то вам нужно добавить переменную в файл конфига:
export NGINX_CONF=/etc/nginx/nginx.conf
Подробно о редактировании таблицы заданий можно прочитать в хорошей статье.
Какие меры безопасности следует принять при использовании Telegram-бота для доступа к серверу
Прелесть этого токена в том, что он служит для идентификации вас, и предоставления к возможностям Bot API. С помощью этого токена бот (Разработчики, администраторы серверов, все кто знает этот токен, далее только бот) можно читать все сообщения, которые отправляют пользователи. Для того что бы запросить у Telegram сообщения, бот имеет два способа связи "Web hook" И "GET/POST запрос".
- Web hook. Бот говорит Telegram куда отправлять сообщения. После того Web hook настроен, Telegram каждое сообщение пользователя отправляет на указанную страницу.
- GET/POST запрос. Более простой способ узнать, какие сообщения были отправлены. Бот отправляет GET/POST запрос, с вопросом "Что нового?". В ответ на него получает последние сообщения, которые он не увидел.
Для обоих способов, что бы написать ответ пользователю бот должен отправить 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)
/start
и сохранения состояния пользователя. Библиотека упрощает управление состоянием и хранением данных пользователя.Важно подчеркнуть, что управление состоянием и хранение данных должны быть реализованы таким образом, чтобы быть масштабируемыми и надежными, особенно в условиях высокой нагрузки.