GNU/Linux >> Znalost Linux >  >> Linux

Spuštění příkazu SSH se zablokuje, ačkoli interaktivní shell funguje dobře

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.


Linux
  1. Jak se analyzují argumenty vzdáleného příkazového řádku Ssh?

  2. Skript Shell visí na příkazu Mail?

  3. Funkce v proměnných Shell?

  1. Procesy v relaci v interaktivním prostředí versus ve skriptu?

  2. Jak používat funkce shellu příkazového řádku v Linuxu

  3. Příklady příkazů chsh v Linuxu

  1. Předávání proměnných ve vzdáleném příkazu ssh

  2. SSH - Jak zahrnout příkaz -t do souboru ~/.ssh/config

  3. Příkaz RPM se zablokuje