GNU/Linux >> Linux Esercitazione >  >> Linux

L'esecuzione del comando SSH si blocca, sebbene la shell interattiva funzioni correttamente

Abbiamo risolto questo problema aggiungendo l'aggiunta di -n (per reindirizzare std da /dev/null) e -t (forza l'allocazione pseudo-tty)

Esempio:

ssh -t -n [email protected] command

Il problema era davvero il mio script di accesso, anche se non aveva a che fare con la richiesta di un terminale (l'avevo sospettato e testato con -t e -T opzioni). Il problema era che il mio .bashrc stava eseguendo un exec (in questo caso a zsh - perché il nostro sistema non consente chsh a zsh ).

La riga incriminata:

test -f /usr/bin/zsh && exec /usr/bin/zsh

Risolto controllando prima la shell interattiva e uscendo in tal caso:

[ -z "$PS1" ] && return
test -f /usr/bin/zsh && exec /usr/bin/zsh

Quindi, essenzialmente, perché la shell era in esecuzione in zsh , ssh stava aspettando che finisse, cosa che non è mai accaduta.

Sono un po' confuso sul perché il mio .bashrc veniva chiamato - pensavo fosse solo per shell interattive, ma lo scopo esatto e l'ordine dei vari script di init è qualcosa che non credo che imparerò mai.

Spero che questo possa essere utile ad altri che hanno una sorta di exec nei loro script di avvio.

A proposito, le altre due risposte erano sulla strada giusta, quindi non ero completamente sicuro se avrei dovuto "rispondere" o semplicemente commentare le loro risposte. Se rispondere alla mia stessa domanda è moralmente sbagliato su StackOverflow, fammelo sapere e farò penitenza. Grazie agli altri risponditori.


Linux
  1. Esempi di comandi chsh in Linux

  2. Passaggio di variabili nel comando ssh remoto

  3. Il comando openssl si blocca

  4. Consentire l'esecuzione automatica dei comandi come root su Linux utilizzando SSH

  5. Bypassare il comando/script specificato in /etc/passwd

Comando SSH

Comando sorgente in Linux

Shell dei comandi

Spiegazione del comando sorgente su Linux

Come eseguire un comando in uno script della shell?

parted:comando non trovato