określ powłokę dla sesji ssh

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

  • ssh [email protected] /bin/bash nie ' nie działa?
  • @DopeGhoti: I ' m również ciekawy, ale podejrzewam, że ' będzie miał ten sam problem co z jego

składnia.

  • Wątpię, ponieważ podanie jej w 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źniej bash -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).

    Dodaj komentarz

    Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *