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.
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. Anscheinendbash -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).