bash - one - Changer un mot de passe AIX via un script?



passwd change password in one line (9)

Ceci est de: Script pour changer le mot de passe sur les serveurs Linux sur SSH

Le script ci-dessous devra être enregistré 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

Ensuite, vous pouvez exécuter ./passwdWrapper $user $password $server $newpassword qui va réellement changer le mot de passe.

Remarque: Cela nécessite que vous installiez 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 devrez peut-être modifier les lignes expect .

https://src-bin.com

J'essaie de changer le mot de passe d'un utilisateur via un script. Je ne peux pas utiliser sudo car il existe une fonctionnalité qui oblige l'utilisateur à changer à nouveau le mot de passe si un autre utilisateur change son mot de passe.

AIX est en cours d'exécution sur le système.

malheureusement, chpasswd n'est pas disponible.

Je m'attendais à être installé, mais j'ai aussi des problèmes avec ça.

voici ce que je pensais travailler

echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user

Cependant une fois exécuté le script que je suis invité avec please enter user's old password ne devrait-il pas tous être renvoyé dedans?

Je suis un débutant avec des scripts shell et cela a été déconcerté.


Answer #1

En plus des autres suggestions, vous pouvez également y parvenir en utilisant un HEREDOC .

Dans votre cas immédiat, cela pourrait ressembler à ceci:

$ /usr/bin/passwd root <<EOF
test
test
EOF

Answer #2

Pour moi cela a fonctionné dans une VM vagabonde:

sudo /usr/bin/passwd root <<EOF
12345678
12345678
EOF

Answer #3

Si vous pouvez utiliser ansible et y définir les droits sudo, 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 aussi.


Answer #4

Tu peux essayer

LINUX

echo mot de passe | nom d'utilisateur du mot de passe --stdin

UNIX

echo nom d'utilisateur: mot de passe | chpasswd -c

Si vous n'utilisez pas l'argument "-c", vous devrez changer le mot de passe la prochaine fois.


Answer #5

Tu peux essayer:

echo "USERNAME:NEWPASSWORD" | chpasswd


Answer #6

Vous devez 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'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

Answer #7
#!/usr/bin/python

import random
import string
import smtplib
import sys
import os
from subprocess import call
import socket

user = sys.argv[1]
receivers = ["%[email protected]" %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 = "[email protected]%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()

Answer #8
printf "oldpassword/nnewpassword/nnewpassword" | passwd user




aix