web-dev-qa-db-fra.com

Alternative à passwd --stdin dans Ubuntu

J'essaie de migrer un serveur OpenVPN d'un boîtier CentOS vers un Ubuntu 18.04.

Il existe un script qui crée de nouveaux utilisateurs VPN. Cela s'explique en partie par le fait qu'il génère un nouveau mot de passe pour l'utilisateur, puis le transmet en tant que mot de passe Linux pour le nouvel utilisateur (il y a MFA en plus de cela, donc ce n'est qu'une partie du processus d'authentification).

Cependant, le script utilise la ligne suivante pour ce faire:

echo ${VPN_PASSWORD} | passwd "${VPN_USER}" --stdin

Et après avoir longtemps déconné, j'ai découvert qu'Ubuntu n'a pas le --stdinoption pour passwd.

Ce que je n'ai pas pu trouver, cependant, est une autre façon de procéder.

Ce sont les parties pertinentes de mon script.

Nous générons un mot de passe:

VPN_PASSWORD=$(cat /dev/urandom | tr -dc 'A-Z0-9' | head -c 8)

Nous ajoutons un nouvel utilisateur et tentons de lui attribuer ce mot de passe:

echo "Adding Unix user ${VPN_USER}"
useradd -G vpnusers -m -s /sbin/nologin $VPN_USER
if [ "$?" != 0 ]
then
    echo "Could not create user. (Are you sudo?!)"
    exit 1
fi

echo ${VPN_PASSWORD} | passwd "${VPN_USER}" --stdin
echo "User created."

L'utilisateur est en cours de création mais j'obtiens cette erreur concernant le mot de passe:

passwd: unrecognized option '--stdin'
Usage: passwd [options] [LOGIN]

J'ai essayé pendant une journée de trouver et de répondre à cela et j'ai essayé beaucoup, beaucoup de choses, mais je pense que mon manque fondamental de connaissances sur Ubuntu est le vrai problème ici.

4
shaneoh

Pour définir le mot de passe d'un utilisateur à partir du shell, utilisez chpasswd :

echo "username:cleartext_password" | Sudo chpasswd
6
PerlDuck