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/bashhat ' nicht funktioniert? - @DopeGhoti: I ' m auch neugierig, aber ich vermute, dass ' das gleiche Problem haben wird wie mit seinem
-Syntax.
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 -lverursachte eine Gabelbombe. Anscheinendbash -lliest auch.profile. Wenn Sie-lweglassen, funktioniert alles wie erwartet. - Wahrscheinlich, weil Ihnen beide fehlen
~/.bash_profileund~/.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).