Как настроить и использовать SSH, управлять пользователями и создавать сеансы screen на сервере?

Как настроить использование screen на сервере VDS для запуска ботов Telegram? Возникают проблемы с доступом к сессиям под root, которые видны только root и к которым он может подключаться. Как правильно организовать сессии для безопасной работы и эффективного управления ими? Создавать сессии для каждого пользователя? Или все сессии создавать под root и выдать права доступа пользователям?
  • 24 декабря 2023 г. 4:17
Ответы на вопрос 2
Для настройки и использования 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 ключ, команду боту на перезапуск, которая просто вынудит его завершить работу, чтобы не лезть в консоль (консоль это если все повисло и не отвечает).
Похожие вопросы