Давай замутим ченить своё, простое и полезное. В этом посте изобретём шаринг файлов/папок с серверов прямо к себе в Telegram. Будем использовать Bash и API Telegram.

Задача

  1. Нужно создать tar.gz-архив файла/папки на сервере.
  2. Закинуть этот архив себе в Telegram.
  3. Почистить за собой.

Для начала сделаем Telegram-бота, идём в @BotFather и получаем токен вида 11223344:HUYPIZDADJIGURGA. Я назову бота bashdayz_bot.

Подробности всей этой кухни описывать не буду, как ботов делать. Но там всё просто, БотБатя тебе подскажет, приключений на 15 секунд, главное — забрать токен. Если не разберёшься, пиши в комментариях, поможем.

Так, токен есть. Теперь нужно узнать ID своего пользователя в Telegram. Опять идём в бота, но в другого — @RawDataBot, запускаем и смотрим поле: "chat": {"id": 1234567890}.

Всё это понадобится, чтобы перекинуть созданные архивы по API в Telegram. Дальше.

Накидываем прототип скрипта shellshare

#!/bin/bash

chat_id=""
bot_token=""

stamp=$(date +%d%m%Y_%H%M%S)
filename=$1-$stamp.tar.gz

tar -czvf $filename "$@"

curl -F chat_id="${chat_id}" -F parse_mode="HTML" -F document=@"$filename" https://api.telegram.org/bot${bot_token}/sendDocument

rm $filename

В переменную chat_id закидываешь ID, который забрал у RawDataBot. А в переменную bot_token пишешь токен, который забрал у БотБати.

Так, всё готово. Теперь нужно запустить своего бота. Идём в телегу и ищем @bashdayz_bot, которого создали в самом начале поста. Запускаем его. Ну вот и всё, проверяем.

./shellshare /var/log/nginx/
shellshare access.log error.log

Создастся tar.gz-архив с названием одноимённой папки/файла и прилетит тебе в бота @bashdayz_bot — но бот у тебя, естественно, будет с другим именем. После отправки архив зачистится с сервера, чтобы место не занимать.

В скрипте используется нативное API Telegram через curl. А символ “$@” означает, что скрипту можно передавать несколько папок/файлов, то есть массив. Но если в этом скрипте передать массив, то имя архива будет с именем первой папки, пусть тебя это не смущает. Если нужно будет, зафиксишь под свои нужды, мы делаем лишь прототип.

По желанию можешь сменить архиватор, впендюрить шифрование имён и установить пароль. Либо вообще через GPG криптануть.

Можно ещё в curl передать caption, тогда в Telegram тебе придёт архив с подписью, чтобы потом можно было ориентироваться, что это такое.

curl ... -F caption="${caption}" ...

В переменную caption передай текст, который нужен для подписи к архиву.

Но для всякой мелочи и конфигов подойдёт, когда нужно быстро дёрнуть с сервака что-то себе и поделиться в корпоративном чатике.

Ну а если кто-то другой запустит твоего бота, то доступ к файлам не получит, потому что все файлы были отправлены на твой айдишник.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Даже если ты не делаешь бэкапы в Telegram, то знать, как взаимодействовать с API телеги, необходимо. Однажды пригодится, когда начальник поставит задачу, а ты уже имеешь прокачанный скилл и понимание, как это работает.

Тема с ботами интересная и много где применяется, у меня мониторинг на такое завязан, да и куча ещё всего. Банально отправлять сообщения из GitLab при успехе/факапе отработки пайплайна.

Дорабатывай, изучай. Удачи!