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.