Wie starte ich in Bash, wenn ich auf meinen Server starte?


29

Ich habe einen gehosteten Debian-Server. Wenn ich mich über ssh anmelde, werde ich mit einer sh-Umgebung begrüßt. Wie ändere ich es, damit ich in einer Bash-Umgebung anfange?

linux  bash  debian  sh 

1
Keine echte Programmierfrage. In Zukunft sollten Sie Fragen wie diese wahrscheinlich am besten unter Unix / Linux stellen .
Tyler

Antworten:


33

Als normaler Benutzer können Sie Ihre Standardanmeldeshell mit dem chshBefehl ändern . Hier ist ein Beispiel:

chsh -s /bin/bash

Eine andere Möglichkeit ist die Verwendung von usermod als root:

usermod -s /bin/bash username

1
usermod arbeitete wie ein Zauber. Gibt es eine Möglichkeit, die Standardeinstellung auf Bash festzulegen, wenn ich einen neuen Benutzer hinzufüge, oder muss ich den Befehl jedes Mal ausführen?

Wenn Sie es verwenden adduser, sollte es standardmäßig auf bash eingestellt sein. Die Standardeinstellung ist in konfiguriert /etc/adduser.conf. Andernfalls geben Sie die Shell explizit mit an useradd.
Jordan

5

Sie bearbeiten, /etc/passwdwo der letzte Eintrag die Standard-Shell ist. Mach es /bin/bash.

Alternativ können Sie die Systemvorgabe ändern, dass Sie /bin/shnicht bash sind.


1
Yo, was ist los mit der Drive-By-Ablehnung? ZB Ubuntu funktioniert standardmäßig zu /bin/shsein /bin/dash. Und für das, was es wert ist, sind die beiden anderen Antworten identisch und erreichen dasselbe Ziel mit unterschiedlichen Mitteln. Wie auch immer.
Dirk Eddelbuettel

4
Manuelle Bearbeitungen von /etc/passwdwerden dringend empfohlen. Ein Bearbeitungsfehler kann die Anmeldung für alle Benutzer unterbrechen und zur Reparatur ein Wiederherstellungsmedium oder einen Start im Einzelbenutzermodus erforderlich machen. Es gibt Werkzeuge wie zum Beispiel usermodzum Wechseln /etc/passwd.
Jordan

1
Unsinn. Läuft Linux seit '94 hier. Nie gesprengt /etc/passwd.
Dirk Eddelbuettel

2
Schön zu hören, dass Sie sehr vorsichtig waren. Nicht jeder hat. Ein weiterer Hinweis zu Ihrem Update, dessen Start /bin/bashund /bin/shAusführung identisch sind --posix, kann zu unerwünschten Ergebnissen führen.
Jordan

Schauen Sie, ich bin seit 1995 auch ein Debian-Entwickler / Betreuer. Wir hatten Bash als Standard, wir haben aus verschiedenen Gründen auf einfachere Shells umgestellt. Ich habe die /bin/bashganzen Jahre auf allen Maschinen als meine Muschel verwendet. Sie brauchen ein konkreteres Argument.
Dirk Eddelbuettel

2

Sie müssen Ihr Benutzerprofil bearbeiten, dies können Sie direkt durch Bearbeiten der /etc/passwdDatei tun , oder Sie können den usermodBefehl verwenden, um dies für Sie zu tun. Die gesuchte Syntax sieht ungefähr so ​​aus:

usermod -s /bin/bash joeuser

1

Die Standard-System-Shell /bin/shin den letzten Ubuntu-Versionen ist konfiguriert /bin/dash. Durch einfaches Ausführen des folgenden Befehls:

sudo dpkg-reconfigure dash

Sie können es auf den alten Standardwert von zurücksetzen /bin/bash.

Auf diese Weise können Sie den gewünschten Effekt erzielen, bashindem Sie eine interaktive Shell verwenden, ohne die Benutzereinstellungen zu ändern (Nein chshoder usermod). Dies funktioniert für alle Benutzer, für die derzeit die Shell festgelegt ist /bin/sh.

Dies hat nur einen kleinen Nachteil: Die Startzeit von Ubuntu kann sich geringfügig verlängern, da dashweniger Arbeitsspeicher zum Laden und etwas schneller zum Ausführen benötigt wird (kein Wunder, da die Funktionen hier so begrenzt sind). Ich denke jedoch, dass es ziemlich schwierig sein wird, diesen Effekt zu messen, insbesondere für die Hosting-Umgebung.

Außerdem ist es manchmal ärgerlich, Shell-Skripte zu sehen, die nicht ordnungsgemäß funktionieren, da sie einige basherweiterte Funktionen verwenden, die von nicht unterstützt werden dash. Wenn Sie dieses Rezept verwenden, stellen Sie sicher, dass dies nicht geschieht.

Weitere Informationen finden Sie im Ubuntu-Wiki zu diesem Problem .


Sie sollten die Anwendungsfälle auseinanderhalten: /bin/shwird als Interpreter für POSIX-kompatible Shell-Skripte verwendet - es ist nicht unbedingt die beste interaktive Shell. Wenn Sie bashIhre System-Shell sein möchten , sollten Sie Ihre bevorzugte Login-Shell mithilfe von chshoder durch geeignete adduserAufrufe festlegen . using dpkg-reconfigureist eine schlechte Wahl, wenn userA zsh und userB bash haben möchte und beide darauf bestehen, / bin / sh als Standardshell zu haben.
Umläute

Wenn BenutzerA explizit für konfiguriert ist zsh, und BenutzerB für bash, haben sie es. Wenn userC so konfiguriert ist, shwird er haben bash, was ohnehin der aktuelle Ubuntu-Standard für neue Benutzer ist
mvp

sicher, aber Ihre Lösung so etwas wie vorgeschlagen dpkg-reconfigure zshzu Satz zshals / bin / sh und dann dpkg-reconfigure dashauf Set dashals / bin / sh , die Art eines Deadlocks ist; Ich sage hauptsächlich, dass es vorzuziehen ist, die Login-Shell auf die Shell zu setzen, die man verwenden möchte, anstatt durch Rahmen zu gehen, um / bin / sh zu einer guten Login-Shell zu machen.
Umläute

Ich habe nur gesagt, dass dpkg-reconfigure dashdas shdeuten kann bash, anstatt verkrüppelt dash. Alle anderen Shells bleiben erhalten.
MVP

1

Für den Fall, dass Sie versuchen, ein freigegebenes Konto zu verwenden (aus welchem ​​Grund auch immer) und die Standard-Shell nicht ändern können, können Sie ausführen

ssh -t <user@hostname> bash -l

Wenn Sie Ihre Umgebung von einer anderen Shell fernhalten müssen, können Sie diese Shell zuerst ausführen. beispielsweise

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

Das funktioniert ganz gut, aber warum die -lOption?
Nbkhope

@nbkhope es wird sicherstellen, dass die .bashrc für Sie ausgeführt wird.
UKMonkey

0

Weder chshnoch usermodarbeiteten sie für mich, aber ich fand heraus, dass Sie dies durch PuTTY tun können.

Gehe zu Connection > SSHund setze den Remote commandauf bash.

Beachten Sie, dass Sie nicht zu exitIhrer Standard-Shell wechseln können, sondern lediglich die Verbindung trennen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.