-
Notifications
You must be signed in to change notification settings - Fork 0
/
SSL-Skript.sh
378 lines (300 loc) · 8.89 KB
/
SSL-Skript.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
#!/bin/bash
# Gucken ob der Benutzer root ist
if [ "$(id -u)" != "0" ]; then
echo $(tput setaf 1)Bitte wechseln Sie zu einem Admin/Root Benutzer$(tput sgr0)
exit 1;
fi
#Name vom Script
SCRIPTNAME="SSL"
LOCK=".lock-ssl"
#Benutzer
Benutzer1=root
Benutzer2=admin
# Fehler Codes
FEHLER1='Vermutlich wurde crontab noch nie benutzt und wurde deshalb nicht generiert versuche ein Test Kommando in "crontab -e" hinzuzufügen und versuche es erneut FehlerCode(01)'
FEHLER2="Fehler der Benutzername, mit dem sie Eingeloggt sind, ist unbekannt! FehlerCode(02)"
FEHLER3="Die Domain, die Sie Hinzufügen möchte, existiert bereits! FehlerCode(03)"
FEHLER4="Domain wurde nicht hinzugefügt. Prüfe, ob die Domain ein Typ von A/AAAA hat! FehlerCode(04)"
FEHLER5="Das Zertifikat ist nicht älter als 10 Minuten! FehlerCode(05)"
FEHLER6="Der Apache2 dienst wurde wohl möglich an einem besonderen Ort installiert?! FehlerCode(06)"
content=$(wget https://raw.githubusercontent.com/lofentblack/SSL-Skript/refs/heads/main/version.txt -q -O -)
Version=$content
checkUpdate() {
content=$(wget https://raw.githubusercontent.com/lofentblack/SSL-Skript/refs/heads/main/version.txt -q -O -)
version=$content
# Eingabedatei
AnzahlZeilen=$(wc -l ${LOCK} | awk ' // { print $1; } ')
for LaufZeile in $(seq 1 ${AnzahlZeilen})
do
Zeile=$(sed -n "${LaufZeile}p" ${LOCK})
Test=${Zeile}
if [[ "$Test" == *"version"* ]]; then
if [[ "$Test" == *"version"* ]]; then
var1=$(sed 's/version=//' <<< "$Test")
var2=$(sed 's/^.//;s/.$//' <<< "$var1")
SkriptVersion=$var2
fi
fi
done
if ! [[ $version == $SkriptVersion ]]; then
sudo apt-get install wget -y
clear
clear
echo $(tput setaf 3)"Update von Version "$SkriptVersion" zu "$version"."
echo "$(tput sgr0)"
wget https://raw.githubusercontent.com/lofentblack/SSL-Skript/refs/heads/main/SSL-Skript.sh -O SSL-Skript.sh.new
rm $LOCK
chmod 775 SSL-Skript.sh.new
rm SSL-Skript.sh
mv SSL-Skript.sh.new SSL-Skript.sh
fi
}
checkUpdate
lofentblackDEScript() {
rot="$(tput setaf 1)"
gruen="$(tput setaf 2)"
gelb="$(tput setaf 3)"
dunkelblau="$(tput setaf 4)"
lila="$(tput setaf 5)"
turkies="$(tput setaf 6)"
# Notwendige Packete
installations_packete() {
apt-get install sudo -y
sudo apt-get update -y
sudo apt-get install screen -y
screen=instalations_packete_lb.de_script
screen -Sdm $screen apt-get install figlet -y && screen -Sdm $screen sudo apt install certbot python-certbot-apache -y && screen -Sdm $screen sudo apt-get upgrade -y && screen -Sdm $screen sudo apt-get install certbot -y
sleep 10
echo "Notwendige Pakete Installiert"
sleep 1
clear
clear
echo $gruen"Bitte starte das Skript neu!"
echo "$(tput sgr0)"
}
LOGO() {
clear
clear
echo "$(tput setaf 2)"
figlet -f slant -c $SCRIPTNAME
echo $rot
echo "Mit dem Ausführen Akzeptieren Sie die Lizenz von Lofentblack.de/licence."
echo "$(tput sgr0)"
}
# Script Verzeichniss
reldir=`dirname $0`
cd $reldir
SCRIPTPATH=`pwd`
clear
clear
if [ -s $SCRIPTPATH/$LOCK ]; then
echo "$(tput setaf 2)"
figlet -f slant -c $SCRIPTNAME
echo $rot
echo "Mit dem Ausführen Akzeptieren Sie die Lofentblack.de/licence."
echo "Achtung dieses Skript funktioniert nur mit dem Webdienst Apache2"
echo "$(tput sgr0)"
echo "1) SSL Zertifikat Hinzufügen"
echo "2) Manuell Updaten"
echo "3) Monatlich Updaten (immer zum 1.)"
echo "4) Monatliches Updaten Deaktivieren"
echo "5) Lösche SSL"
echo "6) Beenden"
read -p "Was möchten Sie machen? " machen
if [ $machen == 1 ]; then
read -p "Bitte gebe nun die Domain ein, die du Hinzufügen möchtest: " domain
read -p 'Bitte gebe nun das webroot Verzeichnis an (z.b. "/var/www/html/"): ' verzeichnis
if ! [ -d /etc/letsencrypt/live/$domain ]; then
if ! [ -d $verzeichnis ]; then
mkdir $verzeichnis
if ! [ -s $verzeichnis/ ]; then
echo "Verzeichnis konnte nicht erstellt werden da es zu viele Unterordner sind."
echo "Versuchen Sie das Verzeichnis manuell zu Erstellen"
else
echo "Verzeichnis wurde Erstellt."
fi
else
echo "Verzeichnis gefunden."
fi
sleep 1
if ! [ -d /etc/apache2/sites-available/ ]; then
echo $FEHLER6
exit 0;
fi
cd /etc/apache2/sites-available/
> $domain.conf
echo -e '<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin '$domain'@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName '$domain'
Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias '$domain'
SSLCertificateFile /etc/letsencrypt/live/'$domain'/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/'$domain'/privkey.pem
</VirtualHost>
</IfModule>' >> $domain.conf
read -p "Ist die Domain eine Subdomain J/N " wasdas
if [ $wasdas = "y" ] || [ $wasdas = "Y" ] || [ $wasdas = "J" ] || [ $wasdas = "j" ] || [ $wasdas = "ja" ] || [ $wasdas = "Ja" ] || [ $wasdas = "Yes" ] || [ $wasdas = "yes" ] || [ $wasdas = "ok" ] || [ $wasdas = "Ok" ] || [ $wasdas = "OK" ] || [ $wasdas = "oK" ] || [ $wasdas = "JA" ] || [ $wasdas = "jA" ] || [ $wasdas = "YES" ] || [ $wasdas = "YEs" ] || [ $wasdas = "yES" ] || [ $wasdas = "yeS" ] || [ $wasdas = "YeS" ] || [ $wasdas = "yES" ] || [ $wasdas = "yEs" ]; then
sudo certbot -d $domain --expand
else
sudo certbot --authenticator webroot --installer apache -w $verzeichnis -d $domain
fi
sleep 1
sudo a2ensite $domain.conf
systemctl reload apache2
sleep 1
if [ -d /etc/letsencrypt/live/$domain ]; then
LOGO
echo $gruen
echo "Domain wurde Erfolgreich hinzugefügt"
echo "$(tput sgr0)"
else
echo $rot
echo "Domain wurde nicht hinzugefügt"
sudo a2dissite $domain.conf
rm /etc/apache2/sites-available/$domain
rm /etc/apache2/sites-enabled/$domain
systemctl reload apache2
echo $FEHLER4
echo "$(tput sgr0)"
exit 1;
fi
else
echo $FEHLER3
exit 0;
fi
fi
if [ $machen == 2 ]; then
echo "Manuelles updaten wird ausgeführt"
sleep 1
sudo certbot renew --force-renewal
cd /etc/letsencrypt/live/
ls > verzeichnisinhalt.txt
DATEI=$(head -n 1 verzeichnisinhalt.txt)
TNOW=$(date "+%s")
TDATEI=$(stat -c %Z $DATEI)
ALTER=$(($TNOW - $TDATEI))
rm -r verzeichnisinhalt.txt
LOGO
if ! [ $ALTER -gt 600 ]; then
#weniger als 10min
echo $gruen
echo "SSL Zertifikat Erfolgreich erneuert."
echo "$(tput sgr0)"
exit 0;
else
#alter als 10 min
echo $rot
echo "SSL Zertifikat nicht erneuert."
echo "$(tput sgr0)"
echo $FEHLER5
exit 0;
fi
fi
if [ $machen == 3 ]; then
if [ -d /var/spool/cron/crontabs/ ]; then
cd /var/spool/cron/crontabs/
if [ -f root ]; then
echo -e "0 0 1 * * sudo certbot renew --force-renewal" > root
else
echo $FEHLER2
exit 1;
fi
if [ -f admin ]; then
echo -e "0 0 1 * * sudo certbot renew --force-renewal" > admin
else
echo $FEHLER2
exit 1;
fi
if [ -f $Benutzer1 ]; then
DATEI=$Benutzer1
elif [ -f $Benutzer2 ]; then
DATEI=$Benutzer2
else
echo $FEHLER2
exit 1;
fi
TNOW=$(date "+%s")
TDATEI=$(stat -c %Z $DATEI)
ALTER=$(($TNOW - $TDATEI))
LOGO
if ! [ $ALTER -gt 600 ]; then
#weniger als 10min
echo $gruen
echo "Automatisches update aktiviert."
echo "$(tput sgr0)"
exit 0;
else
#alter als 10 min
echo $rot
echo "Automatisches update deaktiviert."
echo "$(tput sgr0)"
echo $FEHLER5
exit 1;
fi
else
echo $FEHLER1
fi
fi
if [ $machen == 4 ]; then
cd /var/spool/cron/crontabs/
if [ -f $Benutzer1 ]; then
DATEI=$Benutzer1
elif [ -f $Benutzer2 ]; then
DATEI=$Benutzer2
else
echo $FEHLER2
exit 1;
fi
sed '/^.*certbot.*$/d' $DATEI > ubergang.txt
rm -r $DATEI
mv ubergang.txt $DATEI
chmod 600 $DATEI
chgrp crontab $DATEI
TNOW=$(date "+%s")
TDATEI=$(stat -c %Z $DATEI)
ALTER=$(($TNOW - $TDATEI))
LOGO
if ! [ $ALTER -gt 600 ]; then
#weniger als 10min
echo $gruen
echo "Automatisches update deaktiviert."
echo "$(tput sgr0)"
exit 0;
else
#alter als 10 min
echo $rot
echo "Automatisches update wurde nicht Deaktiviert."
echo "$(tput sgr0)"
echo $FEHLER5
exit 1;
fi
fi
if [ $machen == 5 ]; then
read -p "Welche Domain möchten sie löschen? " del
sudo a2dissite $del.conf
sudo certbot delete --cert-name $del
systemctl reload apache2
echo "$(tput sgr0)"
echo "Erfolgreich Entfernt"
sleep 3
fi
if [ $machen == 6 ]; then
echo $turkies
echo "Einen schönen Tag Noch!"
echo "$(tput sgr0)"
exit 0;
fi
if [ -z $machen ] || [[ $machen =~ ^[a-z,A-Z]+$ ]]; then
exit 0;
fi
elif ! [ -s $SCRIPTPATH/$LOCK ]; then
> $LOCK
echo -e 'int=true\nversion="'$Version'"\n\n#Mit dieser Datei erkennt das Skript das alle notwendigen Pakete installiert worden sind.' > $SCRIPTPATH/$LOCK
installations_packete
fi
}
lofentblackDEScript