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.