Hi Leute,
wie der Titel verrät habe ich Schwierigkeiten mit einem Shell-Skript, welches ich gerne ausführen lassen möchte. Vorab die Info: Ich bin bei weitem kein Experte was solche Skripte betrifft und habe nur bedingt Erfahrungen sammeln können.
Das Skript heißt fritzbox-vert-update.sh - Ziel dieses Skripts soll es sein, das von Letsencrypt erstellte Zertifikat (in drei Teile unterteilt), in eine *.cert-Datei zu konvertieren und auf die Fritzbox zu laden.
Das Skript sieht wie folgt aus (Quelle):
Wenn ich jetzt das Skript in Bash bzw. in der Shell starte, erhalte ich jedes mal die folgende Fehlermeldung:
Ich vermutete irgendeinen Fehler in besagtem iconv und habe iconv so gestartet, mit ähnlicher Fehlermeldung:
Nun stoße ich jedoch an meine Grenzen, den Fehler weiterhin zu beheben. Ich hoffe, ihr könnt mir weiterhelfen 
wie der Titel verrät habe ich Schwierigkeiten mit einem Shell-Skript, welches ich gerne ausführen lassen möchte. Vorab die Info: Ich bin bei weitem kein Experte was solche Skripte betrifft und habe nur bedingt Erfahrungen sammeln können.
Das Skript heißt fritzbox-vert-update.sh - Ziel dieses Skripts soll es sein, das von Letsencrypt erstellte Zertifikat (in drei Teile unterteilt), in eine *.cert-Datei zu konvertieren und auf die Fritzbox zu laden.
Das Skript sieht wie folgt aus (Quelle):
PHP:
#!/bin/bash
# parameters
USERNAME="maybe empty"
PASSWORD="fritzbox-password"
CERTPATH="path to cert eg /etc/letsencrypt/live/domain.tld/"
CERTPASSWORD="cert password if needed"
HOST=http://fritz.box
# make and secure a temporary file
TMP="$(mktemp -t XXXXXX)"
chmod 600 $TMP
# login to the box and get a valid SID
CHALLENGE=`wget -q -O - $HOST/login_sid.lua | sed -e 's/^.*<Challenge>//' -e 's/<\/Challenge>.*$//'`
HASH="`echo -n $CHALLENGE-$PASSWORD | iconv -f ASCII -t UTF16LE |md5sum|awk '{print $1}'`"
SID=`wget -q -O - "$HOST/login_sid.lua?sid=0000000000000000&username=$USERNAME&response=$CHALLENGE-$HASH"| sed -e 's/^.*<SID>//' -e 's/<\/SID>.*$//'`
# generate our upload request
BOUNDARY="---------------------------"`date +%Y%m%d%H%M%S`
printf -- "--$BOUNDARY\r\n" >> $TMP
printf "Content-Disposition: form-data; name=\"sid\"\r\n\r\n$SID\r\n" >> $TMP
printf -- "--$BOUNDARY\r\n" >> $TMP
printf "Content-Disposition: form-data; name=\"BoxCertPassword\"\r\n\r\n$CERTPASSWORD\r\n" >> $TMP
printf -- "--$BOUNDARY\r\n" >> $TMP
printf "Content-Disposition: form-data; name=\"BoxCertImportFile\"; filename=\"BoxCert.pem\"\r\n" >> $TMP
printf "Content-Type: application/octet-stream\r\n\r\n" >> $TMP
cat $CERTPATH/privkey.pem >> $TMP
cat $CERTPATH/fullchain.pem >> $TMP
printf "\r\n" >> $TMP
printf -- "--$BOUNDARY--" >> $TMP
# upload the certificate to the box
wget -q -O - $HOST/cgi-bin/firmwarecfg --header="Content-type: multipart/form-data boundary=$BOUNDARY" --post-file $TMP | grep SSL
# clean up
rm -f $TMP
Wenn ich jetzt das Skript in Bash bzw. in der Shell starte, erhalte ich jedes mal die folgende Fehlermeldung:
Rich (BBCode):
bash-4.4# fritzbox-cert-update.sh
/bin/fritzbox-cert-update.sh: line 17: /opt/bin/iconv: No such file or directory
Ich vermutete irgendeinen Fehler in besagtem iconv und habe iconv so gestartet, mit ähnlicher Fehlermeldung:
Rich (BBCode):
-bash: /opt/bin/iconv: No such file or directory

Das Skript lief, alsbald ich es in den /usr/bin-Ordner verschoben hatte. Zumindest ich das so beurteilen kann, es kamen immerhin keine Fehlermeldungen. Jedoch ohne den gewünschten Erfolg. Das Zertifikat auf der FritzBox blieb dasselbe wie zuvor. Heißt für mich, dass der Fehler irgendwo bei der Fritzbox oder im Skript zu suchen ist. Jedoch wird mir das zu viel Aufwand, nur um das Zertifikat auf die FritzBox zu bekommen.

