Yo corro esto:
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: He intentado con y sin -t en ssh.
La salida de depuración de -vvv es esta:
...
ldconfig deferred processing now taking place
ALL DONE with druid environment setup!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
Y luego el proceso se queda allí para siempre. ¿Por qué no termina el comando ssh? He intentado con -t y sin, y he intentado con la salida y sin. No hace la diferencia :(
Actualización: cuando escribo 'jobs' al final del script, veo:
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 &
¿Cómo puedo ejecutar estos servicios y aún tener una sesión ssh que finaliza?
Actualización: ahora desconozco manualmente estos procesos. La cosa aún no sale. WTF compañero?
Actualización: Al ejecutar línea por línea, dos comandos no regresan al shell sin presionar CR:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &

Respuestas:
Por lo general, las sesiones de terminal SSH se bloquean si todavía hay conexiones en segundo plano abiertas. Por conexiones de fondo, me refiero a cosas como:
Eche un vistazo a las conexiones que aún están activas en su sesión SSH colgada escribiendo
~#su terminal SSH colgado.Podría ser que su guión esté abriendo sesiones de las que no se dio cuenta. O las configuraciones de terminal de su máquina remota como
.profile(o.bashrc, etc.) pueden tener algo que establezca una sesión. Buena suerte cazando!Por cierto, algunas de las otras secuencias de escape que ofrecen los clientes OpenSSH también pueden ser útiles:
Otra cosa, si desea que su SSH solo ejecute sus comandos y salga inmediatamente, es decir, no desea una sesión de terminal remota, puede usar la
-fopción parassh. Eso obligará a la conexión SSH a ser un trabajo en segundo plano.fuente
-ffunciona para mi.background connectiony puede unodisownel proceso en segundo plano para que la conexión ssh no se bloquee?