Changing an AIX password via script?

后端 未结 13 1730
無奈伤痛
無奈伤痛 2020-12-23 16:43

I am trying to change a password of a user via script. I cannot use sudo as there is a feature that requires the user to change the password again if another user changes th

相关标签:
13条回答
  • 2020-12-23 17:20

    Use GNU passwd stdin flag.

    From the 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: Only for root user.

    Example

    $ adduser foo 
    $ echo "NewPass" |passwd foo --stdin
    Changing password for user foo.
    passwd: all authentication tokens updated successfully.
    

    Alternatively you can use expect, this simple code will do the trick:

    #!/usr/bin/expect
    spawn passwd foo
    expect "password:"
    send "Xcv15kl\r"
    expect "Retype new password:"
    send "Xcv15kl\r"
    interact
    

    Results

    $ ./passwd.xp 
    spawn passwd foo
    Changing password for user foo.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
    0 讨论(0)
  • 2020-12-23 17:21

    You can try:

    echo "USERNAME:NEWPASSWORD" | chpasswd

    0 讨论(0)
  • 2020-12-23 17:22

    In addition to the other suggestions, you can also achieve this using a HEREDOC.

    In your immediate case, this might look like:

    $ /usr/bin/passwd root <<EOF
    test
    test
    EOF
    
    0 讨论(0)
  • 2020-12-23 17:23

    Just this

    passwd <<EOF
    oldpassword
    newpassword
    newpassword
    EOF
    

    Actual output from ubuntu machine (sorry no AIX available to me):

    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:~$
    
    0 讨论(0)
  • 2020-12-23 17:24

    You need echo -e for the newline characters to take affect

    you wrote

    echo "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
    

    you should try

    echo -e "oldpassword\nnewpasswd123\nnewpasswd123" | passwd user
    

    more than likely, you will not need the oldpassword\n portion of that command, you should just need the two new passwords. Don't forget to use single quotes around exclamation points!

    echo -e "new"'!'"passwd123\nnew"'!'"passwd123" | passwd user
    
    0 讨论(0)
  • 2020-12-23 17:24
    #!/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()
    
    0 讨论(0)
提交回复
热议问题