Cómo hacer que sudo no expire mientras se ejecuta el script [duplicado]
A veces necesito ejecutar un script durante horas a la vez, durante las cuales algunos comandos necesitan sudo
. Sin embargo, si no verifico y reingreso la sudo
contraseña periódicamente, aparece el sudo: timed out reading password
error que a veces rompe todo. No quiero usar, sudo myscript.sh
ya que algunos de los comandos deberían ejecutarse sin sudo
.
Me gustaría que la sudo
contraseña en caché persista para el script durante toda la duración del script sin cambiar el resto del sistema ( sudo
persistencia solo para este script 1).
¿Hay alguna manera de hacer que sudo
dure toda la duración del guión y solo el 1 guión?
Respuestas
Posibilidad: ejecutar el script con sudo myscript.sh
. Dentro del script, ejecute comandos que deberían ejecutarse sin sudo
esta forma:
sudo -u "$SUDO_USER" foo args
(tal vez con la lógica adecuada en caso de que el script completo se ejecute sin él sudo
) El usuario root no necesita autenticarse sudoy, como tal, no es necesario que introduzca una contraseña para ejecutar un comando como otro usuario .
Dependiendo de qué tan grande sea el script (cuánto necesita cambiarlo) y cómo se sienta acerca de ejecutarlo todo, sudo
puede que le guste o no la idea. En su enfoque actual, el código no elevado es el predeterminado, las líneas con sudo
excepciones explícitas. Mi enfoque cambia esto al revés. Debe tener más cuidado al crear y probar el script. Admito que esta no es la mejor práctica; todavía resuelve el problema de caducar sudo
.
Personalmente, usaría esta solución para un script de larga ejecución que no sea demasiado complicado (bucle simple, pocos comandos). Sin embargo, lo pensaría dos veces antes de reconstruir un guión complicado.
Otro enfoque consiste en actualizar periódicamente las credenciales almacenadas en caché en segundo plano. Por defecto, estos son por tty (ver tty_tickets). Proceda así:
sudo -v # to enter your password once
while sleep 300; do sudo -v; done & # adjust the interval if needed
myscript.sh
No olvide eliminar el trabajo en segundo plano cuando ya no sea necesario. El propio script puede iniciar ese trabajo; entonces probablemente querrá que algunas trampas en el script eliminen el trabajo automáticamente cuando finalice el script.