2 votes

Mise à jour automatique du script

J'essaie de faire en sorte que les Macs de mon lieu de travail se mettent tous à jour à un moment précis. Pour ce faire, j'exécute un script bash à partir d'un Macbook de rechange exécutant OS X Server. J'ai un problème mineur et un gros problème avec mon script actuel, et j'aurais besoin de votre aide.

Le script est très simple, et je n'ai pas besoin qu'il soit trop robuste pour mes besoins :

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

Le problème mineur : pour une raison quelconque, si j'essaie de placer ces deux commandes sur la même ligne en utilisant la commande ; o && comme ça :

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

ou

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

il redémarre le serveur actuel à la place. Je ne sais pas où je me trompe dans la syntaxe.

La grande question : Malgré la mise en place de ssh avec une clé ssh publique (en utilisant les instructions que j'ai trouvé aquí ), on me demande toujours de saisir un mot de passe deux fois par machine lorsque le script s'exécute. Je suis certain que c'est dû à notre ami sudo mais les commandes ne fonctionnent pas du tout sans elle. Idéalement, je vais mettre en place une tâche cron à un moment précoce de la matinée et lui faire exécuter ce script automatiquement, de sorte que lorsque je suis au travail, les Macs auront mis à jour et redémarré. Je suis sûr qu'il existe un moyen de le faire, mais mon Google-Fu me fait défaut.

EDIT/PARTIAL ANSWER Il s'avère que, même si vous mettez TextEdit en mode texte brut, il utilise toujours les "guillemets intelligents". En tapant et en sauvegardant le script dans le Terminal, puis en l'exécutant, ça a marché comme sur des roulettes.

0942v8653 a eu la gentillesse de m'aider en chat, et a également fourni une commande pour désactiver cette 'fonctionnalité' : defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false

Je cherche toujours une solution au problème du mot de passe.

1voto

0942v8653 Points 6754

Le site ; y && sont interprétés par bash sur la machine locale. Vous pouvez le voir en exécutant ssh 127.0.0.1 -t env && env la deuxième fois, il n'y aura pas de SSH_CONNECTION variable.

Vous pouvez citer l'intégralité de la commande pour qu'elle fonctionne correctement :

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

A mon avis, -t ne devrait permettre qu'un seul argument, entre guillemets, pour éviter des problèmes comme celui-ci Faites également attention à l'expansion des variables - assurez-vous de tout mettre entre guillemets simples ou de les échapper avec des antislashes pour éviter qu'elles ne soient étendues ou interprétées sur la machine locale.

0voto

tubedogg Points 14839

Je ne suis pas sûr de la question du redémarrage, mais la mise en place d'un script à exécuter sudo sans saisir le mot de passe est assez facile. Jetez un coup d'œil à l'étape 4 de cette réponse que j'ai écrite précédemment (c'était pour quelque chose d'entièrement différent, mais les étapes pour permettre l'exécution de l'application sudo sans mot de passe sont universels).

Notez que la commande réelle pour exécuter votre script changera en

sudo ./myscript.sh

Étape 4 : Configurer sudo pour qu'il fonctionne sans mot de passe

Laisser la commande Terminal sudo fonctionner sans mot de passe peut être très dangereux. C'est pourquoi les étapes ci-dessus ont créé le shell scripts dans leur propre répertoire, de sorte que ce qui peut réellement être exécuté est limité.

Entrez la commande suivante dans le Terminal :

sudo pico /etc/sudoers

Saisissez ensuite votre mot de passe administrateur lorsque vous y êtes invité.

Cela peut vous amener à un écran (essentiellement) vide, ou à un écran contenant du texte. Si l'écran est vide, c'est parfait. Vous devrez simplement coller la ligne ci-dessous en haut de l'écran. S'il y a déjà du texte, c'est également possible ; utilisez votre flèche vers le bas pour aller juste en dessous des lignes déjà présentes dans l'écran. # User privilege specification comme on peut le voir dans la capture d'écran ci-dessous.

Ici, ajoutez la ligne suivante :

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

Dans les deux endroits où <yourusername> apparaît, remplacez-le par votre nom d'utilisateur Mac. Appuyez sur contrôle + x, tapez y et appuyez sur retour pour enregistrer et quitter.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X