Huhu,
ich scheibe mir grad ein Skript womit ich mir Zertifikate von Providern abspeichern kann.
Mein Problem ist bei verschachtelten Befehlen, da fehlen mir die Kenntnisse um abzufragen ob der Prozess erfolgreich war.
Es handelt sich um Zeile 68
Die 2>&1 sollen in Variablen umgeleitet werden und es soll geprüft werden ob irgend welche Fehler aufgetaucht sind,
Wenn ja sollen die Fehler aufgelistet werden.
Hier mal das Skript ...
Code:
#!/bin/bash
# ~/bin/ssl-ca-get
# Dieses Skript speichert das Zertifikat eines Providers nach ~/.certs
# und dannach erstellt es die passenden Schlüssel.
# 2016-12-10 @suleiman
REMHOST=$1
REMPORT=${2:-993}
CERTPATH=~/.certs
CERTFILE="${CERTPATH}/${1}.pem"
################################
# Was noch gemacht werden muß...
# 20 - Abfrage ob $1 eine gültige Adresse ist
# 37 - select case Anweisung ist übertrieben, ich brauch da was weniger Kompliziertes
# 40 - GOTO Anweisung einfügen, damit man bei der Abfrage ob man die pem-Datei überschreiben will gleich zur Abfrage des Zertifikats kommt
# 68 - die 2>&1 sollen in Variablen umgeleitet werden und es soll geprüft werden ob irgend welche Fehler aufgetaucht sind, wenn ja müssen die Fehler aufgelistet werden
# Kontrollieren ob eine Adresse dem Skript übergeben wurde
if [ -z $REMHOST ] # Abfragen ob die Variable leer ist
then # Ja die Variable ist leer
echo "${0}: Es wurde keine Adresse gefunden."
echo "${0}: Es muß dem Skript eine Internet Adresse oder IP übergeben werden!"
echo "( Optional kann auch eine Portnummer übergeben werden )"
echo "Beispiel:"
echo "${0} imap.gmx.de 443"
echo ""
echo "Skript frühzeitig beendet."
exit 1
fi
# Kontrollieren ob das Zertifikat schon vorhanden ist und ob es ersetzt werden soll
if [ -e $CERTFILE ] # Checken ob es schon ein passendes Zertifikat gibt
then # Es gibt schon eine Datei mit dem gleichen Namen
echo "${0}: Es gibt schon eine Datei mit dem gleichen Namen."
read -p "${0}: Soll die Datei ${CERTFILE} ersetzt werden (J/n):" YESNO # Abfragen ob die Datei ersetzt werden soll
case "$YESNO" in # Die Antwort wir mit mit dieser case Anwendung ausgewertet
Yes|yes|Y|y|Ja|ja|J|j) # Ja die Datei darf überschrieben werden
echo "${0}: No Problemo! Datei wird überschieben."
# Hier könnt eine GOTO Anweisung eingefügt werden
;;
*) # Datei soll NICHT überschrieben werden
echo "Skript frühzeitig beendet."
exit 0
;;
esac
fi
# Passendes Unterverzsichnis für die Zertifikate gegebenenfalls erstellen
if [ ! -d $CERTPATH ] # Abfrage ob ein passendes Unterverzeichnis erstellt wurde
then # Es wurde kein Unterverzeichnis gefunden
mkdir $CERTPATH # Unterverzeichnis erstellen
if [ $? -ne 0 ] # Abfrage ob das Verzeichnis erstellt wurde
then # Verzeichnis konnte nicht erstellt weerden
echo "Pfad: ${CERTPATH} konnte nicht erstellt werden."
echo "Skript frühzeitig beendet."
exit 1 # Skript beenden
else # Verzeichnis wurde erstellt
chmod 700 $CERTPATH # Zugriffsrechte anpassen
fi
fi
# Es wird nun eine ssl-Verbindung aufgebaut und nach dem Zertifikat gefragt.
# Dann wird die Verbindung wieder beendet und der erhaltene Text wird "sed" übergeben.
# sed extraiert das Zertifikat und schreibt es in eine Datei.
echo "cc logout" | openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $CERTFILE
if [ $? -ne 0 ] # Abfragen ob "sed" korrekt ausgeführt wurde.
then # Ein Fehler ist aufgetrehten... Einen Warnschuss ablassen!
echo "Fehler ... Error ... MURDER DEATH KILL ... nix Zertifikat, ätsch!"
exit 1 # Skript beenden
fi
# Wenn das Skript bis hier hin kommt ist alles in ordnug soweit und das Zertifikat wurde in eine Datei geparkt.
echo "${0}: Datei ${CERTFILE} wurde angelegt."
# Jetzt müssen nur noch die Hashkeys gelinkt werden
echo "${0}: Erstelle nun die hash-keys."
c_rehash $CERTPATH # Erstellen der Hashkeys
if [ $? -ne 0 ] # Abfragen ob die Hashkeys korrekt erstellt wurden.
then # Ein Fehler ist aufgetrehten... Einen Warnschuss ablassen!
echo "${0}: Es konnten keine hash-keys erstellt werden."
echo "Skript frühzeitig beendet."
exit 1 # Skript beenden
else
chmod 600 $CERTFILE # Zugriffsrechte anpassen
fi
echo "${0}: Skript wurde erfolgreich ausgeführt. Wünsche einen schönen Tag noch!"
exit 0
Lesezeichen