SSH进入服务器时,如何从bash开始?


29

我有一台托管的Debian服务器。当我通过ssh登录时,我遇到了sh环境。如何更改它以便在bash环境中启动?

linux  bash  debian  sh 

1
并不是真正的编程问题。将来,您最好在Unix / Linux上问这样的问题。
tylerl

Answers:


33

作为普通用户,您可以使用以下chsh命令更改默认的登录Shell 。这是一个例子:

chsh -s /bin/bash

另一个选择是使用usermod作为root:

usermod -s /bin/bash username

1
usermod就像一个魅力。添加新用户时,是否可以通过某种方式将其默认设置为bash,还是必须每次都运行命令?

如果使用adduser,则默认情况下应将其设置为bash。默认设置为中/etc/adduser.conf。否则,使用显式指定外壳useradd
jordanm

5

您编辑/etc/passwd最后一个条目是默认外壳的位置。做吧/bin/bash

另外,您可以更改系统默认值,即/bin/sh不进行bash操作。


1
哟,行车顺风车怎么了?例如Ubuntu的不默认为/bin/sh/bin/dash。值得的是,其他两个答案是相同的,并且通过不同的方式达到了相同的目的。随你。
Dirk Eddelbuettel

4
/etc/passwd不建议手动编辑。编辑错误可能会中断所有用户的登录,从而需要恢复媒体或引导至单用户模式进行修复。有诸如usermod更改之类的工具/etc/passwd
jordanm

1
废话。从94年开始运行Linux。永不破灭/etc/passwd
Dirk Eddelbuettel

2
很高兴得知您已经非常小心。并非所有人都有。您的更新另注,开展/bin/bash/bin/sh相同与执行它--posix,这可能有不良后果。
jordanm

自1995年以来,我也一直是Debian开发人员/维护人员。我们以前将bash作为默认设置,出于各种原因,我们切换到了更简单的shell。/bin/bash这些年来,我一直在所有机器上使用shell作为我的外壳。您需要一个更具体的论据。
Dirk Eddelbuettel

2

您需要编辑用户配置文件,可以通过编辑/etc/passwd文件直接执行此操作,也可以使用usermod命令为您执行此操作。您要查找的语法如下所示:

usermod -s /bin/bash joeuser

1

/bin/sh最新Ubuntu版本中的默认系统外壳配置为/bin/dash。通过简单地运行以下命令:

sudo dpkg-reconfigure dash

您可以将其更改回旧的默认设置/bin/bash

这样,您可以在bash不更改任何用户设置(no chshusermod)的情况下获得具有交互式shell的预期效果,并且它将对当前将shell设置为的所有用户有效/bin/sh

这只有一个小缺点:Ubuntu引导时间可能会略有增加,因为dash加载所需的内存更少且运行速度稍快(难怪-功能如此有限)。但是我认为要衡量这种影响会相当困难,尤其是对于托管环境。

另外,有时看到令人烦恼的Shell脚本无法正常工作,因为它们使用了某些bash不支持的高级功能dash。使用此配方将确保不会发生这种情况。

有关更多信息,请参见Ubuntu Wiki关于此问题


您应该分开用例:/bin/sh用作POSIX兼容shell脚本的解释器-它不一定是最好的交互式shell;如果要bash成为系统外壳,则应使用chsh或适当的adduser调用来设置首选的登录外壳。dpkg-reconfigure如果userA需要zsh而userB需要bash并且都坚持将/ bin / sh作为其默认shell,则使用是一个不好的选择。
umläute

如果将userA显式配置为zshbash则将userB 拥有。如果userC配置为sh,则他将拥有bash,这仍然是新用户当前的Ubuntu默认设置
mvp

是的,但是您的解决方案建议dpkg-reconfigure zsh先设置zsh为/ bin / sh,然后再dpkg-reconfigure dash设置dash为/ bin / sh,这有点像死锁;我主要是说最好将登录shell设置为要使用的shell,而不是通过箍使/ bin / sh成为一个好的登录shell。
umläute

我只说dpkg-reconfigure dash可以sh指出bash,而不是残废dash。所有其他外壳将保持不变。
mvp

1

对于尝试使用共享帐户(无论出于何种原因)而无法更改默认外壳的情况,则可以运行

ssh -t <user@hostname> bash -l

如果您需要将环境与其他Shell隔离,则可以先运行该Shell;例如

ssh -t <user@hostname> ksh -c bash -l

效果很好,但是为什么要-l选择呢?
nbkhope

@nbkhope它将确保为您运行.bashrc。
UKMonkey

0

无论chsh或者usermod是为我工作,但我发现,您可以通过腻子做到这一点。

转到Connection > SSH并将设置Remote commandbash

请注意,您将无法使用exit默认的Shell,它将关闭连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.