web-dev-qa-db-fra.com

Puis-je modifier un mot de passe utilisateur sous Linux de la ligne de commande sans interactivité?

J'ai un cas d'utilisation spécifique où j'aimerais vraiment pouvoir modifier le mot de passe d'un utilisateur avec une seule commande sans interactivité. Cela se fait de manière sûre (sur SSH et sur un système avec un seul utilisateur capable d'être connecté), il convient donc d'accord pour exposer le nouveau mot de passe (et même l'ancien, si nécessaire) sur la ligne de commande. FWIW, c'est un système Ubuntu.

Je veux juste éviter d'ajouter quelque chose d'attendre à ce système pour cette seule tâche.

15
Paul Hoffman

Vous pouvez utiliser chapasswd .

echo user:pass | /usr/sbin/chpasswd
25
xofer

Vous pouvez utiliser usermod avec le -p Option pour fournir un hash de mot de passe (pas le mot de passe réel). Vous pouvez générer le hasch de mot de passe en utilisant quelque chose comme mkpasswd -m sha-256 ou mkpasswd -m md5

5
stew

Sûr.

  1. Hachage le mot de passe sur votre système local.
  2. Connectez-vous à la machine distante (où vous souhaitez modifier le mot de passe)
  3. Alimez le mot de passe haché et le nom d'utilisateur à un script créatif sed qui met à jour le fichier de mot de passe de votre système (/etc/shadow, /etc/master.passwd, peu importe ce qu'il arrive).
3
voretaq7

L'utilitaire passwd a une option -stdin qui indique:

Cette option est utilisée pour indiquer que PassWD doit lire le nouveau mot de passe à partir d'une entrée standard, qui peut être un tuyau.

Syntaxe:

echo "newpass" | passwd --stdin user1

Même si vous avez mentionné que vous ne vous souciez pas, vous pouvez mettre le mot de passe dans un fichier texte, puis faire cat pass.txt Au lieu de la commande ECHO, de cette façon, cela ne se présente pas dans l'histoire de Bash.

1
Safado

Si --stdin L'option ne fonctionne pas Nous pouvons essentiellement utiliser deux options:

  1. Utilisez un autre utilty appelé chpaswd dans votre script.
  2. Ou utiliser echo "current_password\nnew_password\nnew_password" | passwd user_name
1
Sanjay s.