comprobar si el usuario tiene una contraseña establecida para su cuenta en un script

comprobar si el usuario tiene una contraseña establecida para su cuenta en un script

Estoy escribiendo un script y necesito verificar $user si su cuenta tiene una contraseña establecida, ¿cómo puedo hacer esto?

Sé sobre esto:

passwd --status username

Mostrar información del estado de la cuenta. La información de estado consta de 7 campos. El primer campo es el nombre de inicio de sesión del usuario. El segundo campo indica si la cuenta de usuario tiene una contraseña bloqueada (L), no tiene contraseña (NP) o tiene una contraseña utilizable (P). El tercer campo proporciona la fecha del último cambio de contraseña. Los siguientes cuatro campos son la edad mínima, la edad máxima, el período de advertencia y el período de inactividad de la contraseña. Estas edades se expresan en días.

pero necesito algo que pueda caber en unif test

Aquí está el código:

userPass()
{
    for i in "#@"
    do
        if [ "$i" = root ]
        then
            continue
        else
            echo "Changing password for $i:"
            echo $i:$i"YOURSTRONGPASSWORDHERE" | chpasswd
            if [ "$?" = 0 ]
            then
                echo "Password for user $i changed successfully"
            fi
        fi
    done
}
userPass $1 $2 $3

Respuesta1

Dado que el resultado de passwd --statusindica si el usuario no tiene contraseña ("no tiene contraseña (NP)"), puede verificar que:

if [[ $(passwd --status "$i" | awk '{print $2}') = NP ]]
then
    echo "$i doesn't have a password."
fi

O:

case $(passwd --status "$i" | awk '{print $2}') in
  NP)  echo "$i doesn't have a password."
       # set password here.
       ;;
  L)  echo "$i's account is locked." ;;
  P)  echo "$i has a password." ;;
esac

Respuesta2

Qué tal si:

if [ `passwd -S ${i} | cut -d" " -f2` == "P" ]; then do some stuff; fi

Respuesta3

También podemos registrarnos /etc/passwordsi tenemos acceso.

if [ `awk -F ':' '/^'$i':/ {print $2}' /etc/shadow` ] ; then 
   echo "User has passwd" ; 
else 
   echo "NO passwd";
fi

información relacionada