Wie Sie Dateien von URLs mit einem Bash-Skript herunterladen

In der dynamischen IT-Umgebung von heute sind Automatisierung und Skripting unverzichtbare Tools für IT-Experten und Managed Service Providers (MSPs). Egal ob es um Bereitstellung von Anwendungen, Management der Infrastruktur oder Fehlerbehebung geht, Skripte können unzählige Stunden manueller Arbeit einsparen, Effizienz steigern und menschliche Fehler reduzieren. Eine häufige Aufgabe, die Fachleute häufig automatisieren müssen, ist das Herunterladen von Dateien von einer URL mithilfe eines Shell-Skripts, genauer gesagt, mit einem Bash-Skript.

Schauen wir uns ein Bash-Skript genauer an, das nicht nur Dateien von URLs herunterlädt, sondern auch den Inhalt der Dateien mit einer bereitgestellten MD5-Summe verifiziert und die notwendigen Verzeichnisstrukturen anlegt, falls sie noch nicht existieren.

Dateien von URLs herunterladen Bash-Skript

#!/usr/bin/env bash
# Description: Downloads a file from a URL to a specified path, and can verify the file content with a provided md5 sum.
#
# Release Notes: Initial Release
#
# Usage: <url> <download file path> [expected md5 sum]
# <> are required
# [] are optional
# Example: https://www.nirsoft.net/utils/advancedrun.zip /tmp/advancedrun.zip
#  Downloads advancedrun.zip
# Example: https://www.nirsoft.net/utils/advancedrun.zip /tmp/advancedrun.zip 1f0913135878bb6cd30c1f3f6cf4b882
#  Downloads advancedrun.zip, verify's the provided md5 summed hash
#
# Notes: If the path doesn't exist this script will create the folders needed to place it there.
#  If you used /tmp/MyFiles/advancedrun.zip and the MyFiles folder didn't exist then it would create it.
#  The same for /tmp/MyFiles/Tools/advancedrun.zip, it would create MyFiles and Tools.
# 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).

# Parameters
URL=$1
SAVE_PATH=$2
SUM=$3

URL_CHECK_REGEX='(https?|ftp|file)://[-[:alnum:]+&@#/%?=~_|!:,.;]*[-[:alnum:]+&@#/%=~_|]'
if [[ "${URL}" =~ ${URL_CHECK_REGEX} ]]; then
    echo "${URL} is a valid URL."
else
    echo "${URL} is an invalid URL."
    exit 1
fi

# Verify that the path provided is in a valid format, and create the folder structure if needed.
PATH_CHECK_REGEX='^(/[^/ ]*)+/?$'
if [[ "${SAVE_PATH}" =~ ${PATH_CHECK_REGEX} ]]; then
    echo "${SAVE_PATH} is a valid path."
    FOLDER=$(dirname "${SAVE_PATH}")
    if [[ -d "${FOLDER}" ]]; then
        echo "Folder ${FOLDER} exists"
    else
        echo "Folder ${FOLDER} does not exist, creating."
        mkdir -p -v "${FOLDER}"
        if [ -f "${FOLDER}" ]; then
            echo "Created ${FOLDER}"
        else
            echo "Failed to created ${FOLDER}"
            exit 1
        fi
    fi
else
    echo "${SAVE_PATH} is an invalid path."
    exit 1
fi

function private_download() {
    # $1 = URL
    # $2 = File Path
    if [ "$(command -v wget)" ]; then
        echo "Downloading using wget"
        wget -O "$2" "$1"
    elif [ "$(command -v curl)" ]; then
        echo "Downloading using curl"
        curl "$1" --output "$2"
    else
        echo "Failed to find wget or curl."
        exit 1
    fi
}

function private_gethash() {
    FILE=$1
    HASH=$2
    WAS_ERROR=0
    if ! command -v md5 &>/dev/null; then
        # This should never happen
        echo "md5 could not be found"
        WAS_ERROR=1
    fi
    if [ "$(command -v md5)" ]; then
        CURRENT_HASH=$(md5 "${FILE}")
        # "##* " in "${CURRENT_HASH##* }" gets the last word in a string
        if [ "${HASH}" = "${CURRENT_HASH##* }" ]; then
            echo "File matches md5sum hash"
            WAS_ERROR=0
        else
            echo "File does not match md5sum hash"
            echo "Expected: ${CURRENT_HASH}"
            echo "File: ${HASH}"
            WAS_ERROR=1
        fi
    fi
    if [ ${WAS_ERROR} == 1 ]; then
        echo "Error verifying hash sum."
        exit 1
    fi
}

function private_validate() {
    if [ -f "$1" ]; then
        echo "File Downloaded."
        private_gethash "$1" "$2"
    else
        echo "Failed to download file."
        exit 1
    fi
}

# Download file
private_download "${URL}" "${SAVE_PATH}"
# If SUM is not empty
if [[ -n "${SUM}" ]]; then
    # Verify that the file was download
    # Compare hash from parameter to the file's calculated md5 sum
    private_validate "${SAVE_PATH}" "${SUM}"
fi

 

Zugriff auf über 300 Skripte im NinjaOne Dojo

Zugang erhalten

Skript-Übersicht

Dieses Skript benötigt in erster Linie drei Parameter: die URL, von der die Datei heruntergeladen werden soll, den Pfad, unter dem die Datei gespeichert werden soll, und einen optionalen MD5-Hash zur Überprüfung des Inhalts. Wenn der Pfad nicht existiert, erstellt das Skript die erforderlichen Ordner, was bei komplexen Verzeichnisstrukturen einen erheblichen Vorteil darstellt.

Das Skript beginnt mit der Validierung der URL- und Pfadparameter. Wenn einer dieser Parameter ungültig ist, wird das Programm sofort beendet und ein Fehler ausgegeben. Das Skript verwendet reguläre Ausdrücke, um die URL und den Pfad zu überprüfen.

Sobald die Parameter überprüft wurden, wird die Datei heruntergeladen. Das Skript ist so konzipiert, dass es entweder „wget“ oder „curl“ verwendet, je nachdem, was in der jeweiligen Umgebung verfügbar ist.

Nach dem erfolgreichen Herunterladen der Datei wird der Inhalt der heruntergeladenen Datei, sofern ein MD5-Hash angegeben wurde, mit dem angegebenen Hashwert verglichen. Diese Funktion ist besonders nützlich, wenn die Integrität von Dateien überprüft wird, ein kritischer Aspekt bei vielen IT-Vorgängen.

Skript-Befehle

Das Skript verwendet in erster Linie die Befehle „wget“ oder „curl“ zum Herunterladen von Dateien, die in Unix-basierten Systemen gängige Werkzeuge sind. „wget“ und „curl“ sind beides kostenlose Dienstprogramme zum nicht-interaktiven Herunterladen von Dateien aus dem Internet und unterstützen die Protokolle HTTP, HTTPS und FTP.

Das Skript verwendet auch ‚md5‘, ein Befehlszeilen-Dienstprogramm, das den MD5 Message Digest berechnet und überprüft. Der MD5-Hash-Wert (128 Bit) wird in der Regel als eine Folge von 32 hexadezimalen Ziffern dargestellt. Es wird verwendet, um die Datenintegrität von Dateien zu gewährleisten, indem ein eindeutiger Hash-Wert für den Inhalt einer Datei erzeugt wird. Wenn zwei Dateien denselben MD5-Hash-Wert haben, ist es sehr wahrscheinlich, dass es sich um dieselben Dateien handelt.

Der Befehl „mkdir -p“ wird verwendet, um den Verzeichnispfad zu erstellen, wenn er nicht existiert. Das Flag „-p“ sorgt dafür, dass kein Fehler gemeldet wird, wenn ein als Operand angegebenes Verzeichnis bereits existiert.

Das Skript verwendet „command -v“, um die Verfügbarkeit der Befehle „wget“, „curl“ und „md5“ in der Umgebung zu prüfen. Es verwendet auch reguläre Ausdrücke und bedingte Anweisungen.[[‚ and ‚]]‘, um die URL und den Pfad zu validieren.

Als Nächstes wollen wir uns das Skript genauer ansehen und seine Anwendungsmöglichkeiten erkunden.

Mögliche Anwendungen

Dieses Bash-Skript kann in einer Vielzahl von Szenarien verwendet werden:

  1. Software-Updates: Das Skript kann verwendet werden, um den Download von Software-Updates von der Website eines Herstellers zu automatisieren. Nach dem Herunterladen könnte ein weiteres Skript verwendet werden, um diese Updates auf mehrere Systeme in einem Netzwerk anzuwenden.
  2. Sicherheits-Patches: Sicherheitspatches werden häufig als herunterladbare Dateien im Internet veröffentlicht. Dieses Skript kann den Download dieser Patches automatisieren und so sicherstellen, dass alle Systeme in einem Netzwerk auf dem neuesten Stand sind und sicher bleiben.
  3. Datendateien: In datenintensiven Umgebungen ist es üblich, dass Datendateien auf Webservern gehostet werden. Dieses Skript kann verwendet werden, um solche Dateien für die weitere Datenanalyse oder -verarbeitung herunterzuladen.
  4. Verteilte Systeme: In einem verteilten System kann es erforderlich sein, eine bestimmte Datei über mehrere Systeme hinweg herunterzuladen und zu überprüfen. Das Skript kann verwendet werden, um sicherzustellen, dass auf allen Systemen die gleiche Version einer Datei verwendet wird.
  5. Backup und Wiederherstellung: Das Skript kann zum Herunterladen von Sicherungsdateien von einem entfernten Server für Disaster-Recovery-Zwecke verwendet werden.

Wenn IT-Fachleute die Mechanismen des Skripts verstehen, können sie sie verändern und erweitern, um es an ihre spezifischen Bedürfnisse anzupassen und ihre Automatisierungsfähigkeiten weiter zu verbessern.

Vorteile für IT-Fachleute und MSPs

Dieses Skript bietet zahlreiche Vorteile für IT-Expert:innen und MSPs:

  • Zeitersparnis: Anstatt Dateien manuell herunterzuladen, können Fachleute dieses Skript verwenden, um den Prozess zu automatisieren und so wertvolle Zeit zu sparen.
  • Fehlerreduzierung: Durch das automatische Herunterladen und die MD5-Überprüfung wird die Gefahr menschlicher Fehler erheblich reduziert.
  • Flexibilität: Das Skript kann entweder „wget“ oder „curl“ verwenden, wodurch es an verschiedene Umgebungen angepasst werden kann.
  • Integrität der Datei: Durch den Vergleich von MD5-Hashes stellt das Skript die Integrität der heruntergeladenen Datei sicher, was bei sicherheitsrelevanten Vorgängen entscheidend ist.

Abschließende Überlegungen

Dieses Bash-Skript vereinfacht eine gängige Aufgabe, verbessert die Effizienz und erhöht die Zuverlässigkeit und Sicherheit. Egal, ob Sie ein erfahrener Systemadministrator sind oder gerade erst in die IT-Welt einsteigen, dieses Skript ist eine wertvolle Ergänzung zu Ihrem Toolkit.

NinjaOnes hoch bewertete Fernüberwachungs- und Managementplattform kann die Bereitstellung und Ausführung dieses Bash-Skripts auf mehreren Systemen nahtlos ermöglichen. Egal, ob Sie Software-Updates, Sicherheits-Patches oder Dateien herunterladen möchten, die Integration dieses Skripts in NinjaOne kann Ihnen dabei helfen diese IT-Prozesse zu automatisieren und zu rationalisieren. Es kann Konsistenz gewährleisten, manuelle Fehler reduzieren und Zeit sparen, indem es Massenverteilungen ermöglicht. So können die robusten Funktionen von NinjaOne in Verbindung mit diesem Skript die betriebliche Effizienz und Produktivität erheblich steigern.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Endpoint Management schauen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion der NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche „Ich akzeptiere“ klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird „wie gesehen“ und „wie verfügbar“ bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).