I’m trying to generate some MD5 hashes with openssl
for use with chpasswd
Ex. CSV file:
JavaScript
x
Sample,User,SU,,sauser,password
Test,User,TU,,teuser,password
User, T Test,TEST,,username,password
Script I created:
JavaScript
#!/bin/bash
file=$(readlink -f "$1") # open csv
while read line; do
salt=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 5 | head -n 1) #randomly generate 5 char salt
user=$(echo "$line" | cut -d, -f5 | xargs) # cut user from csv and trim with xargs
pass=$(echo "$line" | cut -d, -f6 | xargs) # cut pass from csv and trim with xargs
echo "$user:"$(openssl passwd -1 -salt "$salt" "$pass") >> ./global_chpasswd.data # gen MD5 hash per user and store in file
done < "$file" # close csv
However, if I take any MD5 generated from this script and try to use it with chpasswd it does not work.
JavaScript
echo 'username:$1$K8m2T$gb3C0Sz4JlXyewe8VRhxv.' | chpasswd -e
This password will fail
If I try to do this without the script by hand it works:
JavaScript
echo "username:"$(openssl passwd -1 -salt salt password) | chpasswd -e
Advertisement
Answer
Your CSV file probably has carriage returns which is being included as part of the password field (it’s the final field).
Be sure to run dos2unix
or use tr -d 'r'
on your CSV before processing it.