Эмулятор SSH через телеграмм

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Эмулятор SSH через телеграмм

Сообщение Ichthyander » 15.12.2018 11:55:16

Кому интересно управлять удаленным компьютером (веб-сервер, обычный компьютер с выходом в интернет) через телеграмм, сделал рабочий пример исходного кода программы https://github.com/Al-Muhandis/ShellRemoteBot
Активно тестируется на Linux (Debian), но должно работать и в Windows. Вместо вебхуков используется лонгполлинг для получение апдейтов от телеграмм сервера, соответственно, программа может работать не только на веб-сервере, но и на любом домашнем компьютере.
Удобно для управления веб-сервером через телеграмм в телефоне (конечно можно поискать SSH клиент на телефон, но в если у Вас уже есть телеграмм, то можно использовать этот сервис).
Программа может работать как консольная программа, которая запускается вручную так и как служба/демон
2018-12-15_11-53-06.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Эмулятор SSH через телеграмм

Сообщение ev » 15.12.2018 17:26:39

как осуществляется работа с интерактивными приложениями (например: top, gstat и т.д.)?
есть ли возможность послать ctrl+c и другие комбинации?
можно ли сбросить сессию если подвисла?
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Эмулятор SSH через телеграмм

Сообщение Ichthyander » 15.12.2018 18:44:55

ev вопросы хорошие )
ev писал(а):как осуществляется работа с интерактивными приложениями (например: top, gstat и т.д.)?

Мне тоже сразу захотелось проверить, но чуда не произошло:
#top

TERM environment variable not set.

Скорее всего как-то возможно. По крайней мере, через телеграмм можно править сообщения бота. А вот как через input/output сделать, я не знаю.
ev писал(а):есть ли возможность послать ctrl+c и другие комбинации?

Можно добавить кнопку в телеграмм или команду. Вопрос как это сделать через Process.input я не знаю.
ev писал(а):можно ли сбросить сессию если подвисла?

Насколько я понял TProcess работает асинхронно с потоком, который читает вывод. В любом случае можно добавить еще один поток и открывать новую консоль, закрыв старую. Это пока не проработано.
Возможно буду развивать по мере необходимости и наличии свободного времени. Если есть какие идеи дополнить или улучшить код я обязательно рассмотрю пуллреквесты

Добавлено спустя 42 минуты 45 секунд:
Кстати, по команде top. Сейчас проверил, работает вот такой вариант:
Код: Выделить всё
top -b -n 1
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Эмулятор SSH через телеграмм

Сообщение Ichthyander » 17.12.2018 16:44:58

ev писал(а):есть ли возможность послать ctrl+c и другие комбинации?

Добавлена возможность отправки комбинации Ctrl+C (вернее отправка SIGINT POSIX в системах UNIX) и другие SIG номера:
Код: Выделить всё
  FBot.CommandHandlers['/read']:=@BotReceiveReadCommand;{$IFDEF UNIX}
  FBot.CommandHandlers['/sig']:=@BotReceiveSigCommand;
  FBot.CommandHandlers['/sigint']:=@BotReceiveSIGINTCommand;
  FBot.CommandHandlers['/sigkill']:=@BotReceiveSIGKILLCommand;
  FBot.CommandHandlers['/sigquit']:=@BotReceiveSIGQUITCommand;
  FBot.CommandHandlers['/sigterm']:=@BotReceiveSIGTERMCommand; 

Также добавил команду /read для чтения вновь появившихся сообщений в консоли (без отправки консоли новых строк).
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Эмулятор SSH через телеграмм

Сообщение ev » 17.12.2018 23:06:53

еще заметил зависимость от bash
может сделать просто sh - вроде как гарантированно везде есть ;)
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Эмулятор SSH через телеграмм

Сообщение Ichthyander » 18.12.2018 01:05:11

ev писал(а):еще заметил зависимость от bash

А где? Вроде нет ничего такого

Добавлено спустя 17 минут 2 секунды:
Если про разметку в телеграмм для ответов консоли, то это чистая формальность. Там все равно одинаково подсвечивается, как код. Но да, можно поменять на sh вместо bash.
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Эмулятор SSH через телеграмм

Сообщение ev » 19.12.2018 00:54:59

Ichthyander писал(а):Кстати, по команде top. Сейчас проверил, работает вот такой вариант:

да ктож будет подбирать опции, немного не ту команду ввел и получил подвисон :(
хотя после добавления посылки сигналов ситуация перестает быть фатальной :)

Ichthyander писал(а):Насколько я понял TProcess работает асинхронно с потоком, который читает вывод. В любом случае можно добавить еще один поток и открывать новую консоль, закрыв старую.

а может просто добавить еще команду - посмотреть статус процесса?
тогда будет понятно что процесс висит и надо пробовать его убить

Ichthyander писал(а):А где?

еще упоминание bash в tgshbot.pas нашел (строка 36)

ну и несколько мелких дополнений:
1. если в примере конфига указано Timeout=20, то может и в дефолте при чтении столько же сделать?
2. в доку добавить бы описание usAdmin, usBanned, usSimple
3. в доку добавить бы описание команд
4. еще добавить бы опцию с facility и степенью логирования - тогда можно писать в сислог не париться с правами и путями на файл лога
5. логичнее telegram.ini заменить на tgshd.conf и добавить возможность указания конфига через параметр при запуске
6. логичнее Token перенести в секцию API
7. нет одного из главных параметров - прокси для подключения (socks5, http, mtproto)

не думал в порты freebsd добавить? :wink:
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Эмулятор SSH через телеграмм

Сообщение Ichthyander » 19.12.2018 11:23:32

ev писал(а):да ктож будет подбирать опции, немного не ту команду ввел и получил подвисон :(

Ну интерактивные команды не вызывают в моем коде зависание, они не срабатывают просто. Ввод терминала продолжает работать. А вот с SIG что-то не так. Надо будет мне более плотно потестить это позже.
ev писал(а):а может просто добавить еще команду - посмотреть статус процесса?
тогда будет понятно что процесс висит и надо пробовать его убить

TProcess.Running? Он будет показывать статус Running все равно, пока сам терминал не закрыть (TProcess.Terminate). При попытке чтения сообщения с терминала Running проверяется, но возможно мы говорим о разном. Или что такое подвисание я не понимаю.
ev писал(а):еще упоминание bash в tgshbot.pas нашел (строка 36)

Да, точно, исправил
1. Ok
2. Да, наверное, добавлю, хотя это больше к моей обертке под телеграмм относится
3. Да, добавлю
ev писал(а):4. еще добавить бы опцию с facility и степенью логирования - тогда можно писать в сислог не париться с правами и путями на файл лога

А можно поподробнее? В сислог у меня пишется. Можно включать дополнительно DebugLog - имеется ввиду вывести это в настройки?
5. Да
6. Да
7. Больной вопрос. Реализовал телеграмм библиотеку реализована на встроенном TFPHTTPClient. Но, кажется, выясняется (могу ошибаться) она не работает с HTTPS через прокси. Видимо нужно добавить будет в библиотеку все-таки возможность работы как со встроенным клиентом, так и сторонним типа synapse.
В любом случае, можно сделать проще для обхода блокировок: что-то вроде просто прокси сервера на nginx.
Код: Выделить всё
#user 'sampleuser' virtual host 'telegramapi.sample.com' configuration file
server {
   server_name telegramapi.sample.com www.telegramapi.sample.com;
  ... ... ...
  location / {
      proxy_set_header Host api.telegram.org;
      proxy_pass https://api.telegram.org;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;                     
      client_max_body_size 100M;
   }
  ... ... ...
}
#таким образом Вы можете поднять подобие HTTP прокси, если "вдруг".
#Также можно сделать зеркало и для других поддоменов телеграмм, к примеру core.telegram.org, чтобы читать документацию по API, к примеру, и другие новости

В итоге вместо стандартного endpoint https://api.telegram.org/bot можно будет указать свой личный https://telegramapi.sample.com/bot, nginx позаботится о переадресации
Само собой сервер с nginx, на котором сделан такой прокси, физически должен быть не в РФ (да зарубежом они и дешевле)

Не знаком совсем с этой ОС. А что значит "добавить порты" и что для этого нужно сделать?
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Эмулятор SSH через телеграмм

Сообщение Лекс Айрин » 19.12.2018 15:22:20

Ichthyander писал(а):А что значит "добавить порты" и что для этого нужно сделать?


добавить порт == портировать, написать версию под новую платформу.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Эмулятор SSH через телеграмм

Сообщение ev » 19.12.2018 23:15:56

Ichthyander писал(а):Ну интерактивные команды не вызывают в моем коде зависание, они не срабатывают просто.

что значит не срабатывают?
системный вызов ведь совершается, значит по идее бинарник начинает работать и ждет от пользователя ввода

Ichthyander писал(а):А можно поподробнее? В сислог у меня пишется. Можно включать дополнительно DebugLog - имеется ввиду вывести это в настройки?

да, добавить два параметра например loglevel и logfacility

Ichthyander писал(а):Не знаком совсем с этой ОС. А что значит "добавить порты" и что для этого нужно сделать?

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

Добавлено спустя 18 секунд:
Лекс Айрин писал(а):добавить порт == портировать, написать версию под новую платформу.

не совсем, см. выше ;)
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Эмулятор SSH через телеграмм

Сообщение debi12345 » 20.12.2018 00:20:56

Отличный сольюшэен, консольный ТeamViewer. Желательно также чтобы MC работал через этот эмулятор, в цвете, с функциональными клавишами.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Эмулятор SSH через телеграмм

Сообщение Ichthyander » 20.12.2018 15:41:13

ev писал(а):что значит не срабатывают?
системный вызов ведь совершается, значит по идее бинарник начинает работать и ждет от пользователя ввода

В ответ вызова команды top без ключа -b приходит ответ
Код: Выделить всё
TERM environment variable not set.

ev писал(а):да, добавить два параметра например loglevel и logfacility

Подумаю над этим
ev писал(а):оформить мейкфайл и мета информацию для корректной и автоматической компиляции в пакет
ну и поместить в официальный репозиторий :)
есть даже хендбук

Я для Linux-то никогда не делал deb пакеты, пока обхожусь простым бинарником ) Короче, не по силам мне это пока, разве если кто-то присоединится и поможет. Про официальный репозитарий вообще промолчу )
debi12345 писал(а):Отличный сольюшэен, консольный ТeamViewer. Желательно также чтобы MC работал через этот эмулятор, в цвете, с функциональными клавишами.

В планах добавить работать с файлами (загрузка и скачивание любого файла через телеграмм) [сразу в текущую папку например]
А MC это интерактивная команда? Тогда скорее всего нет, по крайней мере на данном этапе я даже не представляю возможно ли это. Форматирование цветом пока не доступно в телеграмм.
Через несколько дней доберусь до дома, дополню доку командами и может еще кое-что допилю, если настроение будет )

Добавлено спустя 40 секунд:
А пока буду тестить этот бот в управлении сервером чрез телеграмм ))
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Эмулятор SSH через телеграмм

Сообщение Ichthyander » 26.12.2018 15:05:17

Обновил документацию https://github.com/Al-Muhandis/ShellRem ... /README.md Кое-что подправил по советам выше
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Эмулятор SSH через телеграмм

Сообщение Ichthyander » 15.02.2020 18:03:13

Добавил поддержку HTTP прокси ;)

Если Вы хотите добавить поддержку HTTP прокси, то:
+ добавьте laz_synapse.lpk в зависимости проекта,
+ добавьте брокер tgsynapsehttpclientbroker (см. в исходника репозитария) в блок uses,
+ задайте данные прокси в настройках сервиса.

Нативный FPHTTPClient пока не имеет полноценной поддержки HTTPS прокси, поэтому будет работать только синапс. Есть ньюанс в случае синапс, чтобы работал HTTPs прокси в Линукс в 40.1 закомментируйте строчку в исходниках данной библиотеки
https://forum.lazarus.freepascal.org/in ... #msg349074
I found (thanks @ashumkin) the feature that I want to share with others if they encounter it
Synapse can works with proxy+HTTPS in Linux if change the code in the synapse library...
You must to comment or delete the line Port:= IntToStr(ResolvePort(Port)); in blcksock.pas
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Эмулятор SSH через телеграмм

Сообщение Ichthyander » 17.05.2020 13:36:38

Новые коммиты (https://github.com/Al-Muhandis/ShellRem ... les-macros) в коде. Теперь Вы можете сохранять частые используемые Shell скрипты для запуска по кнопке в вашем телеграм боте-эмуляторе SSH. Конкретно - создается файл в папке программе (или в папке, заданной в настройках) с расширением .script. Вызываете меню скриптов (то есть все файлы с расширением .script) по команде /scripts и запускаете нужный скрипт по кнопке
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

След.

Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru