I want to change my shell from the default bash shell to zsh on my Amazon EC2 instances. How do I go about doing it? Thanks!
6 Answers
Try using the chsh command.
e.g.
chsh -s /bin/zsh
You can confirm the location of zsh by running whereis zsh, or alternatively simply run
chsh -s $(which zsh)
If you want to change the shell for a user account other than the one you're logged into, you'll need to run it as root, so to change john's shell, do:
sudo chsh -s $(which zsh) john
Note that you'll need to log out and log back in for the change to go into effect. If you're using Gnome or some other window manager, you'll need to completely log out of that session as well—simply closing and opening your terminal is insufficient.
- 19,838
Open /etc/passwd:
sudo vi /etc/passwd
Find the line with your username:
username:x:1634231:100:Your Name:/home/username:/bin/bash
and replace bash with zsh:
username:x:1634231:100:Your Name:/home/username:/bin/zsh
Log out and log in back for the changes to take effect.
-
7It's better to use
chsh, but if you're really going to edit/etc/passwdby hand, at least use thevipwcommand. – Valmiky Arquissandas Aug 14 '14 at 02:58 -
I don't have chsh on my machine. Also, for some weird reason my /etc/passwd file is regularly being overwritten by the default one. Do you know why this could be happening? – Georgii Oleinikov Aug 14 '14 at 16:44
-
Don't touch /etc/passwd. There are better ways to do this that do not require messing with the passwd tool! – Andrew Sep 12 '17 at 18:23
-
1On Ubuntu AMIs it is not possible to use
chshfor ubuntu user since it requires a password. Editing/etc/passwdfile does the trick. More info here. – makons Feb 19 '21 at 10:59
I came here to just add more additional information. If you have troubles when install zsh in Amazon Linux AMI by Amazon, like when you run:
sudo chsh $(which zsh) : // chsh command not found
Then you should install util-linux-user:
sudo yum install util-linux-user
(by default Amazon Linux AMI only has lchsh, but I can not figure how it work).
Then run the following command, it should work:
sudo chsh -s $(which zsh) $(whoami)
- 315
-
3
-
2
-
1You can skip interactive.
which git-shell | lchsh gitfor example. – reergymerej Jul 02 '20 at 21:50
On Ubuntu, inside GNOME terminal, making changes via chsh won't have the expected effect...
To get over this problem, do this:
- Right click in terminal
- Profiles -> Profile Preferences
- Under "Title and Command" tab, tick "Run a custom command instead of my shell" and provide the path to zsh executable.
- Restart Terminal.
Peace.
P.S. Don't have 10 reputation to post images, so all texty instructions. :)
- 51
one line
sudo chsh -s $(which zsh) $(whoami)
Extra Info: after that you'll probably want to do this ones
git clone https://github.com/zdharma/fast-syntax-highlighting.git \
~/.oh-my-zsh/custom/plugins/fast-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
nano ~/.zshrc
find plugins=(git) Append zsh-autosuggestions & zsh-syntax-highlighting to plugins() like this
plugins=(git zsh-autosuggestions fast-syntax-highlighting)
source ~/.zshrc
- 177
I had an ubuntu 18.04 EC2 instance. But, when i tried doing:
ubuntu@ip-xxx:~$ chsh -s /bin/zsh
Password:
chsh: PAM: Authentication failure
I got a password prompt, which failed with auth error because quite frankly I'm not sure of what to put there for sudo user.
So, I tried adding sudo and command didn't give any error. But, when i ssh'ed later, I still got BASH as default SHELL.
What worked for me was the below command:
ubuntu@ip-xxx:~$ sudo chsh -s $(which zsh) $(whoami)
This changed the default shell for current user and it stayed that way for each time I ssh'ed into the machine.
Success! :)
- 101
chsh -s /bin/zsh username. – Jan 11 '11 at 11:47chsh: /usr/local/bin/zsh is an invalid shell– Jürgen Paul Feb 26 '13 at 04:13sudo chsh -s $(which zsh) $(whoami)– SergioAraujo Apr 30 '15 at 19:37chsh: /usr/local/bin/zsh: non-standard shellmessage – Yar Jul 01 '16 at 16:26chsh -s /bin/zshemits a password prompt, and the default AWS image gives you a ec2-user with a ssh key (don't know password) I had to dosudo passwd root, then give a new password, thensudo passwd ec2-user, then I could tochsh -s /bin/zshwith the ec2-user's password (you do not need to sudo chsh) – Colin D Sep 05 '19 at 21:22