Como fazer com que o sudo não expire enquanto o script está em execução [duplicar]
Às vezes, preciso executar um script por horas a fio, durante as quais alguns comandos são necessários sudo
. No entanto, se eu não verificar e reinserir a sudo
senha periodicamente, obtenho o sudo: timed out reading password
erro que às vezes quebra tudo. Não quero usar, sudo myscript.sh
pois alguns dos comandos devem ser executados sem sudo
.
Eu gostaria que a sudo
senha em cache persistisse para o script por toda a duração do script, sem alterar o resto do sistema ( sudo
persistência apenas para este 1 script).
Existe uma maneira de fazer sudo
durar toda a duração do script e apenas 1 script?
Respostas
Possibilidade: execute o script com sudo myscript.sh
. Dentro do script, execute comandos que devem ser executados sem sudo
esta maneira:
sudo -u "$SUDO_USER" foo args
(talvez com a lógica adequada no caso de todo o script ser executado sem isso sudo
). O usuário root não precisa se autenticar sudoe, como tal, não é necessário inserir uma senha para executar um comando como outro usuário .
Dependendo do tamanho do script (o quanto você precisa mudá-lo) e como você se sente sobre rodar a coisa toda com sudo
você pode gostar ou não da ideia. Em sua abordagem atual, o código não elevado é o padrão, as linhas sudo
sendo exceções explícitas. Minha abordagem vira isso de cabeça para baixo. Você precisa ter mais cuidado ao criar e testar o script. Admito que essa não é a melhor prática; ainda resolve o problema de expiração sudo
.
Pessoalmente, eu usaria essa solução para um script de longa execução que não seja muito complicado (loop simples, poucos comandos). Eu pensaria duas vezes antes de reconstruir um script complicado.
Outra abordagem é atualizar periodicamente as credenciais em cache em segundo plano. Por padrão, eles são adequados (consulte tty_tickets). Proceda assim:
sudo -v # to enter your password once
while sleep 300; do sudo -v; done & # adjust the interval if needed
myscript.sh
Não se esqueça de eliminar o trabalho em segundo plano quando não for mais necessário. O próprio script pode iniciar esse trabalho; então provavelmente você desejará algumas armadilhas no script para eliminar o trabalho automaticamente quando o script terminar.