Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/06/2012, à 20:08

R2D2-Ubuntu

Script d'installation détection de la saisie d'un mot de passe?

Bonjour,
Ma question est peut-être bête. Bref, je me lance. J'ai cherché sur le web et je n'ai pas trouvé, peut-être que ma formulation n'est pas bonne.

Je suis actuellement en train d'écrire une série de scripts bash pour l'installation et la configuration automatique de divers composants à partir d'un serveur.

Cependant, lors du passage d'un composant logiciel à un autre, il se peut qu'il faille les droits administrateurs (ex : les commandes en sudo, ou changement d'utilisateur pour des droits BD).

Je voulais savoir s'il était possible en bash de détecter la demande d'un mot de passe et que le script y insère directement le bon mot de passe stocké au préalable dans une variable.

Concrêtement, la personne qui installe mon logiciel n'y connait rien, elle a juste à rentrer le mot de passe root au début et tout se fait automatiquement.

Merci de votre aide.

Hors ligne

#2 Le 26/06/2012, à 22:15

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

Si le script est prévu pour Ubuntu (ou autre système utilisant sudo), je te recommande la syntaxe suivante au début du code :

if [ ! $UID == 0 ]
then
  echo "Ce script nécessite les droits superutilisateur, veuillez lancer la commande de cette manière :"
  echo "sudo $0 $*"
  exit 1
fi

ou, si tu veux directement relancer le script sans demander son avis à l'utilisateur :

if [ ! $UID == 0 ]
then
  sudo $0 $@
  exit 0
fi
[…]

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 27/06/2012, à 06:42

serged

Re : Script d'installation détection de la saisie d'un mot de passe?

Perso pour les scripts nécessitant sudo, Je mets le(s) sudo dans le script. Si ce n'est pas la première instruction je mets au début :

echo Entrez le mot de passe pour administration :
sudo echo merci
# suite du script

Il demandera une fois le mot de passe au début, et sauf si le script est vraiment long, il ne le demandera plus pour les autres sudo...


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#4 Le 27/06/2012, à 06:51

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

Cela reste un hack qui peut ne pas fonctionner si sudo est configuré pour demander le mot de passe systématiquement ou avec une conservation des privilèges sur une courte durée. De plus si le script doit être utilisé dans un système sans sudo il faudra récrire le script. Avec la méthode que je propose, que le script soit lancé en root ou avec sudo cela fonctionnera (et éventuellement il est possible d'effectuer une vérification de la présence de sudo si le script doit vraiment être portable)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 27/06/2012, à 07:24

R2D2-Ubuntu

Re : Script d'installation détection de la saisie d'un mot de passe?

Merci de ta réponse nesthib. Merci également à toi Serged . Je vais garder la réponse de Nesthib qui me semble la plus appropriée. En effet, il se peut que le script soit portable. Ce ne sont que des procédures d'installation à partir de sources.

Hors ligne

#6 Le 27/06/2012, à 09:57

serged

Re : Script d'installation détection de la saisie d'un mot de passe?

Tous les scripts utilisant sudo sont des scripts de "maintenance" propres à mon système. Donc pas de problème de portabilité...

Exemple de mes scripts sudo :

#!/bin/bash
# chkdsk :
# Force le fskck et redemarre
sudo touch /forcefsck
sudo touch /home/forcefsck
echo -n "On redémarre ?(o/N)"
read rep
case $rep in
 o|O|y|Y) sudo shutdown -r -F now
esac

LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#7 Le 27/06/2012, à 14:27

Totor

Re : Script d'installation détection de la saisie d'un mot de passe?

nesthib a écrit :

...

if [ ! $UID == 0 ]
then
  sudo $0 $@
  exit 0
fi
[…]

...

yikes
voyons thib

$ cat thib.sh
printf "%s\n" $@
printf "%s\n" "$@"
$ bash thib.sh "a b c" d e "f g"
a
b
c
d
e
f
g
a b c
d
e
f g

wink


-- Lucid Lynx --

Hors ligne

#8 Le 27/06/2012, à 15:26

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

oui, bien entendu il fallait lire

"$@"

merci Totor d'avoir corrigé ce malheureux oubli smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#9 Le 29/06/2012, à 17:00

R2D2-Ubuntu

Re : Script d'installation détection de la saisie d'un mot de passe?

nesthib a écrit :

Si le script est prévu pour Ubuntu (ou autre système utilisant sudo), je te recommande la syntaxe suivante au début du code :

if [ ! $UID == 0 ]
then
  echo "Ce script nécessite les droits superutilisateur, veuillez lancer la commande de cette manière :"
  echo "sudo $0 $*"
  exit 1
fi

ou, si tu veux directement relancer le script sans demander son avis à l'utilisateur :

if [ ! $UID == 0 ]
then
  sudo $0 $@
  exit 0
fi
[…]

Donc le bon second script est bien celui-là :

if [ ! $UID == 0 ]
then
  sudo $0 "$@"
  exit 0
fi
[…]

Porrai-tu s'il te plait m'expliquer rapidement comme il fonctionne, notamment le

if [ ! $UID == 0 ]

Je comprend pas bien pourquoi tu utilises cette instruction.

Merci

Hors ligne

#10 Le 29/06/2012, à 17:48

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

La variable UID contient le numéro de l'utilisateur (uid), classiquement celui est 0 pour root et 1000+ pour les utilisateurs normaux.
Ici, on teste si UID n'est pas égal à 0 (« ! » permet d'inverser le résultat du test $UID == 0), soit « l'utilisateur lançant le script n'est pas root ».

Tu pourrais aussi utiliser le retour de la commande whoami


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#11 Le 29/06/2012, à 19:42

R2D2-Ubuntu

Re : Script d'installation détection de la saisie d'un mot de passe?

Impec, merci.
Cependant, j'ai utilisé le script 1. J'ai décelé un problème :
-Tant qu'il n'y a pas la commande sudo dans le script, ta partie de code ne demande pas le mot de passe. Il ne le demande qu'à la suite d'une instruction sudo ce qui est gênant car il y a une partie qui s'installe puis demande de mot de passe puis la première partie avec le sudo qui s'installe.

J'aurai aimé qu'il le demande au début et que ça soit fini pour toute la suite de la batterie de scripts d'installation.

Merci

Dernière modification par R2D2-Ubuntu (Le 29/06/2012, à 19:42)

Hors ligne

#12 Le 29/06/2012, à 20:38

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

Je pense que tu as mal compris l'utilisation de mon code.

Il n'y a aucun sudo à mettre dans le script, excepté celui de mon morceau de code.

Avec mon code, si le script n'est pas lancé en root, il demande le mot de passe et se relance en root.

Essaie ça :

#!/bin/bash
echo "Le script est lancé en tant que $(whoami)"

if [ ! $UID == 0 ]
then
  echo "Le script n'est pas lancé en root, on le relance avec sudo"
  sudo $0 "$@"
  exit 0
fi

echo "Une commande lancée en tant que $(whoami)"

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#13 Le 09/07/2012, à 13:47

ar barzh paour

Re : Script d'installation détection de la saisie d'un mot de passe?

pour avoir voulu utiliser le script 2

#!/bin/bash
echo "Le script est lancé en tant que $(whoami)"
if [ ! $UID == 0 ]
then
  echo "Le script n'est pas lancé en root, on le relance avec sudo"
  sudo $0 "$@"
  exit 0
fi
os-prober ,,, suite du script

j'ai cherché un moment ce script ne fonctionne plus que s'il est exécutable et lancé par ./script  ,  bash ./script  ou  sudo ./script
dans tous les autres cas le script échoue soit sur permission non accordée ou sur sudo commande <script> not found
ai-je un problème dans ma configuration ou est-ce "normal" ?

Dernière modification par ar barzh paour (Le 09/07/2012, à 13:49)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#14 Le 09/07/2012, à 14:36

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

c'est normal, je te recommande de lire cette page sur le PATH


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#15 Le 09/07/2012, à 17:41

ar barzh paour

Re : Script d'installation détection de la saisie d'un mot de passe?

oui j'ai compris
il faut rendre le fichier exécutable
et
lancer la commande par ./script, bash ./script ou sudo ./script ( enfin si on est dans le répertoire du script )
c'est un truc que j'utiliserais dans un de mes scripts
merci nesthib

Dernière modification par ar barzh paour (Le 09/07/2012, à 17:43)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#16 Le 09/07/2012, à 18:18

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

ou, si tu as un répertoire contenant tous tes scripts, il faut ajouter ce dernier au PATH an ajoutant ceci dans ton ~/.bashrc :

PATH="$PATH:/chemin/vers/ton/dossier/de/scripts"

sinon tu peux aussi utiliser ~/bin comme dossier pour tes scripts, il doit être dans le PATH par défaut


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#17 Le 09/07/2012, à 20:57

ar barzh paour

Re : Script d'installation détection de la saisie d'un mot de passe?

je n'ai pas de répertoire ~/bin
création de ce répertoire
relance de session ( effectivement la modification du PATH se fait automatiquement lors de la relance pour ce répertoire)
transfert du script dans ce répertoire ~/bin

#!/bin/bash
echo "Le script est lancé en tant que $(whoami)"
if [ ! $UID == 0 ]
then
  echo "Le script n'est pas lancé en root, on le relance avec sudo"
  sudo $0 "$@"
  exit 0
fi
ls -ails $0

le résultat est OK (si le fichier est exécutable)

xxx@yyy-desktop:~$ rech2
Le script est lancé en tant que xxx
Le script n'est pas lancé en root, on le relance avec sudo
Le script est lancé en tant que root
29043 4 -rwxrwxr-x 1 xxx yyy 195 juil.  9 18:20 /home/xxx/bin/rech2

je verrai à l'usage si le fait de mettre tous les scripts perso dans le même répertoire est un inconvénient ou non, je n'en ai pas des tonnes !
encore merci pour toutes ces précisions
là je suis fatigué , je vais me coucher


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#18 Le 09/07/2012, à 21:07

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

Si tu veux créer plusieurs répertoire avec plusieurs catégorie tu peux faire comme tu veux. Imaginons que tu aies un dossier script avec des sous-dossiers python et bash, tu peux ajouter ces dossiers au PATH ainsi :

PATH="$PATH:$HOME/scripts/python:$HOME/scripts/bash"

(à mettre dans le ~/.bashrc)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#19 Le 16/07/2012, à 22:39

R2D2-Ubuntu

Re : Script d'installation détection de la saisie d'un mot de passe?

Salut nesthib, merci pour tes réponses.

cependant, subsiste un problème :
Ton script ne fonctionne pas chez moi, il ne rentre jamais dans la condition if. J'ai remarqué ça car dans mon terminal, il ne s'affiche pas la ligne avec echo.
J'ai tenté sous mon ubuntu de créer un autre utilisateur qui lui n'est pas administrateur de base.
Lorsque je lance le script, il me ressort bien le nom de l'utilisateur dans le echo avec le whoami et ne rentre pas dans le if. Il me dit qu'il ne peut pas être sudoer -> normal.
Tandis que lorsque je lance le script avec un compte administrateur, il me demande le mot de passe après certaines instructions situées avant.

En fait, il ne relance jamais le script avec un sudo devant.

Merci de m'éclairer.

Hors ligne

#20 Le 17/07/2012, à 00:24

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

s'il ne rentre jamais dans le if c'est que tu es déjà root… peux-tu rajouter les lignes suivantes et donner le résultat ?
juste avant le if :

echo "bonjour $(whoami) vous avez le numéro utilisateur $UID"

et juste avant le fi :

else
  echo "on ne relance pas le script, vous êtes déjà $(whoami)"

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#21 Le 19/07/2012, à 19:48

R2D2-Ubuntu

Re : Script d'installation détection de la saisie d'un mot de passe?

voilà mon script :

#!/bin/sh
echo "bonjour $(whoami) vous avez le numéro utilisateur $UID"
echo "Le script d'installation nécessite les droits super-utilisateur"
if [ ! $UID==0 ]
then
  echo "Pouet"
  sudo $0 "$@"
  exit 0
else
  echo "on ne relance pas le script, vous êtes déjà $(whoami)"
fi

et j'obtiens :

kevin@kevin-VirtualBox:.../Serveur$ sh install.sh
bonjour kevin vous avez le numéro utilisateur 
Le script d'installation nécessite les droits super-utilisateur
on ne relance pas le script, vous êtes déjà kevin

il ne m'affiche pas le numéro UID hmm
Et quand je fais un

echo $UID 

il me donne 1000 et pas 0.

Dernière modification par R2D2-Ubuntu (Le 19/07/2012, à 19:50)

Hors ligne

#22 Le 20/07/2012, à 02:07

nesthib

Re : Script d'installation détection de la saisie d'un mot de passe?

Oh… je vois l'erreur… tu utilises sh et non bash. Je viens de vérifier et il semble que sh ne définisse pas la variable UID. Pour corriger cela, soit tu peux changer sh pour bash, soit tu peux définir UID à la première ligne en ajoutant :

UID=$(id -u)

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#23 Le 21/07/2012, à 16:05

R2D2-Ubuntu

Re : Script d'installation détection de la saisie d'un mot de passe?

Ah... Okay je n'avais pas imaginé qu'il pouvait y avoir une différence entre sh et bash.

Il me semble pourtant que sh est le plus utilisé non?

Merci de ton aide alors. J'ai bloqué un moment dessus je vais bientot tester ça.

Je te tiens au courant.

Hors ligne