web-dev-qa-db-fra.com

Pourquoi Sudo a-t-il besoin d'un mot de passe pour la deuxième fois dans un script bash à chaque fois?

J'ai une application Web très petite et je voulais me faciliter la vie en ayant un script de déploiement très simpliste, qui fait ce qui suit:

  1. Extraire les mises à jour de git
  2. Exécuter le compositeur
  3. Changer le propriétaire de tous les fichiers

Le script fonctionne très bien et ressemble à ceci:

#!/bin/bash
echo "Updating repository ...";
Sudo git pull;

echo "Installing composer dependencies from lockfile ...";
composer install;

echo "Changing owner to www-data:www-data ...";
Sudo chown -R www-data:www-data .;

echo "Deployment DONE!";

Cependant, comme vous pouvez le voir, j'ai deux commandes exécutées en tant que Sudo dans ce script. Nommez le git pull et le chown.

Mon problème est le suivant: je suis conscient qu'il existe un délai pour la fréquence à laquelle le système demande mon mot de passe lors de l'exécution de commandes avec Sudo. Le problème est que, même si je suis dans le délai imparti, le script toujours demande le mot de passe sur la commande second Sudo (chown).

Quelqu'un pourrait-il m'éclairer, pourquoi cela pourrait-il être le cas?

2
ArSeN

Je ne sais pas vraiment quelle est la raison, mais il y a une solution:

if [[ $(id -u $(whoami)) != 0 ]]
then
    Sudo bash $( cd $(dirname $0) ; pwd -P )
    # taken from http://stackoverflow.com/a/4774063/2797066
else
    #rest of script
fi
1
enedil

Pourquoi ne lancez-vous pas un script avec Sudo comme ceci:

Sudo bash /path/to/script.sh

script.sh a le contenu suivant sans Sudo:

#!/bin/bash
echo "Updating repository ...";
git pull;

echo "Installing composer dependencies from lockfile ...";
composer install;

echo "Changing owner to www-data:www-data ...";
chown -R www-data:www-data .;

echo "Deployment DONE!"

De cette façon, le script ne vous demandera le mot de passe qu'une seule fois.

1
snoop