Sie möchten also herunterladen und ausführen http://example.com/install.sh
.
Im Moment gehe ich davon aus, dass Sie den SHA256-Hash lokal in einer Datei namens gespeichert haben my-sha256.txt
. Die Datei enthält nur den Hash selbst und ein Zeilenumbruchzeichen im Unix-Stil, daher muss ihre Größe genau 65 Byte betragen. Sie können es erstellen, indem Sie einfach Folgendes ausführen:
sha256sum ORIGINAL_FILE.SH | grep -Eo '^\w+' > my-sha256.txt
Wie Sie diese Hash-Datei von Ihrem Entwicklungscomputer an den Client verteilen, ist nicht Teil dieser Antwort (dennoch können Sie Ihre Frage klären und mich bitten, diesen Teil basierend auf Ihren detaillierten Spezifikationen zu aktualisieren).
Der eigentliche Befehl, den Ihr Client ausführen muss, um das Skript herunterzuladen, zu überprüfen und bei Erfolg auszuführen, könnte folgendermaßen aussehen:
t=$(mktemp) && wget 'http://example.com/install.sh' -qO "$t" && if sha256sum "$t" | grep -Eo '^\w+' | cmp -s my-sha256.txt ; then bash "$t" ; else echo FAIL ; fi ; rm "$t"
Leicht verkürzte und hässliche Version ohne Leerzeichen:
t=$(mktemp)&&wget 'http://example.com/install.sh' -qO"$t"&&if sha256sum "$t"|grep -Eo '^\w+'|cmp -s my-sha256.txt;then bash "$t";else echo FAIL;fi;rm "$t"
Zur besseren Lesbarkeit in mehreren Zeilen platziert:
t=$(mktemp) &&
wget 'http://example.com/install.sh' -qO "$t" &&
if sha256sum "$t" | grep -Eo '^\w+' | cmp -s my-sha256.txt
then bash "$t"
else echo FAIL
fi
rm "$t"
Wenn Sie den Hash direkt im Befehl als Zeichenfolge bereitstellen möchten, anstatt aus einer Datei zu lesen, verwenden Sie einfach eine meiner obigen ursprünglichen Befehlsversionen und ersetzen Sie das Vorkommen von my-sha256.txt
durch <(echo YOUR_HASH)
, indem Sie Ihren echten Hash anstelle des Platzhalters "YOUR_HASH" einfügen.
Erläuterung:
Das Skript / der Einzeiler erstellt zuerst eine temporäre Datei mit mktemp
(verwendet den temporären Ordner des Systems /tmp
).
Anschließend wird wget
Ihr Installationsskript von der angegebenen URL heruntergeladen und in der temporären Datei gespeichert.
Jetzt berechnen wir die Hash-Summe, filtern nur den Hash-Wert aus der Ausgabe von sha256sum
und vergleichen diesen mit dem, was wir in out gespeichert haben my-sha256.txt
.
Wenn beide Hashes gleich sind, werden wir bash
mit unserer temporären Skriptdatei als Argument aufrufen , andernfalls echo FAIL
könnten wir oder Sie eine benutzerdefinierte Fehlermeldung ausgeben.
Am Ende bereinigen wir in beiden Fällen unsere temporäre Datei.
Wenn Sie jedoch auf das Problem der sicheren Verteilung des Hashs zur Überprüfung des ursprünglichen Skripts zurückkommen, hilft Ihnen diese obige Lösung nicht viel, da sie ein Problem löst, indem ein anderes der gleichen Art erstellt wird.
Was Sie eigentlich tun sollten, ist, ein GPG-Schlüsselpaar zu erstellen (und Ihren öffentlichen Schlüssel auf einem Schlüsselserver zu veröffentlichen), Ihr Skript damit zu signieren und die komprimierte signierte Binärdatei zum Download anzubieten. Lassen Sie dann den Client das Skript gpg
erneut überprüfen und entschlüsseln und führen Sie es bei Erfolg aus.