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 -lspowodowało wybuch widelca. Najwyraźniejbash -lczyta również.profile. Pomijając-l, wszystko działa zgodnie z oczekiwaniami. - Prawdopodobnie dlatego, że brakuje ci obu
~/.bash_profilei~/.bash_login? - Zobacz moją edycję mojej odpowiedzi, co powoduje, że
ifkoń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/bashnie ' nie działa?