$ sudo ./create_users.py users.csv
loading users...
creating user 'asalvador-vega-nogales'
creating user 'jdoe'
creating user 'jsmith'
creating user 'jstrickland'
complete!
$ su jdoe
Password:
[jdoe@garnet alejandro-users]$
| #!/usr/bin/env python | |
| from passlib.hash import sha512_crypt | |
| from subprocess import call | |
| import csv | |
| import sys | |
| def load_users(csv_file): | |
| """ Load a CSV file and return a dictionary representing each user. | |
| Hash the password using SHA_512 and a random salt. | |
| """ | |
| users = {} | |
| with open(csv_file, 'rb') as f: | |
| reader = csv.reader(f) | |
| for row in reader: | |
| username = "{0}{1}".format(row[0][0], row[1]).lower() | |
| password = row[2] | |
| salted_password = sha512_crypt.encrypt(password) | |
| users[username] = salted_password | |
| return users | |
| def create_user(username, password): | |
| """ Create a user with subprocess.call. Returns the exit status. """ | |
| command = ['/usr/sbin/useradd', username, '-p', password] | |
| return call(command) | |
| def main(): | |
| """ Load a CSV script and generate passwords. """ | |
| # looking for one command line arguments | |
| if len(sys.argv) != 2: | |
| sys.exit("usage: {0} <file.csv>".format(sys.argv[0])) | |
| csv_file = sys.argv[1] | |
| print("loading users...") | |
| users = load_users(csv_file) | |
| for username, password in users.iteritems(): | |
| print("creating user '{0}'".format(username)) | |
| if create_user(username, password) != 0: | |
| sys.exit("ABORTING - DID NOT EXECUTE SUCCESSFULLY") | |
| print("complete!") | |
| if __name__ == '__main__': | |
| main() |
| #! /bin/bash | |
| #script for batch generating users for AECC's raspberry pi. All passwords are temporary and will need to be prompted for new passwords on first login | |
| echo -ne "This script must be run as root!\nScript for creating users for AECC raspberry pi from a csv file.\nEnter path for csv file: " | |
| read csv_file | |
| #exit if not root | |
| if [[ `id -u` != 0 ]]; then | |
| echo "Must be root to run script" | |
| exit 1 | |
| fi | |
| if [[ ! -f "$csv_file" ]] | |
| then | |
| echo "ERROR! File $csv_file does not exist. Run again with a valid file path" | |
| else | |
| #read csv file which contains first name, last name, student number | |
| while IFS=, read fn ln sn | |
| do | |
| #get first char of first csv field (first letter of first name) | |
| user1=${fn:0:1} | |
| #get first last name | |
| user2=$(echo "$ln" | cut -f 1 -d ' ') | |
| if [[ "$user2" == "de" ]] | |
| then | |
| #dirty method. awk would probs be better but I wanna finish this quickly | |
| sfln=$(echo "$ln" | cut -f 2 -d ' ') | |
| user2+="$sfln" | |
| echo "$user2" | |
| fi | |
| #combine lowercasefirst letter of last name and first last name) into username variable | |
| user=$(echo "$user1$user2" | awk '{print tolower($0)}') | |
| passwd=$sn | |
| #change password for created user. I don't like this method, but I was having problems passing a hashed password | |
| useradd -m $user && echo "$user:$passwd" | chpasswd | |
| #echo "$user:$passwd" | |
| if [ $? -eq 0 ] | |
| then | |
| echo "Created User:$user" | |
| echo "Used Password:$passwd" | |
| else | |
| echo "Error! Could not create user $user." | |
| fi | |
| done < $csv_file; | |
| fi | |
$ sudo ./create_users.py users.csv
loading users...
creating user 'asalvador-vega-nogales'
creating user 'jdoe'
creating user 'jsmith'
creating user 'jstrickland'
complete!
$ su jdoe
Password:
[jdoe@garnet alejandro-users]$
| jonathan | strickland | password1 | |
|---|---|---|---|
| alejandro | salvador-vega-nogales | password2 | |
| john | doe | password3 | |
| jane | smith | password4 |