I have a hosted Debian server. When I log in via ssh, I'm greeted with a sh environment. How do I change it so I start in a bash environment?
6 Answers
As a regular user, you can change your default login shell using the chsh
command. Here is an example:
chsh -s /bin/bash
Another option is to use usermod as root:
usermod -s /bin/bash username
-
2usermod worked like a charm. Is there some way to set it to default to bash when I add a new user, or do I have to run the command each time?– bbbgscottFeb 5, 2013 at 5:34
-
If you use
adduser
, it should set it to bash by default. The default is configured in/etc/adduser.conf
. Otherwise specify the shell explicitly withuseradd
.– jordanmFeb 5, 2013 at 5:42
For the case where you're trying to use a shared account (for whatever reason) and can't change the default shell, then you can run
ssh -t <user@hostname> bash -l
If you need to keep your environment from some other shell, then you can run that shell first; for example
ssh -t <user@hostname> ksh -c bash -l
-
-
-
In case you need to log into a windows machine, you can use:
ssh -2 -t <user@hostname> "powershell"
. PS. The-l
(as asked above) is for login-shell in linux. Apr 29, 2020 at 22:30
You edit /etc/passwd
where the last entry is the default shell. Make it /bin/bash
.
Alternatively, you could alter alter the system default of /bin/sh
not being bash.
-
1Yo, what's up with the drive-by downvote? Eg Ubuntu does default to
/bin/sh
being/bin/dash
. And for what it is worth the other two answers are identical and achive the same end by different means. Whatever. Feb 5, 2013 at 5:03 -
4Manual edits of
/etc/passwd
are highly discouraged. An editing mistake can break logins for all users, requiring recovery media or a boot to single user mode to repair. There are tools such asusermod
for changing/etc/passwd
.– jordanmFeb 5, 2013 at 5:04 -
1Nonsense. Running Linux since '94 here. Never busted
/etc/passwd
. Feb 5, 2013 at 5:04 -
2Good to hear you have been very careful. Not everyone has. Another note on your update, launching
/bin/bash
as/bin/sh
is the same as executing it with--posix
, which may have undesirable results.– jordanmFeb 5, 2013 at 5:06 -
Look, I've been a Debian developer/maintainer since 1995 too. We used to have bash as a default, we switched to simpler shells for a variety of reason. I have been using
/bin/bash
as my shell all those years on all machines. You need a more concrete argument. Feb 5, 2013 at 5:08
You need to edit your user profile, you can do this directly by editing the /etc/passwd
file, or you can use the usermod
command to do it for you. The syntax you're looking for looks something like this:
usermod -s /bin/bash joeuser
Default system shell /bin/sh
in recent Ubuntu releases is configured to be /bin/dash
. By simply running following command:
sudo dpkg-reconfigure dash
you can change it back to old default of /bin/bash
.
With this, you can achieve desired effect of having bash
as interactive shell without changing any user settings (no chsh
or usermod
), and it will work for all users who currently have shell set to /bin/sh
.
There is only one small downside to this: Ubuntu boot time might slightly increase, because dash
takes less memory to load and slightly faster to run (no wonder - it is so limited in features). But I think it will be rather difficult to measure this effect, especially for hosting environment.
Also, it is sometimes annoying to see shell scripts that fail to work properly because they use some bash
advanced features which are not supported by dash
. Using this recipe will make sure this will not happen.
For more information, see Ubuntu wiki about this issue.
-
you should keep the use cases apart:
/bin/sh
is used as the interpreter for POSIX compatible shell scripts - it's not necessarily the best interactive shell; if you wantbash
to be your system shell, you should set your preferred login shell usingchsh
or properadduser
calls. usingdpkg-reconfigure
is a bad choice if userA wants zsh and userB wants bash and both insist in having /bin/sh as their default shell.– umläuteFeb 5, 2013 at 12:49 -
if userA is explicitly configured to
zsh
, and userB tobash
they will have it. If userC configured tosh
, he will havebash
, which is current Ubuntu default for new users anyway– mvpFeb 5, 2013 at 17:41 -
sure, but your solution suggested something like
dpkg-reconfigure zsh
to setzsh
as /bin/sh, and thendpkg-reconfigure dash
to setdash
as /bin/sh which is kind of a deadlock; i'm mainly saying that it is preferrably to set the login shell to the shell one wants to use rather than going through hoops to make /bin/sh a good login shell.– umläuteFeb 5, 2013 at 19:46 -
I only said that
dpkg-reconfigure dash
can makesh
point tobash
, rather than crippleddash
. All other shells will be still intact.– mvpFeb 5, 2013 at 21:09
Neither chsh
or usermod
were working for me, but I found that you can do this through PuTTY.
Go to Connection > SSH
and set the Remote command
to bash
.
Note that you won't be able to exit
to your default shell, it will just close the connection.