Ingrese la contraseña solo una vez para el script de shell

Ingrese la contraseña solo una vez para el script de shell

Creé un script de shell para actualizar y mejorar mis paquetes existentes, todo de una sola vez. El guión es:

#!/bin/bash
sudo apt-get update;
sleep 10;
sudo apt-get upgrade;
sleep 10;
sudo youtube-dl -U;
sleep 10;
sudo shutdown -h now;
exit 0

El problema al que me enfrento es que como mi conexión a Internet no es muy rápida, cuando llega al tercer comando, la sesión de contraseña caduca y tengo que volver a ingresar mi contraseña. Y para eso tengo que estar frente a mi PC todo el tiempo, lo que en realidad anula el propósito del guión.

Entonces mi pregunta es:

¿Existe alguna forma de almacenar la contraseña en una variable y cada vez que sudose ingresa la contraseña desde la variable para no tener que estar cerca de mi computadora todo el tiempo? (o algo similar que haría lo que quiero)

Algo como esto:

#!/bin/bash
printf "Please enter your password: ";
read -s password
sudo apt-get update;
$password
sleep 10;
sudo apt-get upgrade;
$password
sleep 10;
sudo youtube-dl -U;
$password
sleep 10;
sudo shutdown -h now;
$password
exit 0

Respuesta1

Elimine el sudo de los comandos en el script y ejecute el script real como root, por ejemplo.

#!/bin/bash
apt-get update;
sleep 10;
apt-get upgrade;
sleep 10;
youtube-dl -U;
sleep 10;
shutdown -h now;
exit 0

Y ejecutarlo consudo ./my-script.sh

Respuesta2

Esto le permitirá ingresar la contraseña una vez. Para los apt-getcomandos, lo siguiente tiene el -yindicador configurado "Sí automático a las indicaciones" para todo excepto dist-upgrade.

sudo bash -c "apt-get -y update && apt-get dist-upgrade && youtube-dl -U && apt-get -y autoremove && apt-get -y autoclean && shutdown -h now"

información relacionada