Comment synchroniser l’heure sur macOS avec un script Shell

La synchronisation précise de l’heure sur les terminaux est essentielle pour la gestion informatique. Qu’il s’agisse de garantir une authentification transparente ou d’aligner les journaux sur les systèmes distribués, l’horloge du système joue un rôle essentiel. Pour les administrateurs informatiques et les fournisseurs de services gérés (MSP), en particulier ceux qui gèrent des flottes d’appareils macOS, le fait de disposer d’un moyen cohérent et automatisé d’appliquer l’exactitude de l’heure permet d’éviter les interruptions, d’améliorer la sécurité et de réduire le temps de dépannage. Cet article explique comment synchroniser l’heure sur macOS avec un script shell et d’outils natifs, offrant ainsi une alternative fiable et contrôlée aux paramètres basés sur l’interface graphique.

Contexte

macOS offre une prise en charge intégrée de la synchronisation de l’heure du réseau via les Paramètres du système ou l’utilitaire de ligne de commande systemsetup. Toutefois, le fait de s’appuyer uniquement sur la configuration manuelle – ou d’attendre des utilisateurs finaux qu’ils conservent ces paramètres intacts – introduit de la variabilité. L’automatisation de la synchronisation temporelle à l’aide de scripts shell garantit la cohérence et permet aux équipes informatiques de vérifier, d’appliquer et de rendre compte de la configuration lors d’audits ou de contrôles automatisés du système.

Pour les MSP qui utilisent des outils comme NinjaOne, le déploiement d’un tel script dans l’ensemble de l’organisation permet de centraliser l’application des normes de temps. Qu’il s’agisse de conformité réglementaire, de corrélation d’événements système ou de communication sécurisée, un moyen fiable de synchroniser l’heure de macOS devient une exigence fondamentale.

Le script :

#!/usr/bin/env bash
#
# Description: Synchronize the time on macOS using the system's network time server. This can be done via Terminal: systemsetup -setusingnetworktime on, or Apple menu > System Settings > Time & Date, then turn on 'Set time and date automatically'.
# By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
# Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
# Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
# Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
# Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
# Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
# Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#
# Minimum OS Architecture Supported: macOS 10.13 (Ventura)
#
# Release Notes: Initial Release
#

# When run directly without testing, the "__()" function does nothing.
test || __() { :; }

__ begin __

die() {
    local _ret="${2:-1}"
    echo "$1" >&2
    exit "${_ret}"
}

# Check if the script is being run as root. If not, exit with an error message.
if [[ $(id -u) -ne 0 ]]; then
    die "[Error] This script must be run with root permissions. Try running it with sudo or as the system/root user." 1
fi

# Sync the time immediately
if command -v sntp >/dev/null; then
    if sntp -sS "$(systemsetup -getnetworktimeserver | awk '{print $4}')" 2>/dev/null 1>/dev/null; then
        echo ""
        echo "[Info] Time synchronized successfully."
    else
        die "[Error] Failed to synchronize time." 1
    fi
elif command -v ntpdate >/dev/null; then
    if ntpdate -u "$(systemsetup -getnetworktimeserver | awk '{print $4}')" 2>/dev/null 1>/dev/null; then
        echo ""
        echo "[Info] Time synchronized successfully."
    else
        die "[Error] Failed to synchronize time." 1
    fi
else
    die "[Error] No time sync command found. Either sntp or ntpdate should be available." 1
fi

echo ""
echo "[Info] Time Synchronization Settings:"
echo ""

if ! systemsetup -getusingnetworktime -getnetworktimeserver -gettimezone; then
    die "[Error] Failed to retrieve time synchronization settings." 1
fi

__ end __

 

Description détaillée

Voici une analyse étape par étape de ce que fait le script :

1. Shebang et métadonnées

bash

CopyEdit

#!/usr/bin/env bash

Définit l’interpréteur de scripts (bash) afin d’assurer la portabilité dans tous les environnements.

Les commentaires qui suivent le décrivent :

  • La fonction du script
  • Prise en charge minimale du système d’exploitation (macOS 10.13 ou version ultérieure)
  • Instructions d’utilisation via le terminal ou les préférences du système
  • Notes sur la version initiale

2. Fonction d’aide et vérification des autorisations

bash

CopyEdit

die() { … }

La fonction die simplifie la gestion des erreurs, en quittant le script de manière élégante avec un message et un code de retour optionnel.

bash

CopyEdit

if [[ $(id -u) -ne 0 ]]; then

die « [Error] This script must be run with root permissions… »

fi

Vérifie si le script est exécuté avec les privilèges de l’administrateur (root). La synchronisation des paramètres temporels et l’utilisation d’outils système tels que systemsetuprequièrent un accès élevé.

3. Exécution de la synchronisation temporelle

Le script tente deux méthodes pour synchroniser l’heure :

  • sntp (de préférence pour macOS)
  • ntpdate (solution de repli si sntp n’est pas disponible)

bash

CopyEdit

if sntp -sS « $(systemsetup -getnetworktimeserver | awk ‘{print $4}’) » …

  • systemsetup -getnetworktimeserver récupère le serveur NTP configuré.
  • awk ‘{print $4}’ isole le nom du serveur de la sortie de la commande.
  • L’heure est synchronisée silencieusement, sauf en cas d’erreur.

4. Vérification post-synchronisation

bash

CopyEdit

systemsetup -getusingnetworktime -getnetworktimeserver -gettimezone

Affiche les paramètres de synchronisation de l’heure actuelle afin de fournir une visibilité après l’action de synchronisation.

Cas d’utilisation potentiels

Scénario concret

L’administrateur informatique d’un district scolaire gère plus de 500 appareils macOS dans les salles de classe. La dérive temporelle aléatoire entraîne l’échec de l’authentification Kerberos et des erreurs SSO. En déployant ce script shell via NinjaOne, l’administrateur peut :

  • Forcer une synchronisation temporelle unique à distance.
  • Programmer le script périodiquement pour une application continue.
  • Enregistrer les défaillances dans NinjaOne pour suivre les machines qui pourraient nécessiter une inspection plus approfondie.

Comparaisons

Script vs GUI

FonctionScript ShellParamètres de l’interface graphique
Automatisable
Cohérence entre les appareils
Nécessite l’intervention de l’utilisateur
Convivialité de l’éloignement

Script vs Daemons  launchd

Bien qu’un job launchd persistant puisse assurer une synchronisation temporelle continue, il introduit une plus grande complexité. Ce script est très utile, qu’il s’agisse d’exécutions ad hoc ou programmées, ce qui est parfait pour un déploiement léger et centralisé via des outils RMM.

Questions fréquentes

Q : Dois-je installer sntp ou ntpdate ?

R : macOS inclut sntp par défaut, mais certaines versions simplifiées peuvent ne pas l’inclure. Le script vérifie gracieusement les deux.

Q : Quelles sont les versions de macOS prises en charge ?

R : Le script est compatible avec macOS 10.13 et plus, y compris Ventura et Sonoma.

Q : Cela va-t-il entrer en conflit avec les paramètres de synchronisation de l’heure existants ?

R : Non, il respecte le serveur de temps réseau configuré et effectue simplement une synchronisation immédiate.

Q : Comment automatiser cette opération hebdomadaire ?

R : Utilisez l’automatisation par script de NinjaOne ou macOS cron/launchd en fonction de votre méthode de déploiement.

Implications

La désynchronisation du temps peut compromettre :

  • Protocoles d’authentification (par exemple, Kerberos)
  • Corrélation des journaux entre les systèmes
  • Validation du certificat

L’automatisation de la synchronisation du temps renforce l’intégrité du système et élimine une catégorie de problèmes silencieux et difficiles à tracer.

Recommandations

  • Pour une exécution réussie, le script doit toujours être exécuté en tant que root .
  • Planifiez des exécutions de routine pour éviter les dérives futures, en particulier dans les environnements mobiles ou BYOD.
  • Combinez avec les mécanismes de journalisation pour capturer les résultats et vérifier la conformité.
  • Vérifiez la disponibilité de l’outil (sntp, ntpdate) dans votre parc d’appareils avant de le déployer à grande échelle.

Conclusion

La synchronisation de l’heure sur macOS à l’aide d’un script shell offre aux professionnels de l’informatique et aux MSP une méthode légère mais puissante pour assurer l’intégrité du système. Lorsqu’elle est intégrée à des plateformes RMM telles que NinjaOne, cette approche devient encore plus efficace. Les administrateurs peuvent créer des scripts, déployer, surveiller et produire des rapports, le tout à partir d’une console centralisée, afin de s’assurer que chaque appareil macOS respecte les normes de l’entreprise. La synchronisation du temps peut sembler un détail mineur, mais dans le domaine de l’informatique, c’est un pilier fondamental de la stabilité et de la sécurité.

Pour les entreprises qui cherchent à automatiser et à étendre leurs processus de gestion des terminaux, NinjaOne offre l’environnement de script et de déploiement idéal pour faire de ce script un élément fiable de votre boîte à outils opérationnelle.

Next Steps

Building an efficient and effective IT team requires a centralized solution that acts as your core service delivery tool. NinjaOne enables IT teams to monitor, manage, secure, and support all their devices, wherever they are, without the need for complex on-premises infrastructure.

Learn more about NinjaOne Remote Script Deployment, check out a live tour, or start your free trial of the NinjaOne platform.

Catégories :

Vous pourriez aussi aimer