De nos jours, l’environnement informatique est dynamique, l’automatisation et les scripts sont donc des outils essentiels pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP). Qu’il s’agisse de déployer des applications, de gérer l’infrastructure ou de dépanner, les scripts permettent d’économiser d’innombrables heures de travail, d’accroître l’efficacité et de réduire les erreurs humaines. Une tâche courante que les professionnels ont souvent besoin d’automatiser est le téléchargement de fichiers à partir d’une URL à l’aide d’un script Shell, plus précisément un script Bash.
Examinons de plus près un script Bash qui non seulement télécharge des fichiers à partir d’URL, mais qui vérifie également le contenu du fichier à l’aide d’une somme MD5 fournie et crée les structures de répertoire nécessaires si elles n’existent pas déjà.
Script Bash pour télécharger des fichiers à partir d’URL
#!/usr/bin/env bash # Description : Télécharge un fichier à partir d'une URL vers un chemin spécifié et peut vérifier le contenu du fichier à l'aide d'une somme MD5 fournie. # # Notes de mise à jour : Première publication # (c) 2023 NinjaOne # En utilisant ce script, vous acceptez les termes juridiques suivants ainsi que nos conditions d'utilisation à l'adresse https://www.ninjaone.com/fr/conditions-dutilisation/. # Droits de propriété : NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d'auteur). NinjaOne vous accorde une licence limitée pour l'utilisation du script conformément à ces conditions légales. # Limitation de l'utilisation : Vous ne pouvez utiliser le script qu'à des fins personnelles légitimes ou à des fins commerciales internes, et vous ne pouvez pas partager le script avec une autre partie. # Interdiction de republication : Vous n'êtes en aucun cas autorisé à republier le script dans une bibliothèque de scripts ou sur un site web appartenant à un autre fournisseur de logiciels ou placé sous son contrôle. # Clause de non-responsabilité : Le texte est fourni "tel quel" et "tel que disponible", sans garantie d'aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu'il répondra à vos besoins ou attentes particulières. # Acceptation des risques : L'utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu'il existe certains risques inhérents à l'utilisation du script, et vous comprenez et assumez chacun de ces risques. # Renonciation et exonération de responsabilité : Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script. # EULA : Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d'utilisateur final qui vous est applicable (End User License Agreement (EULA)). # # Utilisation : <url> <chemin d'accès au téléchargement> [expected md5 sum] # <> sont nécessaires # [] sont facultatifs # Exemple : https://www.nirsoft.net/utils/advancedrun.zip /tmp/advancedrun.zip # Télécharge advancedrun.zip # Exemple : https://www.nirsoft.net/utils/advancedrun.zip /tmp/advancedrun.zip 1f09135878bb6cd30c1f3f6cf4b882 # Télécharge le fichier advancedrun.zip, vérifie le hash de la somme md5 fournie # # Remarques : Si le chemin n'existe pas, ce script créera les dossiers nécessaires pour le placer à cet endroit. # Si vous utilisez /tmp/MyFiles/advancedrun.zip et que le dossier MyFiles n'existe pas, il le créera. # De même pour /tmp/MyFiles/Tools/advancedrun.zip, cela créerait MyFiles et Tools. # Paramètres URL=1 SAVE_PATH=2 SUM=3 URL_CHECK_REGEX='(https?|ftp|file)://[-[:alnum:]+&@#/%?=~_|! :,. ;]*[-[:alnum:]+&@#/%=~_|]' if [[ "${URL}" =~ ${URL_CHECK_REGEX} ]]; then echo "${URL} est une URL valide" else echo "${URL} est une URL non valide" exit 1 fi # Vérifier que le chemin fourni est dans un format valide, et créer la structure du dossier si nécessaire. PATH_CHECK_REGEX='^(N-)[^/ ]*)+/?$' if [[ "${SAVE_PATH}" =~ ${PATH_CHECK_REGEX} ]]; then echo "${SAVE_PATH} est un chemin valide" FOLDER=$(dirname "${SAVE_PATH}") if [[ -d "${FOLDER}" ]]; then echo "Le dossier ${FOLDER} existe" else echo "Le dossier ${FOLDER} n'existe pas, création." mkdir -p -v "${FOLDER}" if [ -f "${FOLDER}" ]; then echo "${FOLDER} créé" else echo "Échec de la création de ${FOLDER}" exit 1 fi fi else echo "${SAVE_PATH} est un chemin non valide" exit 1 fi function private_download() { # $1 = URL # $2 = Chemin d'accès au fichier if [ "$(command -v wget)" ]; then echo "Téléchargement à l'aide de wget" wget -O "$2" "$1" elif [ "$(command -v curl)" ]; then echo "Téléchargement à l'aide de curl" curl "$1" --output "$2" else echo "Échec de la recherche de wget ou de curl" exit 1 fi } function private_gethash() { FILE=$1 HASH=2 WAS_ERROR=0 if ! command -v md5 &>/dev/null ; then # Cela ne devrait jamais se produire echo "md5 n'a pas pu être trouvé" WAS_ERROR=1 fi if [ "$(command -v md5)" ]; then CURRENT_HASH=$(md5 "${FILE}") # "##* " dans "${CURRENT_HASH##* }" récupère le dernier mot d'une chaîne de caractères if [ "${HASH}" = "${CURRENT_HASH##* }" ]; then echo "Le fichier correspond au hash md5sum" WAS_ERROR=0 else echo "Le fichier ne correspond pas au hash de md5sum" echo "Attendu : ${CURRENT_HASH}" echo "Fichier : ${HASH}" WAS_ERROR=1 fi fi if [ ${WAS_ERROR} == 1 ]; then echo "Erreur lors de la vérification de la somme de hachage" exit 1 fi } function private_validate() { if [ -f "$1" ]; then echo "Fichier téléchargé" private_gethash "$1" "$2" else echo "Échec du téléchargement du fichier." exit 1 fi } # Télécharger le fichier private_download "${URL}" "${SAVE_PATH}" # Si SUM n'est pas vide if [[ -n "${SUM}" ]]; then # Vérifier que le fichier a été téléchargé # Compare le hash du paramètre à la somme md5 calculée du fichier private_validate "${SAVE_PATH}" "${SUM}" fi
Vue d’ensemble du script
Ce script prend principalement trois paramètres : l’URL à partir de laquelle le fichier doit être téléchargé, le chemin où le fichier doit être enregistré et un hachage MD5 facultatif pour la vérification du contenu. Si le chemin n’existe pas, le script créera les dossiers nécessaires, ce qui présente un avantage considérable lorsqu’il s’agit de structures de répertoires complexes.
Le script commence par valider les paramètres de l’URL et du chemin d’accès. Si l’un de ces paramètres n’est pas valide, il quittera immédiatement l’application et émettra une erreur. Le script utilise des expressions régulières pour valider l’URL et le chemin d’accès.
Après avoir vérifié les paramètres, il procède au téléchargement du fichier. Le script est conçu pour utiliser ‘wget’ ou ‘curl’ en fonction de ce qui est disponible dans l’environnement.
Après avoir téléchargé avec succès le fichier, si un hachage MD5 a été fourni, il vérifie le contenu du fichier téléchargé par rapport au hachage fourni. Cette fonction est particulièrement utile pour garantir l’intégrité des fichiers, ce qui est un aspect essentiel dans de nombreuses opérations informatiques.
Commandes de script
Le script utilise principalement les commandes ‘wget’ ou ‘curl’ pour télécharger des fichiers, qui sont des outils courants dans les systèmes basés sur Unix. ‘wget’ et ‘curl’ sont tous deux des utilitaires gratuits pour le téléchargement non interactif de fichiers à partir du web, prenant en charge les protocoles HTTP, HTTPS et FTP.
Le script utilise également ‘md5’, un utilitaire de ligne de commande qui calcule et vérifie le condensé de message MD5. La valeur de hachage MD5 (128 bits) se présente généralement sous la forme d’une séquence de 32 chiffres hexadécimaux. Il est utilisé pour garantir l’intégrité des données des fichiers en produisant une valeur de hachage unique pour le contenu d’un fichier. Si deux fichiers ont la même valeur de hachage MD5, il est très probable qu’ils soient identiques.
La commande ‘mkdir -p’ est utilisée pour créer le chemin du répertoire s’il n’existe pas. L’option ‘-p’ garantit qu’aucune erreur n’est signalée si un répertoire donné comme opérande existe déjà.
Le script utilise “command -v” pour vérifier la disponibilité des commandes “wget”, “curl” et “md5” dans l’environnement. Il utilise également des expressions régulières et des instructions conditionnelles ‘[[‘ and ‘]]’ pour valider l’URL et le chemin d’accès.
Nous allons maintenant explorer plus en profondeur le script et ses utilisations potentielles.
Applications potentielles
Ce script Bash peut être utilisé dans divers scénarios :
- Mises à jour de logiciels : le script peut être utilisé pour automatiser le téléchargement des mises à jour de logiciels à partir du site web d’un fournisseur. Une fois téléchargées, un autre script pourrait être utilisé pour appliquer ces mises à jour à plusieurs systèmes d’un réseau.
- Correctifs de sécurité : les correctifs de sécurité sont souvent publiés sous forme de fichiers téléchargeables sur Internet. Ce script peut automatiser le processus de téléchargement de ces correctifs, garantissant ainsi que tous les systèmes d’un réseau restent à jour et sécurisés.
- Fichiers de données : dans les environnements riches en données, il est courant que les fichiers de données soient hébergés sur des serveurs web. Ce script peut être utilisé pour télécharger ces fichiers en vue d’une analyse ou d’un traitement ultérieur des données.
- Systèmes distribués : dans un système distribué, il peut être nécessaire de télécharger et de vérifier un fichier spécifique sur plusieurs systèmes. Le script peut être utilisé pour s’assurer que la même version d’un fichier est utilisée sur tous les systèmes.
- Sauvegarde et récupération : Le script peut être utilisé pour télécharger des fichiers de sauvegarde à partir d’un serveur distant à des fins de reprise d’activité après incident.
En comprenant les mécanismes du script, les professionnels de l’informatique peuvent modifier et l’étendre en fonction de leurs besoins particuliers, améliorant ainsi leurs capacités d’automatisation.
Avantages pour les professionnels de l’informatique et les entreprises MSP
Ce script offre de nombreux avantages aux professionnels de l’informatique et aux MSP :
- Gain de temps : Au lieu de télécharger manuellement des fichiers, les professionnels peuvent utiliser ce script pour automatiser le processus et gagner ainsi un temps précieux.
- Réduction des erreurs : Grâce au téléchargement automatisé et à la vérification MD5, les risques d’erreur humaine sont considérablement réduits.
- Flexibilité : Le script peut utiliser ‘wget’ ou ‘curl’, ce qui lui permet de s’adapter à différents environnements.
- Intégrité du fichier : En comparant les hachages MD5, le script garantit l’intégrité du fichier téléchargé, ce qui est crucial pour les opérations sensibles en termes de sécurité.
Conclusions
Ce script Bash simplifie une tâche courante, améliore l’efficacité et renforce la fiabilité et la sécurité. Que vous soyez un administrateur système expérimenté ou que vous débutiez dans le monde de l’informatique, ce script est un complément précieux à votre boîte à outils.
La plateforme très appréciée de surveillance et gestion à distance (RMM) de NinjaOne peut permettre le déploiement et l’exécution de ce script Bash sur plusieurs systèmes de façon optimale. Que vous cherchiez à télécharger des mises à jour de logiciels, des correctifs de sécurité ou des fichiers de données, l’intégration de ce script à NinjaOne peut vous aider à automatiser et optimiser ces processus informatiques. Il peut garantir la cohérence, réduire les erreurs manuelles et faire gagner du temps en permettant des déploiements à grande échelle. Ainsi, les puissantes capacités de NinjaOne, lorsqu’elles sont utilisées en conjonction avec ce script, peuvent considérablement améliorer l’efficacité opérationnelle et la productivité.