Shell für SSH-Sitzung angeben

Ich melde mich über ssh als Benutzer www-data bei einem Remote-Server an. Benutzer www-data auf dem Server hat seine Standard-Shell auf /bin/sh gesetzt. Wenn ich mich anmelde, wird ein Strich als Shell angezeigt. Ich kann dann bash eingeben und die bash Shell erhalten.

Ich möchte mich direkt bei bash anmelden, wenn Ich ssh in. Aber ich möchte die Standard-Shell auf dem Server nicht ändern. Ich möchte, dass meine Änderung nur die ssh-Sitzung betrifft.

Ich habe versucht, command="/bin/bash" vor meinem öffentlichen Schlüssel in .ssh/authorized_keys, aber dies hat einen weiteren Nebeneffekt: Während bash beim Anmelden als Standard-Shell fungiert, scp funktioniert nicht mehr. Ich kann keine Dateien mehr zum oder vom Remore-Server scp.

Wie kann ich bash als Standard-Shell für SSH-Sitzungen, ohne andere Anwendungen zu beschädigen?

Kommentare

  • ssh [email protected] /bin/bash hat ' nicht funktioniert?
  • @DopeGhoti: I ' m auch neugierig, aber ich vermute, dass ' das gleiche Problem haben wird wie mit seinem

-Syntax.

  • Ich bezweifle dies, da die Angabe in der ssh -Befehlszeile keine Auswirkungen auf scp.
  • Antwort

    Ich habe ein ähnliches Problem auf einem System Ich verwende (Standard-Shell ist bash, ich möchte ksh93 und chsh nicht Arbeit).

    Meine an Ihre Situation angepasste Lösung besteht darin, exec die gewünschte Shell von ~/.profile zu verwenden Dash liest beim Start. Bash berührt ~/.profile nur, wenn er ~/.bash_profile oder ~/.bash_login (in Diese Reihenfolge finden Sie im Bash-Handbuch.

    # 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 setzt SSH_TTY in interaktiven SSH-Sitzungen, also wir “ Überprüfen Sie erneut, ob dies festgelegt ist (nicht leere Zeichenfolge), bevor Sie sicherstellen, dass Bash verfügbar ist, und es ausführen. Ich setze und exportiere SHELL, falls eine andere Anwendung es betrachtet, und um zu vermeiden, dass Bash in eine Endlosschleife gerät, weil beide ~/.bash_profile und ~/.bash_login und versuchen daher, ~/.profile erneut auszuführen.

    Kommentare

    • Danke. Mit einer wichtigen Änderung funktioniert Ihr vorgeschlagener Ansatz. Das Ausführen von $SHELL -l verursachte eine Gabelbombe. Anscheinend bash -l liest auch .profile. Wenn Sie -l weglassen, funktioniert alles wie erwartet.
    • Wahrscheinlich, weil Ihnen beide fehlen ~/.bash_profile und ~/.bash_login?
    • Siehe meine Bearbeitung meiner Antwort, wodurch die if -Anweisung schlägt fehl, wenn ' Bash bereits ausführt (nicht sicher, ob dies wirklich erforderlich ist, da stattdessen die anderen Init-Dateien abgerufen werden sollten).

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.