Как настроить использование screen на сервере VDS для запуска ботов Telegram? Возникают проблемы с доступом к сессиям под root, которые видны только root и к которым он может подключаться. Как правильно организовать сессии для безопасной работы и эффективного управления ими? Создавать сессии для каждого пользователя? Или все сессии создавать под root и выдать права доступа пользователям?
Для настройки и использования SSH на сервере, вам потребуется выполнить следующие шаги: 1. Установите SSH-сервер на сервере. В большинстве Linux-дистрибутивов это можно сделать с помощью команды: ``` sudo apt-get install openssh-server ``` 2. После установки SSH-сервера, проверьте его статус с помощью команды: ``` sudo systemctl status sshd ``` 3. Если SSH-сервер работает корректно, вы сможете подключиться к нему с удаленного компьютера с помощью SSH-клиента, такого как OpenSSH для Linux или PuTTY для Windows. Для этого выполните команду: ``` ssh username@server_ip_address ``` Замените `username` на аккаунт пользователя на сервере и `server_ip_address` на IP-адрес сервера. 4. Для управления пользователями на сервере, вам понадобится использовать команду `adduser` для создания нового пользователя: ``` sudo adduser username ``` Замените `username` на желаемое имя пользователя. 5. После создания пользователя, вы можете назначить ему права sudo для выполнения привилегированных операций: ``` sudo usermod -aG sudo username ``` Здесь `username` - это имя созданного пользователя. 6. Чтобы создать сеанс screen на сервере, выполните команду (под любым пользователем): ``` screen -S session_name ``` Замените `session_name` на желаемое имя сеанса. 7. Чтобы отключиться от сеанса screen без его завершения, нажмите `Ctrl+A` а затем `Ctrl+D`. Чтобы вернуться к сеансу, выполните команду `screen -r session_name`, где `session_name` - это имя сеанса, который вы хотите восстановить. Что касается запуска ботов Telegram, рекомендуется создавать отдельные сеансы screen для каждого бота и пользователя. Это обеспечит безопасность и эффективное управление сеансами. Если вы создадите сеанс под root и выдасте доступ пользователям, это может создать уязвимости в безопасности системы. Вот пример того, как можно создать сеанс screen для бота Telegram для каждого пользователя: 1. Войдите на сервер под пользователем, для которого вы хотите создать бота Telegram. 2. Создайте новый сеанс screen: ``` screen -S bot_session_name ``` Замените `bot_session_name` на желаемое имя сеанса. 3. Запустите бота Telegram в сеансе. 4. Отключитесь от сеанса screen с помощью комбинации клавиш `Ctrl+A`, затем `Ctrl+D`. 5. Чтобы вернуться к сеансу, выполните команду: ``` screen -r bot_session_name ``` Повторите эти шаги для каждого пользователя и бота Telegram, которые вы хотите запустить на сервере.
Если сделаете следующий шаг в изучнеии, screen умеет создавать по нескольку терминалов, запуская в каждом свое приложение, начните с хелпа ctrl+a, ? (это последовательность нажимается отдельно), например ctrl+a,c - создание нового, ctrl+a, a - переключение на предыдущее, ctrl+a, " - выводит список с возможностью выбора стрелками...
И вообще, зачем тебе в данной ситуации screen мне не ясно, у тебя бот по stdin принимает команды управления? Обычно необходимы возможности - посмотреть логи stdout/stderr и перезапустить, все это решается другими средствами. Логи перегаправляются в файлы, а процессы убиваются kill. Есть штатный механизм служб в операционной системе systemd, где и логи, и перезапуск, и отслеживание ошибки (скрипт 100500 раз быстро перезапускается)... если лень все это настраивать можно запилить свое на базе штатного nohup и bash скрипта (а точнее однострочника) для автоперезапуска приложения:
nohup запускает приложение, которое не будет остановлено по закрытию сессии ssh (больше к ней доступа не будет), символ & в конце заставляет делать это в фоне, кстати он же создаст nohup.out куда будет вывод записан
bash -c это чтобы запустить скрипт while
$$ - вернет pid этого bash скрипта, обслуживающего цикл while (в примере в переменную bash_loop_pid) если понадобится остановить этот бесконечный цикл
while - будет в цикле перезапускать скрипт, с паузой sleep в 1 секунду
myscript >myscript.log 2<myscript.err
- запуск скрипта с перенаправлением сообщений в файлы
В другом окне можно кратковременно запускать:
tail -f myscript.log
и это будет выводить новые строки из файла с ожиданием их
в итоге, таких скриптов у тебя может быть сколько угодно, если в командной строке запуска myscript его как то идентифицировать (если запускается один и тот же скрипт но для обслуживания разных ботов) то ps можно увидеть все запущенные, и слать с помощью kill $pid сигнал принудительного завершения (в данном случае перезапуск)
Обычно для штатного перезапуска скриптов добавляют секретный api ключ, команду боту на перезапуск, которая просто вынудит его завершить работу, чтобы не лезть в консоль (консоль это если все повисло и не отвечает).