web-dev-qa-db-fra.com

Changer un mot de passe AIX via un script?

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é.

36
Grushton94

Tu peux essayer:

echo "USERNAME:NEWPASSWORD" | chpasswd

75
Mandar Shinde

UtilisezGNUpasswdstdin.

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.
21
klashxx

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
7
Andrew Yasinsky

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
6
Elliot Beaumont

Tu peux essayer :

echo -e "newpasswd123\nnewpasswd123" | utilisateur passwd

3
TehesFR

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:~$
3
CoreyJJohnson

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.

2
Loren
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
1
Ikruzzz

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. 

1
Ahmet Mecid Kaya

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.

0
itengineer

Pour moi, cela a fonctionné dans un ordinateur virtuel vagabond:

Sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF
0
Abhradip Mukherjee