#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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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?
...
if [ ! $UID == 0 ] then sudo $0 $@ exit 0 fi […]
...
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
-- 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
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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?
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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
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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde 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