TGViewer
ServerAdmin.ru ServerAdmin.ru @srv_admin · 32.6K subscribers
Post #5173 11.1K
Я вчера рассказывал про программу, которая позволяет отправлять в Telegram отчёты о выполнении какой-то команды. Сразу возникло желание получить какой-то инструмент и для обратной связи - выполнять на сервере команду, которая вводится в чате в Telegram.

На эту тему очень много решений, как очень простых в виде небольшого python скрипта, так и более развитых проектов на github. Я попробовал и первое, и второе. Расскажу про то, что понравилось больше всего - shell2telegram.

Сразу отмечу, чем понравился:

➕Есть deb и rpm пакеты, а так же присутствует в репозитории snap. Сам по себе это один бинарник на go. В пакет упакован для удобства вместе с man.
➕Есть возможность ограничить набор доступных команд.
➕Для выполнения команд можно настроить авторизацию.
➕Есть встроенная статистика и некоторое управление в боте.

Показываю, как пользоваться:

1️⃣ Скачиваем и устанавливаем пакет:
# wget https://github.com/msoap/shell2telegram/releases/download/v1.10.0/shell2telegram_1.10.0_linux_amd64.deb
# dpkg -i shell2telegram_1.10.0_linux_amd64.deb

2️⃣ Записываем в переменную окружения токен бота:
# export TB_TOKEN=55555555:AAAAAAAAAAAAA

3️⃣ Запускаем с парой доступных команд:
# shell2telegram /topcpu:desc="Top CPU Procs" 'ps -e -o pcpu,pmem,args --sort -pcpu | head -10' \
/topmem:desc="Top MEM Procs" 'ps -e -o pcpu,pmem,args --sort -pmem | head -10'

Команда /topcpu выводит 10 лидеров среди процессов по CPU, /topmem - по памяти.

4️⃣ Идём в бота и проходим авторизацию для запуска команд от root:
/authroot
Идём в консоль сервера, видим там код для авторизации. Вводим его боту:
/authroot ZJНрhiRGB1NLbkLD5VyS
Получил сообщение:
You (Vladimir Zp (@zeroxzed)) authorized as root.

5️⃣  Вводим боту команды и смотрим вывод со списком процессов:
/topcpu
/topmem

С помощью ключей -allow-users= и -root-users= можно сразу перечислить пользователей с доступом к боту, чтобы не нужно было использовать коды:

# shell2telegram -root-users="zeroxzed" \
/topcpu:desc="Top CPU Procs" 'ps -e -o pcpu,pmem,args --sort -pcpu | head -10' \
/topmem:desc="Top MEM Procs" 'ps -e -o pcpu,pmem,args --sort -pmem | head -10'

Можно посмотреть статистику выполнения команд, отправив боту:

/shell2telegram stat

Или погасить его прямо из Telegram:

/shell2telegram exit

Все доступные команды описаны в репозитории или в man.

Можно много всего накостылить с её помощью. Я обернул в systemd, чтобы работала как служба. Для этого создал файл /etc/systemd/system/shell2telegram.service. Закинул туда:

[Unit]
Description=Shell2Telegram bot
After=network.target

[Service]
Type=simple
Environment=TB_TOKEN=55555555:AAAAAAAAAAAAAA
ExecStart=/usr/bin/shell2telegram -root-users="zeroxzed" \
  /topcpu:desc="Top CPU Procs" 'ps -e -o pcpu,pmem,args --sort -pcpu | head -10' \
  /topmem:desc="Top MEM Procs" 'ps -e -o pcpu,pmem,args --sort -pmem | head -10'

Restart=on-failure
RestartSec=5
User=root
WorkingDirectory=/root

[Install]
WantedBy=multi-user.target


И запустил:

# systemctl daemon-reload
# systemctl enable --now shell2telegram.service

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

# iptables -A INPUT -i ens18 -s 192.168.13.5 -p tcp --dport 22 -j ACCEPT

Нам надо обернуть эту команду в Shell2Telegram. Бот принимает аргумент после команды как STDIN в консольную команду. В Iptables STDIN можно передать через простой скрипт-прокладку. Создаём исполняемый скрипт addip.sh:

#!/bin/bash
read ip
iptables -A INPUT -i ens18 -s "$ip" -p tcp --dport 22 -j ACCEPT


Запускаем:

# shell2telegram /addip:desc="Add IP to Iptables" '~/addip.sh'

Выполняем в боте:

/addip 1.2.3.4

Проверяем в консоли:

# iptables -L -v -n | grep 22
 0   0 ACCEPT   tcp -- ens18 *    1.2.3.4       0.0.0.0/0      tcp dpt:22

Так можно много всего придумать. Если у вас есть идеи, для чего это может пригодиться, делитесь.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX

#linux #terminal
  • 👍 116
  • 👎 9
More from @srv_admin
  1. Oct 2, 2026Мне Селектел прислали прикольный светильник, которым я сейчас стал постоянно пользоваться.…
  2. Oct 2, 202620 октября в 12:00 (мск) пройдёт бесплатный вебинар «Мониторинг событий безопасности в MWS…
  3. Oct 2, 2026На днях задачка небольшая была по сохранению команд пользователя в консоли. В ней ничего о…
  4. Oct 1, 2026Делал на днях некоторые покупки компьютерных комплектующих и периферии. От новых цен натур…
  5. Oct 1, 2026Вся правда о безопасности контейнеров 8 октября в 11:00 приходите на стрим «Лаборатории Ка…
  6. Oct 1, 2026В сентябре постоянно то тут, то там гремели новости об ужасных уязвимостях Mikrotik. CVE с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →