Администрирование сервера, вопрос про ssh — пользователи и screen сеcсии, как правильно использовать?

Недавно только стал использовать vds сервера.

Вопрос правильности использования, спустя месяц, я понял, если у меня разные процессы, допустим боты для телеги, то лучше запускать не под root, а для каждого бота создавать своего пользователя, я это сделал.

Далее, после закрытия программы ssh, у меня боты прекращали работать, мне сказали, надо использовать screen, чтобы мои боты продолжали работать, я разобрался, что такое screen, создал разные сессии, для каждого бота своя, под root, но теперь другая проблема, созданные сессии под root, их видит только root и может подключаться к ним, может только он, как правильно сделать?

Создавать screen сессию каждый под своим пользователем? То есть, подключаюсь я к ssh, пользователем и создаю для него свою сессию screen, так?

Но если так делаю, то уже root, не видит список сессий.

Или же можно создать все сессии screen под root, но выдать права на доступ пользователем.

Как правильно создать? В плане безопасности и нормальной работы.
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 3
@Everything_is_bad
не screen тебе нужен, а надо написать service для systemd
Ответ написан
@rPman
Если сделаете следующий шаг в изучнеии, screen умеет создавать по нескольку терминалов, запуская в каждом свое приложение, начните с хелпа ctrl+a, ? (это последовательность нажимается отдельно), например ctrl+a,c - создание нового, ctrl+a, a - переключение на предыдущее, ctrl+a, " - выводит список с возможностью выбора стрелками...

И вообще, зачем тебе в данной ситуации screen мне не ясно, у тебя бот по stdin принимает команды управления? Обычно необходимы возможности - посмотреть логи stdout/stderr и перезапустить, все это решается другими средствами. Логи перегаправляются в файлы, а процессы убиваются kill. Есть штатный механизм служб в операционной системе systemd, где и логи, и перезапуск, и отслеживание ошибки (скрипт 100500 раз быстро перезапускается)... если лень все это настраивать можно запилить свое на базе штатного nohup и bash скрипта (а точнее однострочника) для автоперезапуска приложения:
nohup bash -c "bash_loop_pid=$$;while true;do myscript >myscript.log 2>myscript.err;sleep 1;done" &

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 ключ, команду боту на перезапуск, которая просто вынудит его завершить работу, чтобы не лезть в консоль (консоль это если все повисло и не отвечает).
Ответ написан
@Drno
Сервис для sustemD делаешь.
И запускаешь его как любую службу -
systemctl start mybot.service

Всё будет работать бесконечно

Screen делают для другого. Когда у тебя есть длинный скрипт и может разорваться сессия
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы