GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Die SSH-Befehlsausführung hängt, obwohl die interaktive Shell einwandfrei funktioniert

Wir haben dies behoben, indem wir -n (um std von /dev/null umzuleiten) und -t (Pseudo-tty-Zuweisung erzwingen) hinzugefügt haben

Beispiel:

ssh -t -n [email protected] command

Das Problem war in der Tat mein Anmeldeskript, obwohl es nichts mit der Anforderung eines Terminals zu tun hatte (das hatte ich vermutet und mit dem -t getestet und -T Optionen). Das Problem war, dass meine .bashrc lief ein exec (in diesem Fall zu zsh - weil unser System chsh nicht zulässt bis zsh ).

Die anstößige Zeile:

test -f /usr/bin/zsh && exec /usr/bin/zsh

Gelöst, indem zuerst nach interaktiver Shell gesucht und wenn ja beendet wird:

[ -z "$PS1" ] && return
test -f /usr/bin/zsh && exec /usr/bin/zsh

Also im Wesentlichen, weil die Shell in zsh ausgeführt wurde , ssh habe darauf gewartet, dass dies beendet wird - was nie passiert ist.

Ich bin etwas verwirrt, warum mein .bashrc überhaupt aufgerufen wurde - ich dachte, das wäre nur für interaktive Shells, aber den genauen Zweck und die Reihenfolge der verschiedenen Init-Skripte werde ich wohl nie erfahren.

Ich hoffe, dass dies für andere nützlich sein kann, die eine Art exec haben in ihren Startskripten.

Übrigens - die anderen beiden Antworten waren auf dem richtigen Weg, daher war ich mir völlig unsicher, ob ich "antworten" oder nur ihre Antworten kommentieren sollte. Wenn die Beantwortung meiner eigenen Frage bei Stackoverflow moralisch falsch ist, lassen Sie es mich wissen und ich werde Buße tun. Vielen Dank an die anderen Antwortenden.


Linux
  1. Wie werden Ssh-Remote-Befehlszeilenargumente analysiert?

  2. Erlauben der automatischen Befehlsausführung als root unter Linux mit SSH

  3. Umgehen des in /etc/passwd angegebenen Befehls/Skripts

  4. SCP zulassen, aber keine tatsächliche Anmeldung mit SSH

  5. RPM-Befehl hängt

SSH-Befehl

Quellbefehl unter Linux

Kommando-Shell

Quellbefehl unter Linux erklärt

Wie führe ich einen Befehl in einem Shell-Skript aus?

parted:Befehl nicht gefunden