Perché SSH si blocca alla fine di questi comandi e come posso farlo uscire?


10

Corro questo:

ssh -t -vvv -i ~/.ssh/druid-keypair -o StrictHostKeyChecking=no ubuntu@${INSTANCE_ADDRESS} <<EOI

# Setup Oracle Java
...

# Install dependencies - mysql must be built from source, as the 12.04 apt-get hangs
export DEBIAN_FRONTEND=noninteractive
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password diurd'
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password diurd'
sudo apt-get -q -y -V --force-yes --reinstall install mysql-server-5.5

echo "ALL DONE with druid environment setup!"
exit
EOI

Nota: ho provato con e senza -t in ssh.

L'output di debug da -vvv è questo:

...
ldconfig deferred processing now taking place
ALL DONE with druid environment setup!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0

E poi il processo rimane lì per sempre. Perché il comando ssh non termina? Ho provato con -t e senza, e ho provato con l'uscita e senza. Non fa differenza :(

Aggiornamento: quando digito 'jobs' alla fine dello script, vedo:

JOBS:
[1]-  Running                 nohup bin/zookeeper-server-start.sh config/zookeeper.properties 2>&1 > /dev/null &
[2]+  Running                 nohup bin/kafka-server-start.sh config/server.properties 2>&1 > /dev/null &

Come posso eseguire questi servizi e avere ancora una sessione SSH che termina?

Aggiornamento: ora ho rinnegato manualmente questi processi. La cosa non esce ancora. Compagno WTF?

Aggiornamento: quando si esegue riga per riga, due comandi non tornano alla shell senza premere CR:

nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &

Prova a usare -q (modalità silenziosa) invece di -vvv (modalità dettagliata).
— settembre

nessun effetto. -vvv era solo per il debug.
— rjurney,

SSH sul server ed esegui tutti questi comandi uno per uno per capire il motivo del blocco.
— settembre

1
Questo è il punto - nessuno di loro pende! Funziona bene in console.
— rjurney,

Funziona se si sostituisce il contenuto del blocco << EOI con qualcosa come "echo 1"?
— ed.

Risposte:


22

In genere, le sessioni del terminale SSH si bloccano se sono ancora aperte connessioni in background. Per connessioni in background, intendo cose come:

  • Inoltro finestra X11
  • STDOUT e STDERR

Dai un'occhiata alle connessioni ancora attive sulla tua sessione SSH sospesa digitando il ~#tuo terminale SSH sospeso.

È possibile che la tua sceneggiatura stia aprendo sessioni che non hai realizzato. O le configurazioni del terminale della macchina remota come .profile(o .bashrc, ecc.) Potrebbero contenere qualcosa che stabilisce una sessione. Buona fortuna a caccia!

A proposito, alcune delle altre sequenze di escape offerte dai client OpenSSH possono anche essere utili:

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Un'altra cosa, se vuoi che il tuo SSH esegua semplicemente i tuoi comandi ed esca immediatamente - cioè, non vuoi una sessione terminale remota - puoi usare l' -fopzione per ssh. Ciò costringerà la connessione SSH a essere un lavoro in background.


3
Sono aperte le seguenti connessioni: # 0 client-session (t4 r0 i0 / 0 o0 / 0 fd 5/6 cc -1) Questo è quello che ottengo. Questo significa qualcosa?
— moleculezz,

-fper me va bene.
— Jingguo Yao,

Ho sentito di -n per lo stesso scopo ma non ha funzionato per me!
— Kostas,

Un processo in background conta come background connectione può uno disownil processo in background in modo che la connessione SSH non si blocchi?
— the_prole
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.