Script : changer mot de passe
Résolu
koma_666
Messages postés
429
Date d'inscription
Statut
Membre
Dernière intervention
-
koma_666 Messages postés 429 Date d'inscription Statut Membre Dernière intervention -
koma_666 Messages postés 429 Date d'inscription Statut Membre Dernière intervention -
Salut à tous,
je suis en train de faire un script qui permet de changer le mot de passe d'un utilisateur.
Pour expliquer un peu plus précisément, j'ai un fichier users.txt qui contient le login et le mot de passe de l'utilisateur sous cette forme :
1:login_user1:mdp_user1
2:login_user2:mdp_user2
3: etc...
Mon script fonctionne très bien, sauf dans un cas particulier : si deux utilisateurs ont un mot de passe ressemblant (par exemple user1 a comme mot de passe "toto" et que user2 a comme mot de passe "toto2"), le changement de mot de passe s'opère pour les deux utilisateurs et non pour un seul et unique utilisateur. Logique vu que j'utilise la commande "sed" et donc qui recherche tous les mots ayant le critère de recherche et qui les remplacent...
Je ne sais pas comment résoudre ce problème. J'essaye de sélectionner une seule ligne de mon fichier users.txt et appliquer le "sed" uniquement à cette ligne mais je n'y arrive pas...
Auriez-vous une idée pour m'aider svp ? merci par avance.
Voici mon script (le nom d'utilisateur est entré en argument ($1) ) :
motDePasse='cat ./users.txt | grep $1 | cut -d":" -f3' #variable qui permet de récupérer le mot de passe de l'utilisateur mis en argument
echo "entrer votre ancien mot de passe : "
read -s mdp
if [ $mdp == $motDePasse ] #ici, on vérifie si le mot de passe entré est correct
then
echo "entrer votre nouveau mot de passe : "
read -s newmdp
echo "confirmer votre nouveau mot de passe : "
read -s newmdp2
if [ $newmdp == $newmdp2 ] #on vérifie que les 2 mdp sont identiques
then
cat ./users.txt | grep $1 | sed -i "s/$mdp/$newmdp/" ./users.txt
#on affiche le fichier txt, on affiche la ligne correspondant au login, on cherche $mdp et on le remplace par $newmdp
echo "le mot de passe de $1 a été changé"
else
echo -e "\nles mots de passes entrés ne correspondent pas \n "
fi
else
echo "mauvais mot de passe"
fi
je suis en train de faire un script qui permet de changer le mot de passe d'un utilisateur.
Pour expliquer un peu plus précisément, j'ai un fichier users.txt qui contient le login et le mot de passe de l'utilisateur sous cette forme :
1:login_user1:mdp_user1
2:login_user2:mdp_user2
3: etc...
Mon script fonctionne très bien, sauf dans un cas particulier : si deux utilisateurs ont un mot de passe ressemblant (par exemple user1 a comme mot de passe "toto" et que user2 a comme mot de passe "toto2"), le changement de mot de passe s'opère pour les deux utilisateurs et non pour un seul et unique utilisateur. Logique vu que j'utilise la commande "sed" et donc qui recherche tous les mots ayant le critère de recherche et qui les remplacent...
Je ne sais pas comment résoudre ce problème. J'essaye de sélectionner une seule ligne de mon fichier users.txt et appliquer le "sed" uniquement à cette ligne mais je n'y arrive pas...
Auriez-vous une idée pour m'aider svp ? merci par avance.
Voici mon script (le nom d'utilisateur est entré en argument ($1) ) :
motDePasse='cat ./users.txt | grep $1 | cut -d":" -f3' #variable qui permet de récupérer le mot de passe de l'utilisateur mis en argument
echo "entrer votre ancien mot de passe : "
read -s mdp
if [ $mdp == $motDePasse ] #ici, on vérifie si le mot de passe entré est correct
then
echo "entrer votre nouveau mot de passe : "
read -s newmdp
echo "confirmer votre nouveau mot de passe : "
read -s newmdp2
if [ $newmdp == $newmdp2 ] #on vérifie que les 2 mdp sont identiques
then
cat ./users.txt | grep $1 | sed -i "s/$mdp/$newmdp/" ./users.txt
#on affiche le fichier txt, on affiche la ligne correspondant au login, on cherche $mdp et on le remplace par $newmdp
echo "le mot de passe de $1 a été changé"
else
echo -e "\nles mots de passes entrés ne correspondent pas \n "
fi
else
echo "mauvais mot de passe"
fi
A voir également:
- Script : changer mot de passe
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
- Script download - Télécharger - Édition & Programmation
6 réponses
Salut,
Voir en gras.
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
Voir en gras.
lami20j@debian-acer:~$ cat users.txt 0:admin:admin 1:flo:mdp 2:justin:test 3:test::mot_de_passe lami20j@debian-acer:~$ cat suppr.sh #!/bin/bash listeUsers=$(cat ./users.txt | grep ^[0-9] | cut -d":" -f2) #on choppe la liste des utilisateurs => admin flo justin test echo "quel utilisateur souhaitez-vous supprimer ?" read supprUser while [ 0 == $(echo "$listeUsers" | egrep -c "$supprUser") ] #tant que le nom d'un utilisateur n'est pas tapé correctement, on redemande le nom d'un utilisateur do echo "$listeUsers" echo "utilisateur inexistant. entrer un utilisateur" read supprUser done echo "êtes-vous sûr de vouloir supprimer $supprUser ? (y - n)" read YesOrNo if [ $YesOrNo == "y" ] then sed -i "/^[0-9]\+:${supprUser}/d" ./users.txt #PROBLEME ICI : on supprime les lignes qui contiennent la chaine de caractère "nom d'utilisateur que l'on veut supprimer" else echo "vous avez annulé la suppression" fi lami20j@debian-acer:~$ sh suppr.sh quel utilisateur souhaitez-vous supprimer ? azerty admin flo justin test utilisateur inexistant. entrer un utilisateur test êtes-vous sûr de vouloir supprimer test ? (y - n) n vous avez annulé la suppression lami20j@debian-acer:~$ sh suppr.sh quel utilisateur souhaitez-vous supprimer ? test êtes-vous sûr de vouloir supprimer test ? (y - n) y lami20j@debian-acer:~$ cat users.txt 0:admin:admin 1:flo:mdp 2:justin:test
GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
106485010510997108
koma_666
Messages postés
429
Date d'inscription
Statut
Membre
Dernière intervention
34
merci beaucoup
Salut,
Au lieu de :
Nul besoin du cat et du grep ;-(
;-))
Au lieu de :
cat ./users.txt | grep $1 | sed -i "s/$mdp/$newmdp/" ./users.txtChange pour :
sed -i "/$1/ s/$mdp/$newmdp/" ./users.txt
Nul besoin du cat et du grep ;-(
;-))
Rholala, merci, je t'aime !
A l'origine, je n'avais pas mis le cat et le grep. Vu que ca ne marchait pas, je les ai ajouté pour tester.
Tu peux m'expliquer comment ca fonctionne ? le /$1/ en particulier. c'est une sélection ? ca applique uniquement le changement sur l'argument ?
A l'origine, je n'avais pas mis le cat et le grep. Vu que ca ne marchait pas, je les ai ajouté pour tester.
Tu peux m'expliquer comment ca fonctionne ? le /$1/ en particulier. c'est une sélection ? ca applique uniquement le changement sur l'argument ?
ok, merci beaucoup.
Reste dans le coin, mon projet est loin d'être terminé ;)
Reste dans le coin, mon projet est loin d'être terminé ;)
Salut,
je suis en train de faire un script qui permet de changer le mot de passe d'un utilisateur.
Tu parles de mot de passe pour accéder à sa session Linux?
Si oui, alors tes mots de passe dans le fichier sont déjà cryptés?
Si non, alors ça m'étonnerait que ça marche et si c'est le cas alors c'est une grosse faille de sécurité.
je suis en train de faire un script qui permet de changer le mot de passe d'un utilisateur.
Tu parles de mot de passe pour accéder à sa session Linux?
Si oui, alors tes mots de passe dans le fichier sont déjà cryptés?
Si non, alors ça m'étonnerait que ça marche et si c'est le cas alors c'est une grosse faille de sécurité.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
et comment on fait pour que cela fonctionne, on l'ouvre avec quoi ensuite pour pouvoir mettre en oeuvre le nouveau mot de passe?
@zipe31 :
nouveau problème :
mon problème est au niveau de la suppression d'un user :
si on supprime un user, si le nom du user sélectionné et le même qu'une autre information d'un autre user, ca supprime les 2 users concernés. un exemple pour illustrer mes propos :
fichiers users.txt (pour rappel : 0:user:mot_de_passe )
0:admin:admin
1:flo:mdp
2:justin:test
3:test::mot_de_passe
=> si je supprime le user qui s'appelle 'test', ca va me le supprimer comme il faut (ici pas de soucis), par contre, ca va me supprimer également la ligne 2, vu que le mot de passe de 'sojustin' est 'test'.
je te copie mon code (avec explications dedans) :
listeUsers='cat ./users.txt | grep ^[0-9] | cut -d":" -f2'
#on choppe la liste des utilisateurs => admin flo justin test
echo "$listeUsers"
echo "quel utilisateur souhaitez-vous supprimer ?"
read supprUser
while [ 0 == 'echo $listeUsers | egrep -c "\<\$supprUser\>"' ]
#tant que le nom d'un utilisateur n'est pas tapé correctement, on redemande le nom d'un utilisateur
do
echo "$listeUsers"
echo "utilisateur inexistant. entrer un utilisateur"
read supprUser
done
echo "êtes-vous sûr de vouloir supprimer $supprUser ? (y - n)"
read YesOrNo
if [ $YesOrNo == "y" ]
then
sed -i "/$supprUser/d" ./users.txt
#PROBLEME ICI : on supprime les lignes qui contiennent la chaine de caractère "nom d'utilisateur que l'on veut supprimer"
else
echo "vous avez annulé la suppression"
fi
;;
t'as une idée ? faudrait faire un masque avec uniquement le f2 (c'est à dire le nom d'utilisateur), mais je sais pas faire.
nouveau problème :
mon problème est au niveau de la suppression d'un user :
si on supprime un user, si le nom du user sélectionné et le même qu'une autre information d'un autre user, ca supprime les 2 users concernés. un exemple pour illustrer mes propos :
fichiers users.txt (pour rappel : 0:user:mot_de_passe )
0:admin:admin
1:flo:mdp
2:justin:test
3:test::mot_de_passe
=> si je supprime le user qui s'appelle 'test', ca va me le supprimer comme il faut (ici pas de soucis), par contre, ca va me supprimer également la ligne 2, vu que le mot de passe de 'sojustin' est 'test'.
je te copie mon code (avec explications dedans) :
listeUsers='cat ./users.txt | grep ^[0-9] | cut -d":" -f2'
#on choppe la liste des utilisateurs => admin flo justin test
echo "$listeUsers"
echo "quel utilisateur souhaitez-vous supprimer ?"
read supprUser
while [ 0 == 'echo $listeUsers | egrep -c "\<\$supprUser\>"' ]
#tant que le nom d'un utilisateur n'est pas tapé correctement, on redemande le nom d'un utilisateur
do
echo "$listeUsers"
echo "utilisateur inexistant. entrer un utilisateur"
read supprUser
done
echo "êtes-vous sûr de vouloir supprimer $supprUser ? (y - n)"
read YesOrNo
if [ $YesOrNo == "y" ]
then
sed -i "/$supprUser/d" ./users.txt
#PROBLEME ICI : on supprime les lignes qui contiennent la chaine de caractère "nom d'utilisateur que l'on veut supprimer"
else
echo "vous avez annulé la suppression"
fi
;;
t'as une idée ? faudrait faire un masque avec uniquement le f2 (c'est à dire le nom d'utilisateur), mais je sais pas faire.