Originally published March 25, 2020 @ 4:48 pm
On occasion you may need to check if an account has a specific password. For example, when you build VMs, you may use some default passwords for some default accounts (i.e. root) that should be changed later by your password management application.
Except that the password management application in question is about as reliable as a Nigerian bank. In the example below we are checking if the root account is using the default password that should’ve been changed, but, for some reason, wasn’t.
Note: this process requires the sshpass utility that can be installed with yum -y install sshpass or apt-get install sshpass. You also need to have openssl installed, but you probably already have it.
# Enter the known password
read -s p
# Set the username
u=root
if [ -x /usr/bin/sshpass ]
then
if [ $(/usr/bin/sshpass -p "${p}" /usr/bin/openssl passwd -$(/bin/grep -m1 "^${u}:" /etc/shadow | \
awk -F':' '{print $2}' | awk -F'$' '{print $2}') \
-salt $(/bin/grep -m1 "^${u}:" /etc/shadow | \
awk -F':' '{print $2}' | awk -F'$' '{print $3}') | \
/bin/grep -wc "$(/bin/grep -m1 "^${u}:" /etc/shadow | \
awk -F':' '{print $2}')") -gt 0 ]
then
echo "$(date +'%Y-%m-%d %H:%M:%S'),$(hostname | awk -F'.' '{print $1}'),change ${u} password"
fi
fi
Sample run:
root@DESKTOP-GKM9P85:~/twurl/bin# u=igor
root@DESKTOP-GKM9P85:~/twurl/bin# read -s p
root@DESKTOP-GKM9P85:~/twurl/bin# if [ -x /usr/bin/sshpass ]
> then
> if [ $(/usr/bin/sshpass -p "${p}" /usr/bin/openssl passwd -$(/bin/grep -m1 "^${u}:" /etc/shadow | \
> awk -F':' '{print $2}' | awk -F'$' '{print $2}') \
> -salt $(/bin/grep -m1 "^${u}:" /etc/shadow | \
> awk -F':' '{print $2}' | awk -F'$' '{print $3}') | \
> /bin/grep -wc "$(/bin/grep -m1 "^${u}:" /etc/shadow | \
> awk -F':' '{print $2}')") -gt 0 ]
> then
> echo "$(date +'%Y-%m-%d %H:%M:%S'),$(hostname | awk -F'.' '{print $1}'),change ${u} password"
> fi
> fi
2020-03-25 16:18:22,DESKTOP-GKM9P85,change igor password
root@DESKTOP-GKM9P85:~/twurl/bin#
Here’s an example of how to run this command via Salt cmd.run on multiple systems. It’s just a matter of escaping the right $ and ":
# Enter the known password
read -s p
# Set the username
u=root
salt "prod*" cmd.run "if [ -x /usr/bin/sshpass ]; then if [ $(/usr/bin/sshpass -p \"${p}\" /usr/bin/openssl passwd -$(/bin/grep -m1 \"^${u}:\" /etc/shadow | awk -F':' '{print \}' | awk -F'$' '{print \}') -salt $(/bin/grep -m1 \"^${u}:\" /etc/shadow | awk -F':' '{print \}' | awk -F'$' '{print \}') | /bin/grep -wc \"$(/bin/grep -m1 \"^${u}:\" /etc/shadow | awk -F':' '{print \}')\") -gt 0 ]; then echo \"$(date +'%Y-%m-%d %H:%M:%S'),$(hostname | awk -F'.' '{print \}'),change ${u} password\"; fi; fi 2>/dev/null" 2>/dev/null

Experienced Unix/Linux System Administrator with 20-year background in Systems Analysis, Problem Resolution and Engineering Application Support in a large distributed Unix and Windows server environment. Strong problem determination skills. Good knowledge of networking, remote diagnostic techniques, firewalls and network security. Extensive experience with engineering application and database servers, high-availability systems, high-performance computing clusters, and process automation.





















