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
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:
- 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.
- 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.
- 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.
- 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.
- 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.