chsh always asking a password , and get `PAM: Authentication failure`

Today I tried to switch to another shell.

First I tried fish, and used chsh -s fish to change fish to default. After some time I found it cannot use ~/.bashrc (&& needs to be replaced by and).

Because I prefer to reusing ~/.bashrc, I found zsh which seems an easier one and followed this documentation to switch to zsh.

While I was running sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)", suddenly it asked me to enter Password:. I entered the root password but got PAM: Authentication failure.

Then I tried chsh -s bash and chsh -s zsh, it always asked me for a password and threw PAM: Authentication failure (not system password). I can't figure this out.


Thanks to this question on Server Fault, I worked around this by:

Changing /etc/pam.d/chsh: from:

auth       required   pam_shells.so

to

auth       sufficient   pam_shells.so

Then it doesn't ask for a password anymore. But I think it better to restore chsh settings after switching the shell.


Try this:

sudo chsh -s $(which zsh) $(whoami)

  1. Use which zshto find your zsh location.

    $ which zsh
    /usr/bin/zsh
    
  2. Add /usr/bin/zsh to /etc/shells

  3. Check in /etc/passwd that your config is /usr/bin/zsh

  4. Run chsh -s /usr/bin/zsh


An alternate work around –

My /etc/pam.d/chsh file has this section:

# This allows root to change user shell without being
# prompted for a password
auth        sufficient  pam_rootok.so

As the comment suggests, it lets root change the shell without needing to product the password. As such I was able to change my shell (to zsh) by running chsh as root and specifying my user account, eg:

sudo chsh $USER -s $(which zsh)