Cómo salir de una conexión SSH en un script bash

Cómo salir de una conexión SSH en un script bash

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 sourcehacerlo en su lugar.

Una exitdeclaración en su script cerrará la sesión del shell.

$ source exit.sh
# or
$ . exit.sh

El sourceincorporado ejecuta su script en elcontexto actual del shell, mientras ./exit.shlanza 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 psshlo 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 sshcomo protocolo de transporte, por lo que obviamente es tan seguro como una sshconexión en bucle.

https://linux.die.net/man/1/pssh

Respuesta4

Normalmente puedes hacer un forbucle sshsin 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í uptimehacia el otro lado. Puedes reemplazarlo uptimecon lo que quieras ejecutar. Lo que sea que pongas allí es donde debe estar la salida. uptimesale una vez que imprime su salida, pero si está escribiendo el script, es posible que deba asegurarse de que finalmente salga para que el forciclo pueda continuar.

Si está haciendo algo complicado, le recomiendo crear el script en un archivo separado y luego scpenviarlo 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íaprimero.

información relacionada