J'essaie de faire fonctionner le script suivant pour la commande ufw
qui attend de moi que j'appuie sur y ou n pour confirmer ma commande. De plus, je souhaite transmettre mon mot de passe à la commande Sudo
(je sais, mauvaise idée).
echo 'y' | { echo 'my password'; } | Sudo ufw reset
Le bit de mot de passe Sudo
fonctionne, mais le message d'erreur suivant de la commande ufw reset
s'affiche:
Resetting all rules to installed defaults. Proceed with operation (y|n)? Aborted
La commande est annulée plutôt que d'accepter le "y" que j'essayais de l'envoyer. Quelqu'un peut-il me dire ce que je fais mal?
Vous dirigez le y
vers echo 'my password'
, pas vers Sudo
.
Utilisez le bloc pour regrouper les deux échos:
{ echo 'my password' ; echo y ; } | Sudo ufw reset
Sudo
lit normalement le mot de passe depuis un terminal, pas stdin, à moins que vous ne fournissiez l’option -S
.
Vous pouvez y arriver comme ça:
printf '%s\n%s\n' 'your_password' 'y' | Sudo -S ufw reset
ou avec su -c
:
printf '%s\n' 'your_password' | Sudo -S su -c "{ yes | ufw reset; }"
yes
au lieu de echo y
.printf
au lieu de echo
pour les chaînes inconnues. -> voir ceci .Note: C'est vraiment une mauvaise idée. Mieux vaut ajouter
ufw
à la liste NOPASSWD dans le fichiersudoers
. Voir ici . Ou si vous voulez exécuter cette commande plusieurs fois/automatiquement, vous pouvez plutôt l'ajouter en tant que root cronjob .