He leído varias publicaciones aquí sobre este tema, pero cada solución que encuentro parece ser una sola línea en la que se ejecuta un comando.
Estoy creando una secuencia de comandos en la que envío ssh a varios hosts diferentes, uno tras otro. El objetivo es enviar ssh a una máquina, ejecutar algunos comandos locales, ejecutar un script, esperar a que finalice y luego salir de la sesión ssh y pasar a la siguiente.
Sin embargo, cuando uso el comando "salir", no funciona y simplemente sale del script por completo.
Respuesta1
Supongo que su script no sale de la sesión de shell porque lo está llamando directamente con ./exit.sh
. Deberías source
hacerlo en su lugar.
Una exit
declaración en su script cerrará la sesión del shell.
$ source exit.sh
# or
$ . exit.sh
El source
incorporado ejecuta su script en elcontexto actual del shell, mientras ./exit.sh
lanza unnuevo caparazónpara ejecutarlo.
Respuesta2
¿Has intentado poner los comandos en un archivo y usar cat con él o EOF?
ssh -t [email protected] << EOF
command1
command2
exit
EOF
Respuesta3
Recomiendo observar pssh
lo que está tratando de lograr: le permite manejar fácilmente los matices de abrir/cerrar conexiones entre máquinas e incluso puede ejecutarse en paralelo para reducir el tiempo de ejecución.
Todavía se utiliza ssh
como protocolo de transporte, por lo que obviamente es tan seguro como una ssh
conexión en bucle.
Respuesta4
Normalmente puedes hacer un for
bucle ssh
sin problemas.
$ for srv in 192.168.88.138; do echo $srv:; ssh $srv uptime; done
192.168.88.138:
13:27:25 up 30 days, 8:42, 1 user, load average: 4.15, 4.06, 4.06
Entonces en este caso corrí uptime
hacia el otro lado. Puedes reemplazarlo uptime
con lo que quieras ejecutar. Lo que sea que pongas allí es donde debe estar la salida. uptime
sale una vez que imprime su salida, pero si está escribiendo el script, es posible que deba asegurarse de que finalmente salga para que el for
ciclo pueda continuar.
Si está haciendo algo complicado, le recomiendo crear el script en un archivo separado y luego scp
enviarlo al servidor en el que desea ejecutarlo y luego iniciar sesión mediante ssh para ejecutarlo. Intentar introducir algo complicado en ssh mediante citas y escapes es más desafiante de lo que normalmente vale.
He hecho esto cientos de veces y funciona bien cuando quieres que las cosas se ejecuten en un servidor a la vez. Si desea que todo se ejecute en paralelo, hay otras opciones, pero yo miraríaansibleprimero.