Loguję się na zdalny serwer przez ssh jako użytkownik www-data
. Użytkownik www-data
na serwerze ma domyślną powłokę ustawioną na /bin/sh
, a kiedy się loguję, jako moja powłoka pojawia się myślnik. Mogę wtedy wpisać bash
i uzyskać bash
shell.
Chciałbym zalogować się bezpośrednio do basha, kiedy Włączam ssh. Ale nie chcę zmieniać domyślnej powłoki na serwerze. Chcę, aby moja zmiana wpłynęła tylko na sesję ssh.
Próbowałem wstawić command="/bin/bash"
przed moim kluczem publicznym w .ssh/authorized_keys
, ale ma to inny efekt uboczny: podczas gdy bash działa jako domyślna powłoka podczas logowania, scp
przestał działać. Nie mogę już przesyłać plików scp do lub z serwera remore.
Jak ustawić bash
jako domyślna powłoka dla sesji ssh, bez przerywania pracy innych aplikacji?
Komentarze
składnia.
ssh
linii poleceń nie powinno mieć żadnego wpływu na scp
. Odpowiedź
Mam podobny problem w jednym systemie Używam (domyślna powłoka to bash
, chcę ksh93
i chsh
nie „t pracy).
Moje rozwiązanie, dostosowane do Twojej sytuacji, polega na exec
żądanej powłoce z ~/.profile
, co Dash czyta podczas uruchamiania. Bash nie „t dotyka ~/.profile
, chyba że nie znajduje ~/.bash_profile
ani ~/.bash_login
(w w tej kolejności, zobacz instrukcję Bash).
# in ~/.profile: if [ "$SHELL" != "/usr/bin/bash" -a -n "$SSH_TTY" -a -x /usr/bin/bash ]; then export SHELL="/usr/bin/bash" exec $SHELL -l fi
SSH ustawia SSH_TTY
w interaktywnych sesjach SSH, więc „ ponownie sprawdzam, czy to jest ustawione (niepusty ciąg) przed upewnieniem się, że Bash jest dostępny i wykonaniem go. Ustawiam i eksportuję SHELL
na wypadek, gdyby jakakolwiek inna aplikacja na to spojrzała, i aby uniknąć uruchomienia Bash w nieskończonej pętli z powodu braku obu ~/.bash_profile
i ~/.bash_login
i tym samym próbują ponownie wykonać ~/.profile
.
Komentarze
- dziękuję. Po jednej ważnej modyfikacji sugerowane podejście działa. Wykonanie
$SHELL -l
spowodowało wybuch widelca. Najwyraźniejbash -l
czyta również.profile
. Pomijając-l
, wszystko działa zgodnie z oczekiwaniami. - Prawdopodobnie dlatego, że brakuje ci obu
~/.bash_profile
i~/.bash_login
? - Zobacz moją edycję mojej odpowiedzi, co powoduje, że
if
kończy się niepowodzeniem, jeśli ' już uruchomiliśmy Bash. (nie jestem pewien, czy jest to naprawdę wymagane, ponieważ zamiast tego powinien pobrać inne pliki init).
ssh [email protected] /bin/bash
nie ' nie działa?