Bash Script erstellen

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Bash Script erstellen

Beitrag von rodeoric » 23.12.2019 15:14:54

Hallo zusammen :D ,

nach vielen Stunden rumprobieren und :google: habe ich mich nun entschlossen einen Versuch hier zu wagen.

Ich beschäftige mich seit geraumer Zeit mit Linux, nun dachte ich mir mal etwas rumzuprobieren.

Ich habe dahingehend so lange an meinem Command gebastelt so dass, wenn ich diese nacheinander in das Terminal reinkopiere genau das dann zum gewünschten Ergebnis führt.

Nun dachte ich, kann ja nicht so schwer sein das in ein .sh Script zu verpacken und via Crontab ausführen zu lassen, da habe ich leider völlig falsch gedacht und nun bin ich hier. :D

System: Debian 6.3 , es handelt sich dabei um einen Proxmox Host.

Folgende Commands habe ich zusammengebastelt, diese könnte man sicher optimieren, aber das würde ich gern im Anschluss erst machen.

Code: Alles auswählen

cp /var/log/auth.log /root/auth.log
grep -o -E "([0-9]*.\.[0-9]*.\.[0-9]*.\.[0-9])+(.*Bye*)" /root/auth.log > /root/ip_with_bye.txt
grep -o -E "(Failed*.*)+([0-9]*.\.[0-9]*.\.[0-9]*.\.[0-9])" /root/auth.log > /root/ip_with_failed_pw.txt
grep -o -E "([0-9]*.\.[0-9]*.\.[0-9]*.\.[0-9]*.)" /root/ip_with_bye.txt > /root/ip_list.txt
grep -o -E "([0-9]*.\.[0-9]*.\.[0-9]*.\.[0-9]*.)" /root/ip_with_failed_pw.txt >> /root/ip_list.txt
awk '{print $0"[12/10/2019 23:59:59]"}' /root/ip_list.txt >> /root/ip.blacklist_new
rm -r ip_with_bye*
rm -r /root/ip_with_failed_pw*
rm -r /root/ip_list*
rm -r /root/auth*
cp /etc/fail2ban/ip.blacklist /root/ip.blacklist_old
cat /root/ip.blacklist_old /root/ip.blacklist_new > /root/ip.blacklist_unsort
rm -r /root/ip.blacklist_old*
rm -r /root/ip.blacklist_new*
sort -u /root/ip.blacklist_unsort > /root/ip.blacklist
rm -r /root/ip.blacklist_unsort*
cp /root/ip.blacklist /etc/fail2ban/ip.blacklist_new
Wie gesagt wenn ich diese nacheinader ausführe, läuft das genau so wie geplant. :THX:

Mein Script ".sh" sieht wie folgt aus:

Code: Alles auswählen

#!/bin/bash
cp /var/log/auth.log /root/auth.log
echo grep -o -E "([0-9]*.\.[0-9]*.\.[0-9]*.\.[0-9])+(.*Bye*)" /root/auth.log > /root/ip_with_bye.txt
sleep 10;
echo grep -o -E "(Failed*.*)+([0-9]*.\.[0-9]*.\.[0-9]*.\.[0-9])" /root/auth.log > /root/ip_with_failed_pw.txt
sleep 10;
echo grep -o -E "([0-9]*.\.[0-9]*.\.[0-9]*.\.[0-9]*.)" /root/ip_with_bye.txt > /root/ip_list.txt
sleep 10;
echo grep -o -E "([0-9]*.\.[0-9]*.\.[0-9]*.\.[0-9]*.)" /root/ip_with_failed_pw.txt >> /root/ip_list.txt
sleep 10;
awk '{print $0"[12/10/2019 23:59:59]"}' /root/ip_list.txt >> /root/ip.blacklist_new
sleep 10;
rm -r ip_with_bye*
rm -r /root/ip_with_failed_pw*
rm -r /root/ip_list*
rm -r /root/auth*
cp /etc/fail2ban/ip.blacklist /root/ip.blacklist_old
cat /root/ip.blacklist_old /root/ip.blacklist_new > /root/ip.blacklist_unsort
sleep 10;
rm -r /root/ip.blacklist_old*
rm -r /root/ip.blacklist_new*
sort -u /root/ip.blacklist_unsort > /root/ip.blacklist
sleep 15;
rm -r /root/ip.blacklist_unsort*
cp /root/ip.blacklist /etc/fail2ban/ip.blacklist_new
Allerdings funktioniert dies vorne und hinten nicht auch ohne "echo" vor den "grep" commands klappt es nicht. :hail:

Ich finde leider auch mit :google: keine umsetzbare Lösung, aber ich würde es gern lernen, daher hoffe ich auf eure Unterstützung.

Vielen Dank vorab. :THX:

Lg
rodeoric

Benutzeravatar
Tintom
Moderator
Beiträge: 3069
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: Bash Script erstellen

Beitrag von Tintom » 23.12.2019 15:31:38

Hallo und willkommen!
Wie lautet die crontab?

Benutzeravatar
Meillo
Moderator
Beiträge: 9261
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 23.12.2019 15:37:24

rodeoric hat geschrieben: ↑ zum Beitrag ↑
23.12.2019 15:14:54
Hallo zusammen :D ,

nach vielen Stunden rumprobieren und :google: habe ich mich nun entschlossen einen Versuch hier zu wagen.
Hallo und herzlichen Willkommen im Forum! :-)

Es war jedenfalls schon mal eine gute Entscheidung, dich in der Situation an ein Forum zu wenden. Wir koennen dir bestimmt weiterhelfen.
Ich beschäftige mich seit geraumer Zeit mit Linux, nun dachte ich mir mal etwas rumzuprobieren.
Klasse! :THX:
Ich habe dahingehend so lange an meinem Command gebastelt so dass, wenn ich diese nacheinander in das Terminal reinkopiere genau das dann zum gewünschten Ergebnis führt.

Nun dachte ich, kann ja nicht so schwer sein das in ein .sh Script zu verpacken und via Crontab ausführen zu lassen, da habe ich leider völlig falsch gedacht und nun bin ich hier. :D
Allerdings funktioniert dies vorne und hinten nicht auch ohne "echo" vor den "grep" commands klappt es nicht. :hail:
Bevor wir uns dein Script vornehmen, sollten wir erst mal die Voraussetzungen pruefen:

- Hast du schon mal ein Shellscript geschrieben, es ausfuehrbar gemacht und es ausgefuehrt?

- Hast du schon mal einen Cronjob angelegt, der funktioniert hat?

- Hast du schon mal die Ausgabemails von einem Cronjob gelesen?

(Da ich dich nicht kenne, weiss ich nicht was ich voraussetzen kann, wo deine Kenntnisse stehen, etc.)


Auf der Basis solltest du dann zuerst ein einfaches Script als Cronjob einrichten und das dann inkrementell erweitern, bis du dein gewuenschtes Script am Laufen hast. Wenn du es so machst, dann stehst du naemlich nicht vor einem Es-geht-gar-nichts, sondern hast viele Zwischenstufen, von denen die ersten funktionieren und die letzten nicht, so dass du schauen kannst, ab welcher Stufe genau es nicht funktioniert.

Schreibe gerne mehr ... auch was genau ``es funktioniert hinten und vorne nicht'' bedeutet. ;-)


Bis bald wieder.
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 23.12.2019 16:53:42

Hallo,

vielen Dank für die netten Worte.

Ich habe zusätzlich noch einen Ubuntu Server für Plex, da sind die Mount Befehle für die verschiedenen Laufwerke aus der Cloud auch in einer .sh Datei angelegt. Diese wird beispielsweise @reboot ausgeführt, was den Vorteil hat das alle Laufwerke nacheinander eingebunden werden. Das Script sieht gleich aus wie das untere nur eben mit rclone commands. Das funktioniert auch tadellos und ich dachte na gut, dann tausche ich die commands einfach mit denen hier aus, aber eben genau das klappt nicht :D :hail:

Was Du mit Crontab Mail meinst, weiß ich leider nicht, ist mir bisher auch nicht in den Weg gekommen.
Schreibe gerne mehr ... auch was genau ``es funktioniert hinten und vorne nicht'' bedeutet.
Um das etwas abzukürzen, hier mal der Auszug nachdem ich das Script via "bash script.sh" gestartet habe. Wie gesagt, wenn die Befehle nacheinander im Terminal eingegeben werden, funktionieren diese. Daher lasst euch nicht davon irritieren das er sagt "No such file or directoy".

Code: Alles auswählen

root@hostname ~ # bash blacklist_create.sh
blacklist_create.sh: line 4: $'\r': command not found
blacklist_create.sh: line 6: $'\r': command not found
blacklist_create.sh: line 8: $'\r': command not found
blacklist_create.sh: line 10: $'\r': command not found
awk: cannot open /root/ip_list.txt (No such file or directory)
blacklist_create.sh: line 12: $'\r': command not found
cat: /root/ip.blacklist_old: No such file or directory
cat: /root/ip.blacklist_new: No such file or directory
blacklist_create.sh: line 19: $'\r': command not found
sort: cannot read: /root/ip.blacklist_unsort: No such file or directory
blacklist_create.sh: line 23: $'\r': command not found
cp: cannot stat '/root/ip.blacklist': No such file or directory
Hallo und willkommen!
Wie lautet die crontab?
Im Crontab habe ich das Script ja noch nicht drinnen. Ich brauche erstmal nur eine funktionierende "script.sh" Datei mit den obigen Commands.
Danach kann ich diese problemlos in den Crontab einbinden und zeitlich abstimmen wann das Script der Reihe nach ausgeführt wird.

Lg
rodeoric

Benutzeravatar
MSfree
Beiträge: 11667
Registriert: 25.09.2007 19:59:30

Re: Bash Script erstellen

Beitrag von MSfree » 23.12.2019 17:10:44

rodeoric hat geschrieben: ↑ zum Beitrag ↑
23.12.2019 16:53:42

Code: Alles auswählen

root@hostname ~ # bash blacklist_create.sh
blacklist_create.sh: line 4: $'\r': command not found
Mit was für einem Editor hast du denn dieses Script editiert? Mir sieht das nach Windows und Notepad aus.

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 23.12.2019 17:12:42

Hallo,
Mit was für einem Editor hast du denn dieses Script editiert? Mir sieht das nach Windows und Notepad aus.
Korrekt, mit Notepad++

Meinst daran könnte das liegen ? Ich probiere mal eben das Zeilenende auf Unix zu ändern. Na das wäre es ja jetzt wenn es daran liegen würde. :facepalm: :facepalm:

Benutzeravatar
Meillo
Moderator
Beiträge: 9261
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 23.12.2019 17:29:19

rodeoric hat geschrieben: ↑ zum Beitrag ↑
23.12.2019 16:53:42
Was Du mit Crontab Mail meinst, weiß ich leider nicht, ist mir bisher auch nicht in den Weg gekommen.
Wenn ein Cronjob (Fehler-)Ausgaben erzeugt, dann werden die per Mail (lokal auf dem Rechner) an den User geschickt, dem der Cronjob gehoert. Sie gehen also typischerweise nach /var/spool/mail. Mit dem Befehl `mail' kannst du sie von der Kommandozeile aus lesen. (Mit `q' kommst du wieder raus.) Wenn du von diesen Mails nichts weisst, dann kannst du auch keine Fehlermeldungen eines Cronjobs einsehen und ihn damit debuggen.
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 23.12.2019 17:31:37

Hallo,

das ist unglaublich. Das Script funktioniert einwandfrei nach der Codierung auf Unix im Notepad++. :facepalm: :facepalm: :facepalm:

Ein Problem habe ich dennoch, und zwar macht er mir in die am Schluss erstellte Datei "ip.blacklist" die erste Zeile leer und das mag "fail2ban" überhaupt nicht, so das er die Liste nicht einliest.

Woran könnte das noch liegen ?

Lg
rodeoric

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 23.12.2019 17:35:02

Meillo hat geschrieben: ↑ zum Beitrag ↑
23.12.2019 17:29:19
rodeoric hat geschrieben: ↑ zum Beitrag ↑
23.12.2019 16:53:42
Was Du mit Crontab Mail meinst, weiß ich leider nicht, ist mir bisher auch nicht in den Weg gekommen.
Wenn ein Cronjob (Fehler-)Ausgaben erzeugt, dann werden die per Mail (lokal auf dem Rechner) an den User geschickt, dem der Cronjob gehoert. Sie gehen also typischerweise nach /var/spool/mail. Mit dem Befehl `mail' kannst du sie von der Kommandozeile aus lesen. (Mit `q' kommst du wieder raus.) Wenn du von diesen Mails nichts weisst, dann kannst du auch keine Fehlermeldungen eines Cronjobs einsehen und ihn damit debuggen.
Danke für die Info.

Das Problem ist das ja der Cronjob nicht gesetzt war sondern das Script von mir von Hand ausgeführt wurde.

Aber das wäre natürlich eine Alternative um den Fehler vielleicht dort zu sehen.

Dankeschön.

Wenn wir nun noch den Fehler mit der ersten leeren Zeile hinbekommen, wäre ich einen ganzen Schritt weiter :D

Eventuell gibt es einen Befehl der die erste Zeile im Dokument einfach entfernt ?

Erledigt: sed -e '/^ *$/d' eingabeDatei > ausgabeDatei

Lg

TomL

Re: Bash Script erstellen

Beitrag von TomL » 23.12.2019 18:01:33

Steht das da noch so drin:
echo grep ....

Wenn ja, "echo" entfernen. Ausserdem ist es nicht notwendig, nur für grep's das Log vorher zu kopieren. Du kannst die grep's direkt auf das originale Log ausführen.

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 23.12.2019 18:05:02

TomL hat geschrieben: ↑ zum Beitrag ↑
23.12.2019 18:01:33
Steht das da noch so drin:
echo grep ....

Wenn ja, "echo" entfernen. Ausserdem ist es nicht notwendig, nur für grep's das Log vorher zu kopieren. Du kannst die grep's direkt auf das originale Log ausführen.
Hallo,

nein das echo musste ich entfernen da er sonst nur die Commands in die nächste Datei geschrieben hätte.

Ich probiere gerade ob fail2ban auch die Liste annimmt, ich werde mich hier nochmal melden denn wenn das mal klappt, hätte ich noch eine kleine Baustelle im selben Kontext.

Lg

Benutzeravatar
Meillo
Moderator
Beiträge: 9261
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 23.12.2019 19:56:07

rodeoric hat geschrieben: ↑ zum Beitrag ↑
23.12.2019 17:35:02
Eventuell gibt es einen Befehl der die erste Zeile im Dokument einfach entfernt ?

Erledigt: sed -e '/^ *$/d' eingabeDatei > ausgabeDatei
Um genau zu sein: Dieser Befehl entfernt alle Zeilen, die entweder leer sind oder nur Leerzeichen enthalten.

Wenn du genau die erste Zeile entfernen willst (egal was drin steht):

Code: Alles auswählen

sed 1d
Wenn du die erste Zeile nur dann entfernen willst, wenn sie leer ist oder Whitespace enthaelt:

Code: Alles auswählen

awk 'NR==1 && /^[ \t]*$/ {next} 1'
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 02:25:36

Meillo hat geschrieben: ↑ zum Beitrag ↑
23.12.2019 19:56:07
rodeoric hat geschrieben: ↑ zum Beitrag ↑
23.12.2019 17:35:02
Eventuell gibt es einen Befehl der die erste Zeile im Dokument einfach entfernt ?

Erledigt: sed -e '/^ *$/d' eingabeDatei > ausgabeDatei
Um genau zu sein: Dieser Befehl entfernt alle Zeilen, die entweder leer sind oder nur Leerzeichen enthalten.

Wenn du genau die erste Zeile entfernen willst (egal was drin steht):

Code: Alles auswählen

sed 1d
Wenn du die erste Zeile nur dann entfernen willst, wenn sie leer ist oder Whitespace enthaelt:

Code: Alles auswählen

awk 'NR==1 && /^[ \t]*$/ {next} 1'
Vielen Dank für die Rückmeldung.

Bis eben habe ich noch dran gebastelt, aber nun ist soweit alles fertig.

Aber ein gewaltiges Problem habe ich irgendwie mit dem Crontab.

Ich wollte damit eigentlich um 2 Uhr Nachts das Bash Script starten, aber irgendwie geht das nicht, es wird nicht ausgeführt. Wo könnte der Fehler sein ?

Code: Alles auswählen

0 2 * * * bash /etc/fail2ban/fail2ban-ip-whitelisting.sh
Lg
rodeoric

Bullet64
Beiträge: 49
Registriert: 02.06.2017 19:57:01

Re: Bash Script erstellen

Beitrag von Bullet64 » 24.12.2019 11:15:49

Code: Alles auswählen

# m h  dom mon dow   command
Mach mal das bash da weg.

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 11:20:45

Bullet64 hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 11:15:49

Code: Alles auswählen

# m h  dom mon dow   command
Mach mal das bash da weg.
Hallo,

hab ich jetzt gemacht, mal schauen ob er um 12 Uhr nachher durchläuft.

Ich gebe Bescheid.

Schöne Weihnachten.

Lg

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 11:29:25

Bullet64 hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 11:15:49

Code: Alles auswählen

# m h  dom mon dow   command
Mach mal das bash da weg.
P.s. Geile Webseite, direkt mal in die Favoriten.

Lg

Benutzeravatar
Meillo
Moderator
Beiträge: 9261
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 24.12.2019 12:02:02

rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 11:20:45
hab ich jetzt gemacht, mal schauen ob er um 12 Uhr nachher durchläuft.
Du kannst die Zeit ja auf in fuenf Minuten setzen, dann musst du keine 14 Stunden warten. Wenn's klappt, dann setzt du die Zeit auf den korrekten Wert.

Btw: Ist dein Script ausfuehrbar? (D.h. hat es `x' bei `ls -l'?)
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 12:05:31

Meillo hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 12:02:02
rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 11:20:45
hab ich jetzt gemacht, mal schauen ob er um 12 Uhr nachher durchläuft.
Du kannst die Zeit ja auf in fuenf Minuten setzen, dann musst du keine 14 Stunden warten. Wenn's klappt, dann setzt du die Zeit auf den korrekten Wert.

Btw: Ist dein Script ausfuehrbar? (D.h. hat es `x' bei `ls -l'?)
Servus,

das scheint nicht geklappt zu haben.

ls l zeigt folgendes:
-rwxr-xr-x 1 root root 686 Dec 24 00:13 fail2ban-ip-whitelisting.sh

Mein Crontab sieht nun wie folgt aus:
0 12 * * * /etc/fail2ban/fail2ban-ip-whitelisting.sh

Nachtrag: Das gibt mir die Proxmox Console aus. Aber sieht nicht so aus als hätte er das gemacht was er machen sollte. Manuell jedoch funktioniert das Script.
Dec 24 12:50:01 hostname CRON[7953]: (root) CMD (/etc/fail2ban/fail2ban-ip-whitelisting.sh)

Noch jemand eine Idee :D ?

Benutzeravatar
Meillo
Moderator
Beiträge: 9261
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Script erstellen

Beitrag von Meillo » 24.12.2019 12:57:13

rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 12:05:31
Nachtrag: Das gibt mir die Proxmox Console aus. Aber sieht nicht so aus als hätte er das gemacht was er machen sollte. Manuell jedoch funktioniert das Script.
Dec 24 12:50:01 hostname CRON[7953]: (root) CMD (/etc/fail2ban/fail2ban-ip-whitelisting.sh)

Noch jemand eine Idee :D ?
Sieht so aus, als ob der Cronjob ausgefuehrt (d.h. gestartet) worden ist. Nur das Script scheint nicht (vollstaendig) abgelaufen zu sein.

Hier kommt nun die Mail ins Spiel, die Cron verschickt, wenn der Job Ausgaben oder Fehler erzeugt hat.

Schaue dir also die Mail von root an. (Als User root den Befehl `mail' aufrufen. mit `p$' kannst du dir die letzte Mail anzeigen lassen. Mit `q' kommst du wieder raus.) Dort wird sich vermutlich eine Fehlermeldung finden.
Use ed once in a while!

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 13:14:49

Meillo hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 12:57:13
rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 12:05:31
Nachtrag: Das gibt mir die Proxmox Console aus. Aber sieht nicht so aus als hätte er das gemacht was er machen sollte. Manuell jedoch funktioniert das Script.
Dec 24 12:50:01 hostname CRON[7953]: (root) CMD (/etc/fail2ban/fail2ban-ip-whitelisting.sh)

Noch jemand eine Idee :D ?
Sieht so aus, als ob der Cronjob ausgefuehrt (d.h. gestartet) worden ist. Nur das Script scheint nicht (vollstaendig) abgelaufen zu sein.

Hier kommt nun die Mail ins Spiel, die Cron verschickt, wenn der Job Ausgaben oder Fehler erzeugt hat.

Schaue dir also die Mail von root an. (Als User root den Befehl `mail' aufrufen. mit `p$' kannst du dir die letzte Mail anzeigen lassen. Mit `q' kommst du wieder raus.) Dort wird sich vermutlich eine Fehlermeldung finden.
Hallo,

root@hostname ~ # mail
No mail for root
root@hostname ~ #

Da ist leider nichts gespeichert.

Das Script selbst sieht wie folgt aus: Die Server IP's und Domain habe ich lediglich für die öffentlichkeit ausgeblendet.

Code: Alles auswählen

#!/bin/bash
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
sleep 4;
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
sleep 2;
rm -r homeIP.txt
sleep 2;

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
IPfix="127.0.0.1\ 127.0.0.0\/8\ 10.0.0.0\/8\ 172.16.0.0\/12\ 192.168.0.0\/16\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
 
 
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
Lg

rodney
Beiträge: 389
Registriert: 09.12.2016 04:15:59

Re: Bash Script erstellen

Beitrag von rodney » 24.12.2019 13:31:20

Was soll die Zeile:

Code: Alles auswählen

wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
bezwecken?

Moechtest du https://einedomain.de/homeIP.txt in der Datei /etc/fail2ban/homeIP.txt speichern? Dann schau dir mal die Option -O von wget an.

Benutzeravatar
MSfree
Beiträge: 11667
Registriert: 25.09.2007 19:59:30

Re: Bash Script erstellen

Beitrag von MSfree » 24.12.2019 13:47:53

rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 13:14:49

Code: Alles auswählen

#!/bin/bash
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
sleep 4;
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
sleep 2;
rm -r homeIP.txt
sleep 2;

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
IPfix="127.0.0.1\ 127.0.0.0\/8\ 10.0.0.0\/8\ 172.16.0.0\/12\ 192.168.0.0\/16\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
 
 
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
Die "sleeps" sind überflüssig. Was wilst du damit bezwecken? Es braucht keine "Ruhepause" zwischen simplen Operationen wie denen, die du in deinem Skript hast.

Wenn du das Skript debuggen willst, auch, um festzustellen, ob das Ding überhaupt läuft, kannst du echo-Befehle einbauen und in eine Datei speichern.

Code: Alles auswählen

#!/bin/bash
echo "skript gestartet" >> /root/crondebug.txt
echo "Schritt 1" >> /root/crondebug.txt
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
echo "Schritt 2" >> /root/crondebug.txt
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
echo "Schritt 3" >> /root/crondebug.txt
rm -r homeIP.txt
echo "Schritt 4" >> /root/crondebug.txt

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
IPfix="127.0.0.1\ 127.0.0.0\/8\ 10.0.0.0\/8\ 172.16.0.0\/12\ 192.168.0.0\/16\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
echo "Schritt 5" >> /root/crondebug.txt
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
echo "Schritt 6" >> /root/crondebug.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
echo "skript beendet" >> /root/crondebug.txt
Das produziert die Datei /root/crondebug.txt, wenn es läuft und schreibt ein paar Marken in die Datei, die Rückschlüsse zuläßt, wie wet das Skript läuft.

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 24.12.2019 15:00:18

MSfree hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 13:47:53
rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 13:14:49

Code: Alles auswählen

#!/bin/bash
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
sleep 4;
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
sleep 2;
rm -r homeIP.txt
sleep 2;

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
IPfix="127.0.0.1\ 127.0.0.0\/8\ 10.0.0.0\/8\ 172.16.0.0\/12\ 192.168.0.0\/16\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
 
 
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
Die "sleeps" sind überflüssig. Was wilst du damit bezwecken? Es braucht keine "Ruhepause" zwischen simplen Operationen wie denen, die du in deinem Skript hast.

Wenn du das Skript debuggen willst, auch, um festzustellen, ob das Ding überhaupt läuft, kannst du echo-Befehle einbauen und in eine Datei speichern.

Code: Alles auswählen

#!/bin/bash
echo "skript gestartet" >> /root/crondebug.txt
echo "Schritt 1" >> /root/crondebug.txt
wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
echo "Schritt 2" >> /root/crondebug.txt
cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
echo "Schritt 3" >> /root/crondebug.txt
rm -r homeIP.txt
echo "Schritt 4" >> /root/crondebug.txt

IPn=`cat /etc/fail2ban/home_ip.txt`
IPo=`cat /etc/fail2ban/home_ip_old.txt`
IPfix="127.0.0.1\ 127.0.0.0\/8\ 10.0.0.0\/8\ 172.16.0.0\/12\ 192.168.0.0\/16\ 123.123.123.123\/24\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ 123.123.123.123\ "
CONFIG_FILE=/etc/fail2ban/jail.local
echo "Schritt 5" >> /root/crondebug.txt
if [ "$IPn" != "$IPo" ]
then
sed -i "s/\(ignoreip *= *\).*/\1$IPfix$IPn/" $CONFIG_FILE
echo $IPn > /etc/fail2ban/home_ip_old.txt
echo "Schritt 6" >> /root/crondebug.txt
service fail2ban restart
echo "Neue IP gewhitelisted: $IPn Fail2ban neu gestartet"
fi
echo "skript beendet" >> /root/crondebug.txt
Das produziert die Datei /root/crondebug.txt, wenn es läuft und schreibt ein paar Marken in die Datei, die Rückschlüsse zuläßt, wie wet das Skript läuft.
Hallo,

ich habe beides nun probiert. Einmal manuell gestartet und einmal via crontab. Manuell hat funktioniert wie es soll, Crontab wurde keine IP eingetragen.
Die Logs sind auch nicht wirklich aufschlussreich.

Manuell:

Code: Alles auswählen

skript gestartet
Schritt 1
Schritt 2
Schritt 3
Schritt 4
Schritt 5
Schritt 6
skript beendet
Crontab:

Code: Alles auswählen

skript gestartet
Schritt 1
Schritt 2
Schritt 3
Schritt 4
Schritt 5
skript beendet
Lg

Benutzeravatar
MSfree
Beiträge: 11667
Registriert: 25.09.2007 19:59:30

Re: Bash Script erstellen

Beitrag von MSfree » 25.12.2019 15:56:23

rodeoric hat geschrieben: ↑ zum Beitrag ↑
24.12.2019 15:00:18
Die Logs sind auch nicht wirklich aufschlussreich.
Warum denn nicht?

Ich sehe da sofort, daß er Schritt 6 nicht ausführt, wenn das Script vom cron gestartet wird.
Mit anderen Worten, das if wird nicht abgearbeitet, weil IPn und IPo nicht unterschiedlich sind.

Wenn ich mir dann ansehe, wie IPo und IPn erzeugt werden, dann fallen mir da so einige Ungereimtheiten auf.

Code: Alles auswählen

wget https://einedomain.de/homeIP.txt /etc/fail2ban/homeIP.txt
liest irgendwas.

Code: Alles auswählen

cat /etc/fail2ban/homeIP.txt > /etc/fail2ban/home_ip.txt
wollte du hier nicht

Code: Alles auswählen

mv /etc/fail2ban/homeIP.txt /etc/fail2ban/home_ip.txt
aufrufen, um die Datei umzubenennen?

Das erspart dir dann nämlich

Code: Alles auswählen

rm -r homeIP.txt
was vom cron ausgeführt ohnehin nicht funkioniert, weil du die Datei im aktuellen Arbeitverzeichnis suchst (absoluter Pfad fehlt). Und in welchem Arbeitverzeichnis cron arbeitet, weill ich garnicht ergründen müssen.

Zu guter letzt willst du den alten Zustand in /etc/fail2ban/home_ip_old.txt sichern, was ausserhalb des ifs stattfinden sollte.

rodeoric
Beiträge: 30
Registriert: 23.12.2019 15:02:54

Re: Bash Script erstellen

Beitrag von rodeoric » 25.12.2019 18:39:15

Hallo,

danke für deine Rückmeldung.
liest irgendwas.
Korrekt, es liest die Datei von meinem Webspace mit dem Namen "homeIP.txt" und sichert diese auf dem Server unter "homeIP.txt"
wollte du hier nicht
Verstehe zwar nicht ganz was Du damit meinst aber es ruft die gespeicherte Datei auf und legt diese in einer neuen Datei ab.
aufrufen, um die Datei umzubenennen?
Ich dachte move ändert einfach nur den Namen, denn die alte Datei ist ja dann weg und unter dem neuen Namen aufrufbar. Sehe da keinen Fehler.
was vom cron ausgeführt ohnehin nicht funkioniert, weil du die Datei im aktuellen Arbeitverzeichnis suchst (absoluter Pfad fehlt). Und in welchem Arbeitverzeichnis cron arbeitet, weill ich garnicht ergründen müssen.
Das hört sich schlüssig an, der absolute Pfad fehlt, gebe ich Dir recht und das habe ich übersehen.
Mit anderen Worten, das if wird nicht abgearbeitet, weil IPn und IPo nicht unterschiedlich sind.
Das ist ebenfalls korrekt, ich mache immer vor dem testen beide Dateien leer da es sonst nicht funktioniert, verstehe ich auch und wurde beim testen immer so gemacht.
Zu guter letzt willst du den alten Zustand in /etc/fail2ban/home_ip_old.txt sichern, was ausserhalb des ifs stattfinden sollte.
Ja, das ist Quasi das Dokument in dem die aktuelle IP so zu sagen drinnen liegt, beim nächsten Run sollte er eigentlich die neue mit dem Dokument der alten abgleichen, sind diese identisch muss er weder etwas in jail.local hineinschreiben und auch den "service fail2ban restart" nicht ausführen, wozu auch wenn es keine Änderung gab.

Das es sicher hier auch andere Wege gibt die zum Erfolg führen, ist mir klar. Darum ging es doch aber nicht, ich habe gebastelt, es funktioniert manuell und den Fehler wollte ich hier mit euch gemeinsam suchen.

Ich habe jetzt mal den Pfad angepasst und versuche es nun nochmal auszuführen. Ich werde gleich berichten.

Antworten