Opravili jsme to přidáním -n (pro přesměrování std z /dev/null) a -t (vynutit alokaci pseudo-tty)
Příklad:
ssh -t -n [email protected] command
Problém byl skutečně můj přihlašovací skript, i když to nesouviselo s vyžadováním terminálu (tušil jsem to a testoval jsem pomocí -t a -T možnosti). Problém byl v tom, že můj .bashrc provozoval exec (v tomto případě na zsh - protože náš systém neumožňuje chsh na zsh ).
Urážlivý řádek:
test -f /usr/bin/zsh && exec /usr/bin/zsh
Vyřešeno nejprve kontrolou interaktivního shellu a ukončením, pokud ano:
[ -z "$PS1" ] && return
test -f /usr/bin/zsh && exec /usr/bin/zsh
Takže v podstatě proto, že shell se spouštěl do zsh , ssh čekal, až to skončí – což se nikdy nestalo.
Jsem trochu zmatený, proč můj .bashrc byl vůbec volán - myslel jsem, že je to jen pro interaktivní shelly, ale přesný účel a pořadí různých init skriptů je něco, co se, myslím, nikdy nenaučím.
Doufám, že to může být užitečné pro ostatní, kteří mají nějaký typ exec v jejich spouštěcích skriptech.
BTW - další dvě odpovědi byly na správné cestě, takže jsem si nebyl úplně jistý, jestli mám 'odpovědět' nebo jen komentovat jejich odpovědi. Pokud je odpověď na mou vlastní otázku na stackoverflow morálně špatná, dejte mi vědět a udělám pokání. Děkuji ostatním odpovědným.