Script de actualización automática

2

Estoy tratando de hacer que las Mac de mi lugar de trabajo se actualicen en un momento específico. Para hacerlo, estoy ejecutando un script de bash desde un Macbook de repuesto que ejecuta OS X Server. Tengo un problema menor y uno grande con mi script actual, y podría usar su ayuda.

El script es muy simple, y no necesito que sea demasiado robusto para mis propósitos:

#!/bin/bash
for host in 192.blah.blah.blah 192.blah.blah.blah 192.blah.blah.blah
do
ssh -t $host sudo softwareupdate -ia
ssh -t $host sudo shutdown -r now
done

El problema menor: por cualquier razón, si trato de poner ambos comandos en la misma línea usando ; o && así:

ssh -t $host sudo softwareupdate -ia;sudo shutdown -r now

o

ssh -t $host sudo softwareupdate -ia && sudo shutdown -r now

reinicia el servidor real en su lugar. No estoy seguro de dónde voy mal con la sintaxis.

El gran problema: a pesar de configurar ssh con una clave ssh pública (siguiendo las instrucciones que encontré aquí ), todavía me piden que ingrese una contraseña dos veces por máquina cuando se ejecuta el script. Estoy seguro de que se debe a nuestro amigo sudo , pero los comandos no se ejecutan en absoluto sin él. Lo ideal es configurar un trabajo cron temprano en la mañana y hacer que se ejecute este script automáticamente para que, cuando esté en el trabajo, las Mac se hayan actualizado y reiniciado. Estoy seguro de que hay una forma de hacerlo, pero mi Google-Fu me está fallando.

EDITAR / RESPUESTA PARCIAL Resulta que, incluso si pone TextEdit en modo de texto sin formato, sigue usando "comillas inteligentes". Escribir y guardar el script a través de la Terminal y luego ejecutarlo funcionó a la perfección.

0942v8653 tuvo la amabilidad de ayudarme en el chat y también proporcionó un comando para deshabilitar esta 'característica': defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false

Sigo buscando una solución al problema de la contraseña.

    
pregunta zomgdavidbowie 23.10.2014 - 20:11

2 respuestas

1

Los ; y && se interpretan por bash en la máquina local. Puedes ver esto ejecutando ssh 127.0.0.1 -t env && env : la segunda vez, no habrá una variable SSH_CONNECTION .

Puede citar todo el comando para que funcione correctamente:

ssh -t $host 'sudo softwareupdate -ia && sudo shutdown -r now'

En mi opinión, -t solo debería permitir un argumento, citado, para evitar problemas como este ... también tenga cuidado con la expansión de la variable: asegúrese de poner todo en comillas simples o evítelo con barras invertidas para evitar que se expanda o interpretado en la máquina local.

    
respondido por el 0942v8653 23.10.2014 - 21:54
0

No estoy seguro del problema de reinicio, pero configurar un script para ejecutar los comandos sudo sin ingresar la contraseña es bastante fácil. Eche un vistazo al Paso 4 de esta respuesta que escribí anteriormente (fue para algo completamente distinto, pero los pasos para habilitar la ejecución de sudo sin una contraseña son universales).

Tenga en cuenta que el comando real para ejecutar su script cambiará a

sudo ./myscript.sh
  

Paso 4: configurar sudo para que se ejecute sin contraseña

     

Dejar que el comando de Terminal sudo se ejecute sin una contraseña puede ser muy peligroso. Es por eso que los pasos anteriores crearon los scripts de shell en su propio directorio, por lo que lo que realmente se puede ejecutar es limitado.

     

Ingrese el siguiente comando en la Terminal:

sudo pico /etc/sudoers
     

Luego ingrese su contraseña de administrador cuando se le solicite.

     

Esto puede llevarlo a una pantalla (en su mayoría) en blanco, o puede tener algo de texto. Si está en blanco, está bien. Simplemente pegarás la línea de abajo en la parte superior. Si el texto ya existe, eso también está bien; usa la flecha hacia abajo para ir justo debajo de las líneas que ya están en la sección # User privilege specification , como se ve en la siguiente captura de pantalla.

     

Aquí, agregue la siguiente línea:

<yourusername> ALL = NOPASSWD: /Users/<yourusername>/PathToScript/*
     

En ambos lugares donde aparece <yourusername> , reemplácelo con su nombre de usuario de Mac. Presione control + x, escriba y y presione regresar para guardar y salir.

    
respondido por el tubedogg 23.10.2014 - 20:31

Lea otras preguntas en las etiquetas