Estoy tratando de actualizar las Mac en mi lugar de trabajo en un momento específico. Para hacerlo, estoy ejecutando un script bash desde una Macbook de repuesto que ejecuta OS X Server. Tengo un problema menor y otro mayor con mi script actual, y me vendría bien 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 alguna 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
en su lugar, reinicia el servidor real. 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 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. Idealmente, configuraré un trabajo cron a primera hora de la mañana y haré que 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 manera de hacerlo, pero mi Google-Fu me está fallando.
EDITAR/RESPUESTA PARCIAL Resulta que, incluso si pone TextEdit en modo Texto sin formato, sigue usando 'comillas tipográficas'. Escribir y guardar el script a través de la Terminal y LUEGO ejecutarlo funcionó de maravilla.
0942v8653 tuvo la amabilidad de ayudarme en el chat y también proporcionó un comando para desactivar esta 'función':defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
Sigo buscando una solución al problema de la contraseña.
Los ;
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á ninguna SSH_CONNECTION
variable.
Puede citar el comando completo para que funcione correctamente:
ssh -t $host 'sudo softwareupdate -ia && sudo shutdown -r now'
En mi opinión, -t
solo debe permitir un argumento entre comillas para evitar problemas como este... También tenga cuidado con la expansión variable: asegúrese de poner todo entre comillas simples o escape con barras invertidas para evitar que se expanda o interprete en la máquina local.
No estoy seguro del problema de reinicio, pero configurar un script para ejecutar sudo
comandos sin ingresar la contraseña es bastante fácil. Eche un vistazo al Paso 4 de esta respuesta que escribí anteriormente (era para algo completamente diferente, pero los pasos para habilitar la ejecución sudo
sin contraseña son universales).
Tenga en cuenta que el comando real para ejecutar su secuencia de comandos cambiará a
sudo ./myscript.sh
Paso 4: configurar sudo para que se ejecute sin contraseña
Permitir que el comando 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á 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 la
# User privilege specification
sección, 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
<yourusername>
aparece, reemplácelo con su nombre de usuario de Mac. Presione control + x, escriba y y presione regresar para guardar y salir.
sudo bash UpdateScript.sh
. Además, cuando lo llamo así, termina pidiéndome una contraseña una y otra vez hasta que dice "Permiso denegado (clave pública, teclado interactivo)". ¿Pensamientos?VISUAL
variable de entorno en pico
.
zomgdavidbowie
'sudo: command not found
. Me desconcierta. Aunque, tal vez debería tener en cuenta: estoy ejecutando server.app en Yosemite. Dudo que esa sea la raíz del problema, pero pensé en mencionarlo.0942v8653
zomgdavidbowie
ssh -t [username]@[ClientMacIP] 'sudo softwareupdate -ia && sudo shutdown -r now'
0942v8653
zomgdavidbowie
'echo command not found
. Tengo que pensar que es la forma en que estoy llamando al script... He hecho cd en el directorio en el que está, y lo estoy llamando consudo ./UpdateScript.sh
0942v8653
zomgdavidbowie
ssh -t [username]@[ClientMacIP] 'sudo softwareupdate -ia && sudo shutdown -r now'
funciona de maravilla si lo escribo todo en el aviso.0942v8653