サーバーにsshするときにbashで開始するにはどうすればよいですか?


29

ホストされたDebianサーバーがあります。ssh経由でログインすると、sh環境が表示されます。bash環境で起動するように変更するにはどうすればよいですか?

linux  bash  debian  sh 

1
実際にはプログラミングの質問ではありません。将来的には、おそらくUnix / Linuxでこのような質問をするのが一番いいでしょう。
タイラー

回答:


34

通常のユーザーとして、chshコマンドを使用してデフォルトのログインシェルを変更できます。以下に例を示します。

chsh -s /bin/bash

別のオプションは、usermodをルートとして使用することです。

usermod -s /bin/bash username

1
usermodは魅力のように機能しました。新しいユーザーを追加するときにデフォルトにbashに設定する方法はありますか、または毎回コマンドを実行する必要がありますか?

を使用する場合adduser、デフォルトでbashに設定する必要があります。デフォルトはで設定されてい/etc/adduser.confます。それ以外の場合は、で明示的にシェルを指定しuseraddます。
ヨルダン

5

/etc/passwd最後のエントリがデフォルトのシェルである場所を編集します。それを作ります/bin/bash

または、/bin/shbash ではないというシステムのデフォルトを変更することもできます。


1
よ、ドライブバイdownvoteの調子はどう?たとえば、Ubuntuはデフォルトでに/bin/shなり/bin/dashます。そして、他の2つの答えの価値は同じであり、異なる手段で同じ目的を達成します。なんでも。
ダークエデルビュッテル

4
の手動編集/etc/passwdは非常に推奨されません。編集ミスがあると、すべてのユーザーのログインが切断され、修復するためにリカバリメディアまたはシングルユーザーモードで起動する必要があります。usermod変更するなどのツールがあります/etc/passwd
ヨルダン

1
ナンセンス。ここで'94以降のLinuxを実行しています。決して逮捕されない/etc/passwd
ダークエデルビュッテル

2
あなたが非常に注意していると聞いて良い。誰もが持っているわけではありません。更新に関する別の注意点/bin/bashとして起動/bin/shすると--posix、で実行するのと同じで、望ましくない結果になる可能性があります。
ヨルダン

1995年以来、私もDebianの開発者/メンテナーです。以前はbashをデフォルトとして使用していましたが、さまざまな理由でより単純なシェルに切り替えました。私は/bin/bashすべてのマシンでこれらの年月をシェルとして使用してきました。もっと具体的な議論が必要です。
ダークエデルビュッテル

2

ユーザープロファイルを編集する必要があり/etc/passwdます。ファイルを編集して直接これusermodを行うか、コマンドを使用してそれを行うことができます。探している構文は次のようになります。

usermod -s /bin/bash joeuser

1

/bin/sh最近のUbuntuリリースのデフォルトのシステムシェルはに設定されています/bin/dash。次のコマンドを実行するだけです:

sudo dpkg-reconfigure dash

古いデフォルトのに戻すことができます/bin/bash

これにより、bashユーザー設定(no chshまたはusermod)を変更せずに対話型シェルとしての効果を得ることができ、現在シェルがに設定されているすべてのユーザーに対して機能し/bin/shます。

これには小さな欠点が1つだけあります。Ubuntuの起動時間がわずかに長くなる可能性dashがあります。これは、ロードするメモリが少なく、実行がわずかに速いためです(当然、機能が限られています)。しかし、特にホスティング環境では、この効果を測定するのはかなり難しいと思います。

また、でbashサポートされていないいくつかの高度な機能を使用しているため、適切に動作しないシェルスクリプトが表示されるのは面倒ですdash。このレシピを使用すると、これが起こらないようになります。

詳細については、この問題に関するUbuntu wikiを参照してください。


ユースケースを区別しておく必要があります/bin/sh。POSIX互換のシェルスクリプトのインタープリターとして使用されます。必ずしも最良のインタラクティブシェルではありません。bashシステムシェルになりたい場合はchsh、適切なadduser呼び出しを使用して優先ログインシェルを設定する必要があります。dpkg-reconfigureuserAがzshを望み、userBがbashを望み、両方がデフォルトのシェルとして/ bin / shを必要とする場合、using は悪い選択です。
ウムラウト

userAがに明示的に設定されzsh、userBがbashそれを持っている場合。userCがに設定されている場合sh、彼はを持っていますbash。これは、とにかく新しいユーザーの現在のUbuntuのデフォルトです
-mvp

確かに、あなたのソリューションは/ bin / sh として設定し、次にデッドロックのような/ bin / shとしてdpkg-reconfigure zsh設定するようなものを提案しました。私は主に、/ bin / shを適切なログインシェルにするためにフープを通過するよりも、使用したいシェルにログインシェルを設定することが望ましいと言っています。zshdpkg-reconfigure dashdash
ウムラウト

私は、それdpkg-reconfigure dashが不具shになるのbashではなく、それを指摘できるとだけ言ったdash。他のシェルはすべてそのまま残ります。
mvp

1

(何らかの理由で)共有アカウントを使用しようとしていて、デフォルトのシェルを変更できない場合は、次を実行できます。

ssh -t <user@hostname> bash -l

他のシェルから環境を維持する必要がある場合は、最初にそのシェルを実行できます。例えば

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

それはかなりうまくいき-lますが、なぜオプションなのですか?
nbkhope

@nbkhopeは、.bashrcが実行されることを保証します。
UKMonkey

0

どちらchshusermod私のために働いていないが、私はあなたがパテを介してこれを行うことがわかりました。

に移動しConnection > SSH、に設定Remote commandbashます。

exitデフォルトのシェルにアクセスすることはできず、接続を閉じるだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.