Script di aggiornamento automatico

2

Sto cercando di far aggiornare i Mac sul mio posto di lavoro in un momento specifico. Per fare ciò, sto eseguendo uno script bash da un Macbook di riserva che esegue OS X Server. Ho un piccolo e un grosso problema con il mio script corrente e potrei usare il tuo aiuto.

Lo script è molto semplice e non ho bisogno che sia troppo robusto per i miei scopi:

#!/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

Il problema minore: per qualsiasi motivo, se provo a mettere entrambi questi comandi sulla stessa riga usando ; o && in questo modo:

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

o

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

riavvia invece il server attuale. Non sono sicuro di dove sto andando male con la sintassi.

Il grosso problema: nonostante l'impostazione di ssh con una chiave pubblica ssh (utilizzando le istruzioni che ho trovato qui ), mi viene ancora chiesto di inserire una password due volte per macchina quando viene eseguito lo script. Sono sicuro che è dovuto al nostro amico sudo , ma i comandi non funzionano affatto senza di esso. Idealmente, stabilirò un cron job all'inizio della mattinata e farò funzionare questo script automaticamente in modo che, quando sono al lavoro, i Mac si siano aggiornati e riavviati. Sono sicuro che c'è un modo per farlo, ma il mio Google-Fu mi sta fallendo.

MODIFICA / RISPOSTA PARZIALE Risulta, anche se si mette TextEdit in modalità Testo normale, sta ancora usando 'virgolette intelligenti'. Digitando e salvando la sceneggiatura attraverso il Terminale e POI in esecuzione funzionava come un incantesimo.

0942v8653 è stato così gentile da aiutarmi in chat e ha anche fornito un comando per disabilitare questa 'funzione': defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false

Ancora in cerca di una soluzione al problema della password.

    
posta zomgdavidbowie 23.10.2014 - 20:11
fonte

2 risposte

1

; e && sono interpretati da bash sulla macchina locale. Puoi visualizzarlo eseguendo ssh 127.0.0.1 -t env && env : la seconda volta non ci sarà alcuna variabile SSH_CONNECTION .

Puoi citare l'intero comando per farlo funzionare correttamente:

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

A mio parere, -t dovrebbe consentire solo un argomento, citato, per evitare problemi come questo ... anche attenti all'espansione delle variabili: assicurati di mettere tutto tra virgolette singole o evitarlo con barre retroverse per evitare che venga espanso o interpretato sulla macchina locale.

    
risposta data 23.10.2014 - 21:54
fonte
0

Non sono sicuro del problema di riavvio, ma impostare uno script per eseguire comandi sudo senza inserire la password è abbastanza semplice. Dai un'occhiata al Passaggio 4 di questa risposta che ho scritto in precedenza (era per qualcos'altro interamente, ma i passaggi per abilitare l'esecuzione di sudo senza password sono universali).

Tieni presente che il comando effettivo per eseguire lo script cambierà in

sudo ./myscript.sh

Step 4: Setting Up sudo to Run Without a Password

Letting the Terminal command sudo run without a password can be very dangerous. That's why the steps above created the shell scripts in their own directory, so what can actually be run is limited.

Enter the following command in Terminal:

sudo pico /etc/sudoers

Then enter your administrator password when prompted.

This may bring you to a (mostly) blank screen, or it may have some text in it. If it's blank - that's fine. You'll just paste the below line at the top. If text already exists, that's also fine; use your down arrow to go right below the lines already in the # User privilege specification section, as seen in the below screenshot.

Here, add the following line:

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

In both places where <yourusername> appears, replace it with your Mac username. Press control + x, type y and press return to save and exit.

    
risposta data 23.10.2014 - 20:31
fonte

Leggi altre domande sui tag