Эмулятор SSH через телеграмм
Модератор: Модераторы
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Эмулятор SSH через телеграмм
Кому интересно управлять удаленным компьютером (веб-сервер, обычный компьютер с выходом в интернет) через телеграмм, сделал рабочий пример исходного кода программы https://github.com/Al-Muhandis/ShellRemoteBot
Активно тестируется на Linux (Debian), но должно работать и в Windows. Вместо вебхуков используется лонгполлинг для получение апдейтов от телеграмм сервера, соответственно, программа может работать не только на веб-сервере, но и на любом домашнем компьютере.
Удобно для управления веб-сервером через телеграмм в телефоне (конечно можно поискать SSH клиент на телефон, но в если у Вас уже есть телеграмм, то можно использовать этот сервис).
Программа может работать как консольная программа, которая запускается вручную так и как служба/демон
Активно тестируется на Linux (Debian), но должно работать и в Windows. Вместо вебхуков используется лонгполлинг для получение апдейтов от телеграмм сервера, соответственно, программа может работать не только на веб-сервере, но и на любом домашнем компьютере.
Удобно для управления веб-сервером через телеграмм в телефоне (конечно можно поискать SSH клиент на телефон, но в если у Вас уже есть телеграмм, то можно использовать этот сервис).
Программа может работать как консольная программа, которая запускается вручную так и как служба/демон
У вас нет необходимых прав для просмотра вложений в этом сообщении.
как осуществляется работа с интерактивными приложениями (например: top, gstat и т.д.)?
есть ли возможность послать ctrl+c и другие комбинации?
можно ли сбросить сессию если подвисла?
есть ли возможность послать ctrl+c и другие комбинации?
можно ли сбросить сессию если подвисла?
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
ev вопросы хорошие )
Мне тоже сразу захотелось проверить, но чуда не произошло:
Скорее всего как-то возможно. По крайней мере, через телеграмм можно править сообщения бота. А вот как через input/output сделать, я не знаю.
Можно добавить кнопку в телеграмм или команду. Вопрос как это сделать через Process.input я не знаю.
Насколько я понял TProcess работает асинхронно с потоком, который читает вывод. В любом случае можно добавить еще один поток и открывать новую консоль, закрыв старую. Это пока не проработано.
Возможно буду развивать по мере необходимости и наличии свободного времени. Если есть какие идеи дополнить или улучшить код я обязательно рассмотрю пуллреквесты
Добавлено спустя 42 минуты 45 секунд:
Кстати, по команде top. Сейчас проверил, работает вот такой вариант:
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
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
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 для чтения вновь появившихся сообщений в консоли (без отправки консоли новых строк).
еще заметил зависимость от bash
может сделать просто sh - вроде как гарантированно везде есть
может сделать просто sh - вроде как гарантированно везде есть
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
ev писал(а):еще заметил зависимость от bash
А где? Вроде нет ничего такого
Добавлено спустя 17 минут 2 секунды:
Если про разметку в телеграмм для ответов консоли, то это чистая формальность. Там все равно одинаково подсвечивается, как код. Но да, можно поменять на sh вместо bash.
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 добавить?
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
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, на котором сделан такой прокси, физически должен быть не в РФ (да зарубежом они и дешевле)
Не знаком совсем с этой ОС. А что значит "добавить порты" и что для этого нужно сделать?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Ichthyander писал(а):А что значит "добавить порты" и что для этого нужно сделать?
добавить порт == портировать, написать версию под новую платформу.
Ichthyander писал(а):Ну интерактивные команды не вызывают в моем коде зависание, они не срабатывают просто.
что значит не срабатывают?
системный вызов ведь совершается, значит по идее бинарник начинает работать и ждет от пользователя ввода
Ichthyander писал(а):А можно поподробнее? В сислог у меня пишется. Можно включать дополнительно DebugLog - имеется ввиду вывести это в настройки?
да, добавить два параметра например loglevel и logfacility
Ichthyander писал(а):Не знаком совсем с этой ОС. А что значит "добавить порты" и что для этого нужно сделать?
оформить мейкфайл и мета информацию для корректной и автоматической компиляции в пакет
ну и поместить в официальный репозиторий
есть даже хендбук
Добавлено спустя 18 секунд:
Лекс Айрин писал(а):добавить порт == портировать, написать версию под новую платформу.
не совсем, см. выше
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
ev писал(а):что значит не срабатывают?
системный вызов ведь совершается, значит по идее бинарник начинает работать и ждет от пользователя ввода
В ответ вызова команды top без ключа -b приходит ответ
Код: Выделить всё
TERM environment variable not set.ev писал(а):да, добавить два параметра например loglevel и logfacility
Подумаю над этим
ev писал(а):оформить мейкфайл и мета информацию для корректной и автоматической компиляции в пакет
ну и поместить в официальный репозиторий
есть даже хендбук
Я для Linux-то никогда не делал deb пакеты, пока обхожусь простым бинарником ) Короче, не по силам мне это пока, разве если кто-то присоединится и поможет. Про официальный репозитарий вообще промолчу )
debi12345 писал(а):Отличный сольюшэен, консольный ТeamViewer. Желательно также чтобы MC работал через этот эмулятор, в цвете, с функциональными клавишами.
В планах добавить работать с файлами (загрузка и скачивание любого файла через телеграмм) [сразу в текущую папку например]
А MC это интерактивная команда? Тогда скорее всего нет, по крайней мере на данном этапе я даже не представляю возможно ли это. Форматирование цветом пока не доступно в телеграмм.
Через несколько дней доберусь до дома, дополню доку командами и может еще кое-что допилю, если настроение будет )
Добавлено спустя 40 секунд:
А пока буду тестить этот бот в управлении сервером чрез телеграмм ))
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Обновил документацию https://github.com/Al-Muhandis/ShellRem ... /README.md Кое-что подправил по советам выше
- Ichthyander
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Добавил поддержку HTTP прокси 
Если Вы хотите добавить поддержку HTTP прокси, то:
+ добавьте laz_synapse.lpk в зависимости проекта,
+ добавьте брокер tgsynapsehttpclientbroker (см. в исходника репозитария) в блок uses,
+ задайте данные прокси в настройках сервиса.
Нативный FPHTTPClient пока не имеет полноценной поддержки HTTPS прокси, поэтому будет работать только синапс. Есть ньюанс в случае синапс, чтобы работал HTTPs прокси в Линукс в 40.1 закомментируйте строчку в исходниках данной библиотеки
https://forum.lazarus.freepascal.org/in ... #msg349074
Если Вы хотите добавить поддержку 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
- энтузиаст
- Сообщения: 701
- Зарегистрирован: 04.04.2007 08:32:43
- Откуда: Астрахань
- Контактная информация:
Новые коммиты (https://github.com/Al-Muhandis/ShellRem ... les-macros) в коде. Теперь Вы можете сохранять частые используемые Shell скрипты для запуска по кнопке в вашем телеграм боте-эмуляторе SSH. Конкретно - создается файл в папке программе (или в папке, заданной в настройках) с расширением .script. Вызываете меню скриптов (то есть все файлы с расширением .script) по команде /scripts и запускаете нужный скрипт по кнопке
