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

35
demandé sur Craig S. Anderson 2015-01-08 13:17:13

13 réponses

, Vous pouvez essayer:

echo "USERNAME:NEWPASSWORD" | chpasswd

71
répondu Mandar Shinde 2015-01-08 11:14:26

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.
20
répondu klashxx 2016-02-02 09:21:54

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
7
répondu Andrew Yasinsky 2016-03-12 00:18:19

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
6
répondu Elliot Beaumont 2017-06-30 17:23:58

, Vous pouvez essayer :

echo-e "newpasswd123\nnnewpasswd123" / passwd user

2
répondu TehesFR 2015-01-08 10:22:54

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:~$
2
répondu CoreyJJohnson 2018-03-21 18:14:57
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
1
répondu Ikruzzz 2015-01-08 10:33:16

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.

1
répondu Ahmet Mecid Kaya 2015-06-17 10:29:29

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 .

1
répondu Loren 2017-12-20 18:08:27

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.

0
répondu itengineer 2017-08-22 04:10:15
printf "oldpassword/nnewpassword/nnewpassword" | passwd user
-1
répondu Kam Paul 2017-04-14 17:49:00

pour moi cela a fonctionné dans un vagabond VM:

sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF
-1
répondu Abhradip Mukherjee 2017-07-13 01:33:34
#!/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()
-2
répondu pythonmts 2017-05-12 18:08:53