Откройте сессию tmux, а затем переключитесь на другого пользователя без запроса пароля.

Вопрос или проблема

Я пытаюсь создать скрипт, который открывает новую сессию 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, вместо того чтобы входить в систему, прикрепляясь и затем отсоединяясь.

Два подхода:

  1. Измените /etc/sudoers, чтобы позволить вашему пользователю выполнять sudo -u minecraft,
    или конкретно sudo -u minecraft /home/minecraft/server/start.sh,
    без пароля.
  2. Выполните sudo -u minecraft sleep 0 в вашем скрипте перед командой tmux
    Это попросит вас ввести ваш пароль. 
    Последующие команды sudo в течение следующих нескольких минут
    не потребуют пароль.

Предполагая, что ssh работает на вашей машине и слушает на интерфейсе localhost, вы можете настроить ssh-ключ и поместить публичную часть этого ключа в файл .ssh/authorized_keys целевого пользователя.

Тогда вы можете:

ssh target_user@localhost 'любая команда, которую вы хотите запустить'

Ответ или решение

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

1. Настройка /etc/sudoers

Первый и, возможно, самый распространенный способ заключается в редактировании файла sudoers, чтобы разрешить вашему пользователю запускать команды от имени пользователя minecraft без запроса пароля. Это можно сделать следующим образом:

  1. Откройте терминал и отредактируйте файл sudoers. Для этого используйте команду:

    sudo visudo

    Это позволит вам редактировать файл в безопасном режиме, предотвращая ошибки.

  2. Добавьте следующую строку в файл sudoers:

    ваш_пользователь ALL=(minecraft) NOPASSWD: /home/minecraft/server/start.sh

    Замените ваш_пользователь на ваше текущее имя пользователя. Это разрешит вашему пользователю запускать скрипт start.sh без запроса пароля.

  3. Используйте 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-ключей для аутентификации без пароля:

  1. Создайте SSH-ключ для вашего пользователя (если его у вас еще нет):

    ssh-keygen -t rsa

    Следуйте подсказкам и просто нажмите Enter, чтобы использовать значения по умолчанию.

  2. Добавьте публичный ключ в файл authorized_keys пользователя minecraft:

    cat ~/.ssh/id_rsa.pub | ssh minecraft@localhost 'cat >> ~/.ssh/authorized_keys'
  3. Запустите команду через 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.

Важно помнить

  1. Безопасность: Будьте осторожны при редактировании sudoers, так как неправильные настройки могут jeopardize безопасность системы. Убедитесь, что у вас есть резервная копия конфигурации.

  2. SSH: Настройка SSH-ключей помогает улучшить безопасность, так как вы избегаете использования паролей, и аутентификация проходит более чисто и быстро.

С помощью одного из предложенных методов вы сможете легко запускать ваш игровой сервер в tmux-сессии, оставаясь при этом в удобной для вас оболочке без лишних запросов на ввод пароля.

Оцените материал
Добавить комментарий

Капча загружается...