How to automatically add user account AND password with a Bash script?

前端 未结 19 661
北荒
北荒 2020-12-07 06:53

I need to have the ability to create user accounts on my Linux (Fedora 10) and automatically assign a password via a bash script(or otherwise, if need be).

It\'s eas

相关标签:
19条回答
  • 2020-12-07 07:21

    You can use the -p option.

    useradd -p encrypted_password newuser
    

    Unfortunately, this does require you to hash the password yourself (where passwd does that for you). Unfortunately, there does not seem to be a standard utility to hash some data so you'll have to write that yourself.

    Here's a little Python script I whipped up to do the encryption for you. Assuming you called it pcrypt, you would then write your above command line to:

    useradd -p $(pcrypt ${passwd}) newuser
    

    A couple of warnings to be aware of.

    1. While pcrypt is running, the plaintext will be visible to any user via the ps command.
    2. pcrypt uses the old style crypt function - if you are using something more moderns like an MD5 hash, you'll need to change pcrypt.

    and here's pcrypt:

    #!/usr/bin/env python
    
    import crypt
    import sys
    import random
    
    saltchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    
    def salt():
        return random.choice(saltchars) + random.choice(saltchars)
    
    def hash(plain):
        return crypt.crypt(arg, salt())
    
    if __name__ == "__main__":
        random.seed()
        for arg in sys.argv[1:]:
            sys.stdout.write("%s\n" % (hash(arg),))
    
    0 讨论(0)
  • 2020-12-07 07:23

    From IBM (https://www.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.cmds1/chpasswd.htm):

    Create a text file, say text.txt and populate it with user:password pairs as follows:

    user1:password1
    user2:password2
    ...
    usern:passwordn
    

    Save the text.txt file, and run

    cat text.txt | chpassword
    

    That's it. The solution is (a) scalable and (b) does not involve printing passwords on the command line.

    0 讨论(0)
  • 2020-12-07 07:23

    usage: ./my_add_user.sh USER PASSWD

    code:

    #!/bin/bash
    # my_add_user.sh
    
    if [ "$#" -lt 2 ] 
     then
           echo "$0 username passwd"
           exit
    fi
    
    user=$1
    passwd=$2
    
    useradd $user -d /data/home/$user  -m  ;
    echo $passwd | passwd $user --stdin;
    
    0 讨论(0)
  • 2020-12-07 07:24

    The following works for me and tested on Ubuntu 14.04. It is a one liner that does not require any user input.

    sudo useradd -p $(openssl passwd -1 $PASS) $USERNAME
    

    Taken from @Tralemonkey

    0 讨论(0)
  • 2020-12-07 07:25

    Here is a script that will do it for you .....

    You can add a list of users (or just one user) if you want, all in one go and each will have a different password. As a bonus you are presented at the end of the script with a list of each users password. .... If you want you can add some user maintenance options

    like:

    chage -m 18 $user
    chage -M 28 $user
    

    to the script that will set the password age and so on.

    =======

    #!/bin/bash
    
    # Checks if you have the right privileges
    if [ "$USER" = "root" ]
    then
    
    # CHANGE THIS PARAMETERS FOR A PARTICULAR USE
    PERS_HOME="/home/"
    PERS_SH="/bin/bash"
    
       # Checks if there is an argument
       [ $# -eq 0 ] && { echo >&2 ERROR: You may enter as an argument a text file containing users, one per line. ; exit 1; }
       # checks if there a regular file
       [ -f "$1" ] || { echo >&2 ERROR: The input file does not exists. ; exit 1; }
       TMPIN=$(mktemp)
       # Remove blank lines and delete duplicates 
       sed '/^$/d' "$1"| sort -g | uniq > "$TMPIN"
    
       NOW=$(date +"%Y-%m-%d-%X")
       LOGFILE="AMU-log-$NOW.log"
    
       for user in $(more "$TMPIN"); do
          # Checks if the user already exists.
          cut -d: -f1 /etc/passwd | grep "$user" > /dev/null
          OUT=$?
          if [ $OUT -eq 0 ];then
             echo >&2 "ERROR: User account: \"$user\" already exists."
             echo >&2 "ERROR: User account: \"$user\" already exists." >> "$LOGFILE"
          else
             # Create a new user
             /usr/sbin/useradd -d "$PERS_HOME""$user" -s "$PERS_SH" -m "$user"
             # passwdgen must be installed
             pass=$(passwdgen -paq --length 8)
             echo $pass | passwd --stdin $user
             # save user and password in a file
             echo -e $user"\t"$pass >> "$LOGFILE"
             echo "The user \"$user\" has been created and has the password: $pass"
          fi
       done
       rm -f "$TMPIN"
       exit 0
    else
       echo >&2 "ERROR: You must be a root user to execute this script."
       exit 1
    fi
    

    ===========

    Hope this helps.

    Cheers, Carel

    0 讨论(0)
  • 2020-12-07 07:26

    You could also use chpasswd:

    echo username:new_password | chpasswd
    

    so, you change password for user username to new_password.

    0 讨论(0)
提交回复
热议问题