Comment télécharger des fichiers à partir d’URL à l’aide d’un script Bash

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 : 

  1. 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.
  1. 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.
  1. 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.
  1. 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.
  1. 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é. 

Pour aller plus loin

Pour créer une équipe informatique efficace et performante, il est essentiel d'avoir une solution centralisée qui joue le rôle de nœud principal pour vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu'ils soient, sans avoir besoin d'une infrastructure complexe sur site. Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée, ou profitez d'un essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton “J’accepte” ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • 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: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • 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)).