44 votes

Chsh demande toujours un mot de passe, et obtient `PAM: Échec de l'authentification`

Aujourd'hui j'ai essayé de passer à un autre shell.

Tout d'abord j'ai essayé fish, et j'ai utilisé chsh -s fish pour le définir par défaut. Après un certain temps, j'ai trouvé qu'il ne peut pas utiliser ~/.bashrc (&& doit être remplacé par and).

Parce que je préfère réutiliser ~/.bashrc, j'ai trouvé zsh qui semble être plus facile et j'ai suivi cette documentation pour passer à zsh.

Pendant que j'exécutais sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)", soudain il m'a demandé d'entrer Mot de passe:. J'ai entré le mot de passe root mais j'ai obtenu PAM: Authenticaton failure.

Ensuite j'ai essayé chsh -s bash et chsh -s zsh, il m'a toujours demandé un mot de passe et a affiché PAM: Authenticaton failure (pas le mot de passe système). Je n'arrive pas à comprendre cela.

0voto

mailivres Points 1

Pour ceux pour qui les deux premières solutions n'ont pas fonctionné. J'ai trouvé ma solution ici: https://askubuntu.com/a/950531/1168898

Il y a une solution de contournement pour gnome-terminal:

  1. Allez dans Modifier Préférences du profil Titre et Commande.
  2. Cochez Exécuter une commande personnalisée au lieu de mon shell.
  3. Indiquez bash comme Commande personnalisée (ou fish, ou autre chose).

0voto

SWdV Points 101

J'ai rencontré ce problème lorsque je suis passé à fish. J'ai accidentellement exécuté chsh -s /usr/local/bin/fish alors que sur mon système c'était censé être chsh -s /usr/bin/fish, mais même si la première commande a averti que le shell n'existait pas, elle l'a quand même changé en /usr/local/bin/fish dans /etc/passwd. Cela signifiait que la deuxième commande correcte n'a pas pu s'authentifier (tout comme les nouvelles connexions SSH) car le shell n'existait pas.

La solution pour moi a été de d'abord corriger le shell pour en choisir un existant dans /etc/passwd, puis d'exécuter à nouveau la commande chsh correcte.

0voto

trilawney Points 465

Ceci est ma solution :

grep -qxF "$(which zsh)" "/etc/shells" || sudo bash -c "echo $(which zsh) >> /etc/shells"
grep -qxF "$(which zsh)" "/etc/shells" && sudo chsh -s "$(which zsh)" "$(whoami)"
  1. Vérifiez si /etc/shells contient l'exécutable zsh que vous voulez. Si ce n'est pas le cas, ajoutez-le au fichier.
  2. Si /etc/shells contient l'interpréteur de commandes souhaité, changez l'interpréteur de commandes de votre utilisateur en celui-ci.

J'ai certaines parties abstraites en variables mais pour simplifier, j'ai inclus la logique complète de la manière la plus simple possible.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X