J'essaie de changer le mot de passe d'un utilisateur via un script. Je ne peux pas utiliser Sudo car une fonctionnalité oblige l'utilisateur à modifier à nouveau le mot de passe si un autre utilisateur modifie son mot de passe.
AIX s'exécute sur le système.
malheureusement, chpasswd n'est pas disponible.
Je m'attendais à être installé, mais j'ai également des problèmes avec cela.
voici ce que je pensais fonctionnerait
echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
Cependant, une fois que le script est lancé, je suis invité à indiquer please enter user's old password
Ne devraient-ils pas tous être répercutés?
Je suis un débutant avec les scripts Shell et cela a été déconcerté.
Tu peux essayer:
echo "USERNAME:NEWPASSWORD" | chpasswd
UtilisezGNUpasswd
stdin.
De la page man
:
--stdin This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.
NOTE: Seulement pour root user.
Exemple
$ adduser foo
$ echo "NewPass" |passwd foo --stdin
Changing password for user foo.
passwd: all authentication tokens updated successfully.
Sinon, vous pouvez utiliser expect
, ce code simple fera l'affaire:
#!/usr/bin/expect
spawn passwd foo
expect "password:"
send "Xcv15kl\r"
expect "Retype new password:"
send "Xcv15kl\r"
interact
Résultats
$ ./passwd.xp
spawn passwd foo
Changing password for user foo.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
En plus des autres suggestions, vous pouvez également y parvenir avec un HEREDOC .
Dans votre cas immédiat, cela pourrait ressembler à:
$ /usr/bin/passwd root <<EOF
test
test
EOF
Vous avez besoin de echo -e pour que les caractères de nouvelle ligne prennent effet
tu as écrit
echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
tu devrais essayer
echo -e "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
plus que probablement, vous n’avez pas besoin de la partie oldpassword\n de cette commande, vous avez simplement besoin des deux nouveaux mots de passe. N'oubliez pas d'utiliser des guillemets simples autour des points d'exclamation!
echo -e "new"'!'"passwd123\nnew"'!'"passwd123" | passwd user
Tu peux essayer :
echo -e "newpasswd123\nnewpasswd123" | utilisateur passwd
Juste ça
passwd <<EOF
oldpassword
newpassword
newpassword
EOF
Sortie réelle de la machine Ubuntu (désolé, aucune AIX ne m'est disponible):
user@Host:~$ passwd <<EOF
oldpassword
newpassword
newpassword
EOF
Changing password for user.
(current) UNIX password: Enter new UNIX password: Retype new UNIX password:
passwd: password updated successfully
user@Host:~$
Ceci est à partir de: Script pour changer le mot de passe sur les serveurs linux sur ssh
Le script ci-dessous devra être enregistré sous forme de fichier (par exemple, ./passwdWrapper
) et rendu exécutable (chmod u+x ./passwdWrapper)
#!/usr/bin/expect -f
#wrapper to make passwd(1) be non-interactive
#username is passed as 1st arg, passwd as 2nd
set username [lindex $argv 0]
set password [lindex $argv 1]
set serverid [lindex $argv 2]
set newpassword [lindex $argv 3]
spawn ssh $serverid passwd
expect "assword:"
send "$password\r"
expect "UNIX password:"
send "$password\r"
expect "password:"
send "$newpassword\r"
expect "password:"
send "$newpassword\r"
expect eof
Ensuite, vous pouvez exécuter ./passwdWrapper $user $password $server $newpassword
qui changera le mot de passe.
Remarque: Pour cela, vous devez installer expect
sur la machine sur laquelle vous allez exécuter la commande. (Sudo apt-get install expect
) Le script fonctionne sur CentOS 5/6 et Ubuntu 14.04, mais si les invites dans passwd
changent, vous devrez peut-être ajuster les lignes expect
.
Here is the script...
#!/bin/bash
echo "Please enter username:"
read username
echo "Please enter the new password:"
read -s password1
echo "Please repeat the new password:"
read -s password2
# Check both passwords match
if [ $password1 != $password2 ]; then
echo "Passwords do not match"
exit
fi
# Does User exist?
id $username &> /dev/null
if [ $? -eq 0 ]; then
echo "$username exists... changing password."
else
echo "$username does not exist - Password could not be updated for $username"; exit
fi
# Change password
echo -e "$password1\n$password1" | passwd $username
Reportez-vous également au lien ci-dessous ...
http://www.putorius.net/2013/04/bash-script-to-change-users-password.html
Tu peux essayer
LINUX
echo mot de passe | nom d'utilisateur passwd --stdin
UNIX
echo nom d'utilisateur: mot de passe | chpasswd -c
Si vous n'utilisez pas l'argument "-c", vous devez changer le mot de passe la prochaine fois.
Si vous pouvez utiliser ansible et y définir les droits Sudo, vous pouvez facilement utiliser ce script. Si vous souhaitez écrire un script de ce type, cela signifie que vous devez le faire sur plusieurs systèmes. Par conséquent, vous devriez également essayer d’automatiser cela.
Pour moi, cela a fonctionné dans un ordinateur virtuel vagabond:
Sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF