Jak rozpocząć bash, gdy ssh'ing na mój serwer?


29

Mam hostowany serwer Debian. Kiedy loguję się przez ssh, wita mnie środowisko sh. Jak to zmienić, aby zacząć w środowisku bash?

linux  bash  debian  sh 

1
Niezupełnie pytanie programistyczne. W przyszłości prawdopodobnie najlepiej zadajesz takie pytania na Unix / Linux .
tylerl

Odpowiedzi:


33

Jako zwykły użytkownik możesz zmienić domyślną powłokę logowania za pomocą chshpolecenia. Oto przykład:

chsh -s /bin/bash

Inną opcją jest użycie usermod jako root:

usermod -s /bin/bash username

1
usermod działał jak urok. Czy jest jakiś sposób na ustawienie domyślnej bash po dodaniu nowego użytkownika, czy też muszę za każdym razem uruchamiać polecenie?

Jeśli używasz adduser, powinien ustawić domyślnie bash. Domyślnie jest skonfigurowany w /etc/adduser.conf. W przeciwnym razie podaj powłokę jawnie za pomocą useradd.
jordanm

5

Edytujesz, /etc/passwdgdzie ostatni wpis jest domyślną powłoką. Zrób to /bin/bash.

Alternatywnie, możesz zmienić, zmienić domyślne ustawienie systemowe, aby /bin/shnie być bash.


1
Yo, o co chodzi z przegłosowaniem drive-by? Na przykład Ubuntu domyślnie /bin/shjest /bin/dash. A dla tego, co jest warte, pozostałe dwie odpowiedzi są identyczne i osiągają ten sam cel na różne sposoby. Cokolwiek.
Dirk Eddelbuettel

4
Ręczne edytowanie /etc/passwdjest bardzo odradzane. Błąd edycji może zepsuć loginy wszystkim użytkownikom, wymagając naprawy nośnika odzyskiwania lub rozruchu w trybie pojedynczego użytkownika. Istnieją narzędzia takie jak usermodzmiana /etc/passwd.
jordanm

1
Nonsens. Działa tutaj Linux od '94. Nigdy nie odpadł /etc/passwd.
Dirk Eddelbuettel

2
Dobrze słyszeć, że byłeś bardzo ostrożny. Nie każdy ma. Kolejna uwaga na temat twojej aktualizacji, uruchamiająca się /bin/bashtak /bin/shsamo jak jej uruchomienie --posix, co może mieć niepożądane skutki.
jordanm

Słuchaj, jestem programistą / opiekunem Debiana od 1995 roku. Kiedyś domyślnie używaliśmy bash, z różnych powodów przeszliśmy na prostsze powłoki. I zostały z wykorzystaniem /bin/bashjako swojej skorupy te wszystkie lata na wszystkich maszynach. Potrzebujesz bardziej konkretnego argumentu.
Dirk Eddelbuettel

2

Musisz edytować swój profil użytkownika, możesz to zrobić bezpośrednio, edytując /etc/passwdplik lub możesz użyć usermodpolecenia, aby zrobić to za Ciebie. Składnia, której szukasz, wygląda mniej więcej tak:

usermod -s /bin/bash joeuser

1

Domyślna powłoka systemowa /bin/shw najnowszych wydaniach Ubuntu jest skonfigurowana tak, aby była /bin/dash. Po prostu uruchamiając następujące polecenie:

sudo dpkg-reconfigure dash

możesz zmienić to z powrotem na stare domyślne /bin/bash.

Dzięki temu możesz osiągnąć pożądany efekt posiadania bashinteraktywnej powłoki bez zmiany jakichkolwiek ustawień użytkownika (nie chshlub usermod), i będzie działać dla wszystkich użytkowników, którzy aktualnie ustawili powłokę na /bin/sh.

Jest tylko jedna mała wada: czas uruchamiania Ubuntu może się nieznacznie wydłużyć, ponieważ dashwymaga mniejszej ilości pamięci do załadowania i nieco szybszej pracy (nic dziwnego - jest tak ograniczony pod względem funkcji). Myślę jednak, że trudno będzie zmierzyć ten efekt, szczególnie w środowisku hostingowym.

Czasami denerwujące jest także wyświetlanie skryptów powłoki, które nie działają poprawnie, ponieważ używają niektórych bashzaawansowanych funkcji, które nie są obsługiwane przez dash. Korzystanie z tego przepisu sprawi, że tak się nie stanie.

Aby uzyskać więcej informacji, zobacz wiki Ubuntu na ten temat .


powinieneś rozdzielić przypadki użycia: /bin/shjest używany jako interpreter skryptów powłoki kompatybilnych z POSIX - niekoniecznie najlepsza powłoka interaktywna; jeśli chcesz bashbyć powłoką systemową, powinieneś ustawić preferowaną powłokę logowania za pomocą chshlub odpowiednich adduserwywołań. użycie dpkg-reconfigurejest złym wyborem, jeśli użytkownik A chce zsh, a użytkownik B chce bash i obaj nalegają na ustawienie / bin / sh jako domyślnej powłoki.
umläute

jeśli użytkownik A jest wyraźnie skonfigurowany zsh, a użytkownik B bashbędzie go miał. Jeśli userC jest skonfigurowany sh, będzie miał bash, co i tak jest aktualnym domyślnym Ubuntu dla nowych użytkowników
mvp

Jasne, ale rozwiązanie zaproponował coś podobnego dpkg-reconfigure zshdo zestawu zshjako / bin / sh, a następnie dpkg-reconfigure dashdo zestawu dashjak / bin / sh, który jest swego rodzaju impasu; mówię głównie, że lepiej ustawić powłokę logowania na powłokę, której chcemy używać, niż przechodzić przez obręcze, aby uczynić / bin / sh dobrą powłoką logowania.
umläute

Powiedziałem tylko, że dpkg-reconfigure dashmoże to shwskazywać bash, a nie okaleczyć dash. Wszystkie pozostałe pociski pozostaną nienaruszone.
mvp

1

W przypadku, gdy próbujesz użyć konta współdzielonego (z dowolnego powodu) i nie możesz zmienić domyślnej powłoki, możesz uruchomić

ssh -t <user@hostname> bash -l

Jeśli chcesz uchronić swoje środowisko przed jakąś inną powłoką, możesz najpierw uruchomić tę powłokę; na przykład

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

To działa całkiem dobrze, ale dlaczego ta -lopcja?
nbkhope

@nbkhope zapewni, że plik .bashrc zostanie uruchomiony dla Ciebie.
UKMonkey,

0

Ani dla mnie, chshani usermodnie pracowałem, ale odkryłem, że możesz to zrobić za pomocą PuTTY.

Idź do Connection > SSHi ustawić Remote commandsię bash.

Zauważ, że nie będziesz w stanie exitustawić domyślnej powłoki, po prostu zamknie połączenie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.