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.