Как сделать так, чтобы срок действия sudo не истекал во время работы скрипта

В верхней части .bashrcпоставить:

unset BASH_ENV

Если .bashrcуже используется для настройки среды, нет необходимости в будущих вызовах bashдля повторной настройки среды.

3
22.12.2020, 07:28
1 ответ

Возможность :запустить скрипт с sudo myscript.sh. Внутри скрипта запускаются команды, которые должны запускаться без sudoтаким образом:

sudo -u "$SUDO_USER" foo args

(возможно, с правильной логикой на случай, если весь скрипт когда-либо будет запущен безsudo). Пользователю root не нужно проходить аутентификацию для sudo, и поэтому не требуется вводить пароль для запуска команды от имени другого пользователя .

В зависимости от того, насколько велик сценарий (, насколько сильно вам нужно его изменить )и как вы относитесь к запуску всего этого с помощью sudo, вам может понравиться или не понравиться эта идея. В вашем текущем подходе не -повышенный код является кодом по умолчанию, строки с sudoявляются явными исключениями. Мой подход переворачивает это с ног на голову. Вы должны быть более осторожными при создании и тестировании скрипта. Я признаю, что это не лучшая практика; тем не менее это решает проблему истечения sudo.

Лично я бы использовал это решение для долго работающего скрипта, который не слишком сложен (простой цикл, несколько команд ). Я бы дважды подумал, прежде чем перестраивать сложный скрипт.


Другой подход заключается в периодическом обновлении кэшированных учетных данных в фоновом режиме. По умолчанию они указаны для терминала (, см. tty_tickets). Действуйте так:

sudo -v                              # to enter your password once
while sleep 300; do sudo -v; done &  # adjust the interval if needed
myscript.sh

Не забудьте закрыть фоновое задание, когда оно больше не нужно. Скрипт сам может запустить такое задание; тогда вы, вероятно, захотите, чтобы некоторые ловушки в сценарии автоматически убивали задание, когда сценарий завершается.

0
18.03.2021, 22:41

Теги

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