Вопрос или проблема
Я пытаюсь создать скрипт, который открывает новую сессию tmux
и затем выполняет команду внутри этой сессии tmux от имени другого пользователя.
Цель этого – создать новую сессию tmux для игрового сервера, которому назначен другой пользователь Unix. Я слышал, что предоставление серверам своих собственных пользователей является хорошей практикой, но я все же хотел бы иметь скрипт в домашнем каталоге моего основного пользователя для удобства. Я хотел бы, чтобы сессия tmux была доступна от моего основного пользователя, но при этом входить в систему как пользователь игрового сервера.
Основная проблема в том, что появляется запрос на ввод пароля, который я не могу обойти, что требует от меня прикрепиться к сессии tmux, ввести пароль, а затем отсоединиться.
Вот что я пробовал:
#!/bin/sh
tmux new -d -s Minecraft sudo -u minecraft /home/minecraft/server/start.sh
Я пробовал каждую комбинацию запуска скрипта с sudo, добавляя su - Minecraft
в скрипт и su Minecraft -c "script"
, и в каждом случае это либо требует от меня прикрепиться к сессии tmux и войти в систему, либо просто не работает, не оставляя открытую сессию tmux.
Я пытаюсь найти решение, которое позволило бы мне ввести свой пароль sudo или пароль другого пользователя, когда я запускаю скрипт, который вызывает tmux, вместо того чтобы входить в систему, прикрепляясь и затем отсоединяясь.
Два подхода:
- Измените
/etc/sudoers
, чтобы позволить вашему пользователю выполнятьsudo -u minecraft
,
или конкретноsudo -u minecraft /home/minecraft/server/start.sh
,
без пароля. - Выполните
sudo -u minecraft sleep 0
в вашем скрипте перед командойtmux
.
Это попросит вас ввести ваш пароль.
Последующие командыsudo
в течение следующих нескольких минут
не потребуют пароль.
Предполагая, что ssh работает на вашей машине и слушает на интерфейсе localhost, вы можете настроить ssh-ключ и поместить публичную часть этого ключа в файл .ssh/authorized_keys
целевого пользователя.
Тогда вы можете:
ssh target_user@localhost 'любая команда, которую вы хотите запустить'
Ответ или решение
Для решения задачи запуска tmux-сессии от имени другого пользователя без запроса пароля, можно использовать несколько подходов. Вот два наиболее распространенных метода, которые могут помочь в этом процессе.
1. Настройка /etc/sudoers
Первый и, возможно, самый распространенный способ заключается в редактировании файла sudoers, чтобы разрешить вашему пользователю запускать команды от имени пользователя minecraft
без запроса пароля. Это можно сделать следующим образом:
-
Откройте терминал и отредактируйте файл sudoers. Для этого используйте команду:
sudo visudo
Это позволит вам редактировать файл в безопасном режиме, предотвращая ошибки.
-
Добавьте следующую строку в файл sudoers:
ваш_пользователь ALL=(minecraft) NOPASSWD: /home/minecraft/server/start.sh
Замените
ваш_пользователь
на ваше текущее имя пользователя. Это разрешит вашему пользователю запускать скриптstart.sh
без запроса пароля. -
Используйте tmux для запуска скрипта:
Теперь вы можете создать скрипт (например,start_server.sh
) с следующим содержимым:#!/bin/sh tmux new -d -s Minecraft "sudo -u minecraft /home/minecraft/server/start.sh"
Убедитесь, что скрипт исполняем:
chmod +x start_server.sh
Теперь при запуске этого скрипта будет открыта tmux-сессия с вашим игровым сервером под пользователем minecraft
без необходимости ввода пароля.
2. Использование SSH
Другой подход, если вы хотите избежать редактирования файла sudoers, заключается в использовании SSH-ключей для аутентификации без пароля:
-
Создайте SSH-ключ для вашего пользователя (если его у вас еще нет):
ssh-keygen -t rsa
Следуйте подсказкам и просто нажмите Enter, чтобы использовать значения по умолчанию.
-
Добавьте публичный ключ в файл
authorized_keys
пользователяminecraft
:cat ~/.ssh/id_rsa.pub | ssh minecraft@localhost 'cat >> ~/.ssh/authorized_keys'
-
Запустите команду через SSH с использованием tmux:
Создайте скриптstart_server.sh
со следующим содержимым:#!/bin/sh tmux new -d -s Minecraft "ssh minecraft@localhost '/home/minecraft/server/start.sh'"
Сделайте его исполняемым:
chmod +x start_server.sh
В результате, когда вы запустите этот скрипт, будет создана новая tmux-сессия без запроса пароля, и игровой сервер будет запущен под пользователем minecraft
.
Важно помнить
-
Безопасность: Будьте осторожны при редактировании sudoers, так как неправильные настройки могут jeopardize безопасность системы. Убедитесь, что у вас есть резервная копия конфигурации.
-
SSH: Настройка SSH-ключей помогает улучшить безопасность, так как вы избегаете использования паролей, и аутентификация проходит более чисто и быстро.
С помощью одного из предложенных методов вы сможете легко запускать ваш игровой сервер в tmux-сессии, оставаясь при этом в удобной для вас оболочке без лишних запросов на ввод пароля.