chsh -s /usr/bin/zsh not working

You need to log out again for these changes to take effect. The shell defined in the /etc/passwd file is your login shell :-) So you need to log in actually for that.


There is a couple different problems that can occur here.

Problem 1. The default login shell hasn't been changed in /etc/passwd this can be solved by running chsh -s /usr/bin/zsh which will update /etc/passwd

Problem 2. Bash is still used even after changing the default login shell using chsh -s /usr/bin/zsh and confirming that your shell is actually set to zsh in /etc/passwd. This is caused by recycled ssh sessions. Logging out and logging back in won't fix the issue immediately, the sessions either need to expire or timeout, or you need to kill your session and reconnect. You can reboot, but below is an easier method which helps you find which session to kill.

Check what shell I'm using (/bin/bash) and what shell I should be using (/usr/bin/zsh):

asc@g1:~$ echo $SHELL
/bin/bash

asc@g1:~$ cat /etc/passwd|grep asc
asc:x:1000:1000:asc,,,:/home/asc:/usr/bin/zsh

Find out my terminal session information:

asc@g1:~$ who
asc      pts/1        2020-01-28 13:08 (172.16.1.2)

asc@g1:~$ ps aux|grep ssh
root      1220  0.0  0.0  72300  6076 ?        Ss   Jan22   0:00 /usr/sbin/sshd -D
root     32879  0.0  0.0 107988  7224 ?        Ss   13:08   0:00 sshd: asc [priv]
asc      33031  0.0  0.0 107988  3612 ?        S    13:08   0:00 sshd: asc@pts/1
asc      47453  0.0  0.0  14428  1032 pts/1    S+   13:21   0:00 grep --color=auto ssh

Kill my terminal session:

asc@g1:~$ kill 33031

Then SSH back in to the machine and you'll be using ZSH