2 votos

Actualización automática de script

Estoy intentando que los Macs de mi trabajo se actualicen todos a una hora determinada. Para ello, estoy ejecutando un bash script desde un Macbook de repuesto que ejecuta OS X Server. Tengo un pequeño y un gran problema con mi actual script, y me vendría bien tu ayuda.

El script es muy sencillo, 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 alguna razón, si intento 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

se reinicia el servidor real en su lugar. No estoy seguro de dónde me estoy equivocando con la sintaxis.

El gran problema: A pesar de configurar ssh con una clave ssh pública (usando las instrucciones que encontré aquí ), todavía se me pide que introduzca 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 que configure una tarea cron a primera hora de la mañana y haga que se ejecute este scriptde forma automática para que, cuando esté en el trabajo, los Macs se hayan actualizado y reiniciado. Estoy seguro de que hay una manera de hacerlo, pero mi Google-Fu me está fallando.

EDITAR/RESPUESTA PARCIAL Resulta que, aunque pongas TextEdit en modo de texto plano, sigue usando 'comillas inteligentes'. Escribiendo y guardando el script a través de la Terminal y LUEGO ejecutándolo funcionó como un encanto.

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

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

1voto

0942v8653 Puntos 3617

El ; y && son interpretados por bash en la máquina local. Puede ver esto ejecutando ssh 127.0.0.1 -t env && env La segunda vez, no habrá SSH_CONNECTION variable.

Puedes citar el comando completo para que funcione correctamente:

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

En mi opinión, -t sólo debería permitir un argumento entre comillas para evitar problemas como éste también tenga cuidado con la expansión de las variables-asegúrese de poner todo entre comillas simples o escapar con barras invertidas para evitar que se expandan o interpreten en la máquina local.

0voto

tubedogg Puntos 6827

No estoy seguro de la cuestión del reinicio, pero la configuración de un script para ejecutar sudo comandos sin introducir la contraseña es bastante fácil. Echa un vistazo al paso 4 de esta respuesta que escribí anteriormente (era para otra cosa totalmente distinta, pero los pasos para habilitar la ejecución sudo sin 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 Terminal sudo ejecutar sin contraseña puede ser muy peligroso. Es por eso que los pasos anteriores crearon el shell scripts en su propio directorio, por lo que lo que realmente se puede ejecutar es limitado.

Introduzca el siguiente comando en el Terminal:

sudo pico /etc/sudoers

A continuación, introduzca su contraseña de administrador cuando se le solicite.

Esto puede llevarte a una pantalla (en su mayoría) en blanco, o puede tener algo de texto en ella. Si está en blanco, no hay problema. Sólo tienes que pegar la línea de abajo en la parte superior. Si el texto ya existe, también está bien; use su flecha hacia abajo para ir justo debajo de las líneas que ya están en el # User privilege specification como se ve en la siguiente captura de pantalla.

Aquí, añada la siguiente línea:

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

En ambos lugares donde <yourusername> sustitúyalo por el nombre de usuario de su Mac. Pulse control + x, escriba y y pulse retorno para guardar y salir.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X