Как сделать так, чтобы sudo не истекал во время работы скрипта [дубликат]
Иногда мне нужно запускать скрипт часами, в течение которых нужны некоторые команды sudo
. Однако, если я не буду sudo
периодически проверять и повторно вводить пароль, я получаю сообщение об sudo: timed out reading password
ошибке, которое иногда приводит к поломке всего этого. Я не хочу использовать, sudo myscript.sh
поскольку некоторые команды следует запускать без него sudo
.
Я бы хотел, чтобы sudo
кешированный пароль сохранялся для сценария на протяжении всего сценария без изменения остальной части системы ( sudo
сохранение только для этого 1 сценария).
Есть ли способ sudo
продержаться на протяжении всего сценария и только для одного сценария?
Ответы
Возможность: запустить скрипт с sudo myscript.sh
. Внутри скрипта выполняются команды, которые следует запускать без sudo
этого:
sudo -u "$SUDO_USER" foo args
(возможно, с правильной логикой, если весь скрипт когда-либо запускается без sudo
). Пользователь root не нуждается в аутентификации sudoи, как таковой, не должен вводить пароль для выполнения команды от имени другого пользователя .
В зависимости от того, насколько велик сценарий (сколько вам нужно его изменить) и как вы относитесь к выполнению всего этого, sudo
вам может понравиться или не понравиться идея. В вашем текущем подходе по умолчанию используется код без повышенных прав, строки с sudo
явными исключениями. Мой подход переворачивает это с ног на голову. Вам нужно быть более внимательными при создании и тестировании скрипта. Я признаю, что это не лучшая практика; тем не менее, он решает проблему истечения срока действия sudo
.
Лично я бы использовал это решение для продолжительного сценария, который не слишком сложен (простой цикл, несколько команд). Я бы дважды подумал, прежде чем переписывать сложный сценарий.
Другой подход - периодически обновлять кэшированные учетные данные в фоновом режиме. По умолчанию это per tty (см. tty_tickets). Поступайте так:
sudo -v # to enter your password once
while sleep 300; do sudo -v; done & # adjust the interval if needed
myscript.sh
Не забывайте убивать фоновую работу, когда она больше не нужна. Сам скрипт может запустить такую работу; тогда вы, вероятно, захотите, чтобы в сценарии были какие-то ловушки, чтобы автоматически убить задание при завершении сценария.