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.