Changer un mot de passe AIX via le script?
j'essaie de changer le mot de passe d'un utilisateur via script. Je ne peux pas utiliser sudo car il y a une fonctionnalité qui demande à l'utilisateur de changer le mot de passe à nouveau si un autre utilisateur change son mot de passe.
AIX tourne sur le système.
malheureusement, chpasswd n'est pas disponible.
j'ai attendu installé, mais j'ai des problèmes avec cela aussi.
voici ce que je pensais pouvoir faire
echo "oldpasswordnnewpasswd123nnewpasswd123" | passwd user
cependant, une fois lancé le script, on m'a demandé avec please enter user's old password
ne devraient-ils pas tous être repris dans?
je suis un débutant avec les scripts shell et cela a été déconcerté.
13 réponses
, Vous pouvez essayer:
echo "USERNAME:NEWPASSWORD" | chpasswd
Use GNU passwd
stdin flag.
De la man
page:
--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.
alternativement 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 atteindre cet objectif en utilisant un HEREDOC .
dans votre cas immédiat, cela pourrait ressembler à:
$ /usr/bin/passwd root <<EOF
test
test
EOF
Vous avez besoin d'echo-e pour les caractères de saut de ligne pour prendre effet
vous avez écrit
echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
, vous devriez essayer
echo -e "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
plus que probablement, vous n'aurez pas besoin de la partie oldpassword\n de cette commande, vous devriez juste avoir 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
, Vous pouvez essayer :
echo-e "newpasswd123\nnnewpasswd123" / passwd user
Juste
passwd <<EOF
oldpassword
newpassword
newpassword
EOF
sortie réelle de la machine ubuntu (désolé pas D'AIX disponible pour moi):
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:~$
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
Consulter le lien ci-dessous...
http://www.putorius.net/2013/04/bash-script-to-change-users-password.html
Vous pouvez essayer
LINUX
echo mot de passe | mot de passe nom d'utilisateur --stdin
UNIX
echo nom d'utilisateur: password / chpasswd-c
si vous n'utilisez pas l'argument"- c", vous devez changer le mot de passe la prochaine fois.
C'est de: Script pour changer le mot de passe sur les serveurs linux sur ssh
le script ci-dessous devra être sauvegardé en tant que 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
alors vous pouvez lancer ./passwdWrapper $user $password $server $newpassword
qui va changer le mot de passe.
Note: pour cela, vous devez installer expect
sur la machine à partir de laquelle vous exécuterez 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 pourriez avoir à modifier les lignes expect
.
si vous pouvez utiliser ansible, et définir les droits sudo dans celui-ci, alors vous pouvez facilement utiliser ce script. Si vous voulez écrire quelque chose comme ça, cela signifie que vous devez le faire sur plus d'un système. Par conséquent, vous devriez essayer d'automatiser cela.
printf "oldpassword/nnewpassword/nnewpassword" | passwd user
pour moi cela a fonctionné dans un vagabond VM:
sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF
#!/usr/bin/python
import random
import string
import smtplib
import sys
import os
from subprocess import call
import socket
user = sys.argv[1]
receivers = ["%s@domain.com" %user]
'''This will generate a 30 character random password'''
def genrandpwd():
return ''.join(random.SystemRandom().choice(string.ascii_lowercase + string.digits + string.ascii_uppercase + string.punctuation) for _ in range(30))
def change_passwd(user, password):
p = os.popen("/usr/bin/passwd %s" %user, "w")
p.write(password)
p.write("\n")
p.write(password)
p.close()
def chage(user):
agepasswd = call(["/usr/bin/chage", "-d", "0", "%s" %user])
def mailpwd(user, password):
sender = "admin@%s" %socket.gethostname()
subj = "!!!IMPORTANT!!!, Unix password changed for user %s" %user
text = "The password for the %s user has changed, the new password is:\n\n %s \n\n Note: The system will force to change the password upon initial login. Please use the password provided in the mail as your current password and type the password of your choice as the New password" %(user, password)
message = message = 'Subject: %s\n\n%s' % (subj, text)
smtpObj = smtplib.SMTP('mailrelay-server.domain.com')
smtpObj.sendmail(sender, receivers, message)
smtpObj.quit()
def main():
newpwd = genrandpwd()
change_passwd(user, newpwd)
chage(user)
mailpwd(user, newpwd)
if __name__ == "__main__":
main()