Skip to content
Advertisement

Script to generate MD5 hash with openssl

I’m trying to generate some MD5 hashes with openssl for use with chpasswd

Ex. CSV file:

Sample,User,SU,,sauser,password
Test,User,TU,,teuser,password
User, T Test,TEST,,username,password

Script I created:

#!/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.

echo 'username:$1$K8m2T$gb3C0Sz4JlXyewe8VRhxv.' | chpasswd -e

This password will fail

If I try to do this without the script by hand it works:

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.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement