script bash : demander à l'utilisateur de saisir mot de passe sans qu'il s'affic he etc.
13 réponses
Francois Lafont
Bonjour à tous,
Avec le petit script ci-dessous, l'utilisateur doit saisir un mot de
passe (qui s'affiche en clair) et celui est ensuite stocké dans une
variable :
#---------------------------
echo -n "Votre mot de passe : "
read
mdp="$REPLY"
#---------------------------
Q1 : certes le mot de passe s'affiche, mais au delà de cet inconvénient,
la saisie qu'a faite l'utilisateur est-elle stockée quelque part dans un
fichier (une fois qu'il a fermé son terminal) ?
Q2 : existe-t-il un moyen (simple si possible ;-)) en bash de faire un
script qui se comporte comme la commande passwd par exemple, dans le
sens où le mot de passe saisi par l'utilisateur ne s'affiche pas, tout
en étant bien sûr enregistré par le script ?
Q2 : existe-t-il un moyen (simple si possible ;-)) en bash de faire un script qui se comporte comme la commande passwd par exemple, dans le sens où le mot de passe saisi par l'utilisateur ne s'affiche pas, tout en étant bien sûr enregistré par le script ?
trap "stty echo" EXIT HUP INT QUIT stty -echo read mdp stty echo trap - EXIT HUP INT QUIT
read -s mdp ne répond pas directement au besoin? -- Cem
YBM <ybmess@nooos.fr.invalid> writes:
Le 20.02.2012 13:07, Francois Lafont a écrit :
Q2 : existe-t-il un moyen (simple si possible ;-)) en bash de faire un
script qui se comporte comme la commande passwd par exemple, dans le
sens où le mot de passe saisi par l'utilisateur ne s'affiche pas, tout
en étant bien sûr enregistré par le script ?
trap "stty echo" EXIT HUP INT QUIT
stty -echo
read mdp
stty echo
trap - EXIT HUP INT QUIT
read -s mdp
ne répond pas directement au besoin?
--
Cem
Q2 : existe-t-il un moyen (simple si possible ;-)) en bash de faire un script qui se comporte comme la commande passwd par exemple, dans le sens où le mot de passe saisi par l'utilisateur ne s'affiche pas, tout en étant bien sûr enregistré par le script ?
trap "stty echo" EXIT HUP INT QUIT stty -echo read mdp stty echo trap - EXIT HUP INT QUIT
read -s mdp ne répond pas directement au besoin? -- Cem
Sergio
Le Wed, 22 Feb 2012 10:09:10 +0100, François Lafont a écrit :
J'aurais dû le voir car c'est bien évidemment écrit dans la page de manuel du bash. Merci pour l'info Cem.
Pas besoin du man (le "man bash" est assez épais...). help read|less
suffit. (et pareil pour les autres commandes intégrées de bash).
-- Serge http://leserged.online.fr/ Mon blog: http://cahierdesergio.free.fr/ Soutenez le libre: http://www.framasoft.org
Le Wed, 22 Feb 2012 10:09:10 +0100, François Lafont a écrit :
J'aurais dû le voir car c'est bien évidemment écrit dans la page de
manuel du bash. Merci pour l'info Cem.
Pas besoin du man (le "man bash" est assez épais...).
help read|less
suffit. (et pareil pour les autres commandes intégrées de bash).
--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Le Wed, 22 Feb 2012 10:09:10 +0100, François Lafont a écrit :
J'aurais dû le voir car c'est bien évidemment écrit dans la page de manuel du bash. Merci pour l'info Cem.
Pas besoin du man (le "man bash" est assez épais...). help read|less
suffit. (et pareil pour les autres commandes intégrées de bash).
-- Serge http://leserged.online.fr/ Mon blog: http://cahierdesergio.free.fr/ Soutenez le libre: http://www.framasoft.org
Cem
Le 22-02-2012, François Lafont a écrit :
En effet, -s semble faire exactement ce que je veux :
#------------------------------------ echo -n "Votre mot de passe : " read -s -r mdp #------------------------------------
Ou plus simplement encore en une seule instruction read -p "Votre mot de passe : " -s -r mdp
Après, par rapport à la solution de YBM, je ne suis pas expert mais il est probable que l'option -s de read ne soit pas quelque chose de très portable (ce qui n'est pas trop grave dans mon cas).
L'option -s n'existe effectivement que dans bash et pas dans sh. Il est donc impératif de débuter le script par #!/bin/bash et non par #!/bin/sh pour que cela fonctionne sur un système dont le shell standard ne serait pas bash. Et cela ne fonctionnera du coup que si bash est installé.
-- Cem
Le 22-02-2012, François Lafont <francois.lafont@nospam.invalid> a écrit :
En effet, -s semble faire exactement ce que je veux :
#------------------------------------
echo -n "Votre mot de passe : "
read -s -r mdp
#------------------------------------
Ou plus simplement encore en une seule instruction
read -p "Votre mot de passe : " -s -r mdp
Après, par rapport à la solution de YBM, je ne suis pas expert mais il
est probable que l'option -s de read ne soit pas quelque chose de très
portable (ce qui n'est pas trop grave dans mon cas).
L'option -s n'existe effectivement que dans bash et pas dans sh.
Il est donc impératif de débuter le script par
#!/bin/bash
et non par
#!/bin/sh
pour que cela fonctionne sur un système dont le shell standard ne serait pas
bash. Et cela ne fonctionnera du coup que si bash est installé.
En effet, -s semble faire exactement ce que je veux :
#------------------------------------ echo -n "Votre mot de passe : " read -s -r mdp #------------------------------------
Ou plus simplement encore en une seule instruction read -p "Votre mot de passe : " -s -r mdp
Après, par rapport à la solution de YBM, je ne suis pas expert mais il est probable que l'option -s de read ne soit pas quelque chose de très portable (ce qui n'est pas trop grave dans mon cas).
L'option -s n'existe effectivement que dans bash et pas dans sh. Il est donc impératif de débuter le script par #!/bin/bash et non par #!/bin/sh pour que cela fonctionne sur un système dont le shell standard ne serait pas bash. Et cela ne fonctionnera du coup que si bash est installé.