Script ausgaben an mailx übergeben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
HelsAett
Beiträge: 749
Registriert: 18.03.2003 18:25:00

Script ausgaben an mailx übergeben

Beitrag von HelsAett » 02.07.2003 10:20:21

mehrere befehle in case
beispiel:
case

y ) ping 127.0.0.1;
whois 127.0.0.1;
hiernach soll die ausgabe der befehle peer mail weitergeleitet werden
> 2>&1 | mailx -s "auswertung" root 2>&1
;;
n ) echo " der eingegebene code hat keinen sinn ist nur ein beispiel";
;;

* ) echo " fehler "
;;

esac

wenn ich die ablaufenden befehle im teile " y ) " in {} setze und case wech lassen, funtzt es mit der mail.

wenn ich den teil in " y) " im zusammenhang mit case in {} setze gehts nicht mehr.

jemand eine idee wie ich da weiterkomme.

ich hoffe der kurze code teil trägt genug zum verständniss bei, wollte mir es sparen das forum mit den gesammten script vollzuhauen. da es selbst einiges zeilen umfasst.

gruss helsaett

Olaf Dietsche
Beiträge: 520
Registriert: 12.06.2003 23:18:50
Wohnort: Siegburg

Re: Script ausgaben an mailx übergeben

Beitrag von Olaf Dietsche » 02.07.2003 13:05:04

HelsAett hat geschrieben:mehrere befehle in case
beispiel:
case

y ) ping 127.0.0.1;
whois 127.0.0.1;
hiernach soll die ausgabe der befehle peer mail weitergeleitet werden
> 2>&1 | mailx -s "auswertung" root 2>&1
;;
...
esac

wenn ich die ablaufenden befehle im teile " y ) " in {} setze und case wech lassen, funtzt es mit der mail.

wenn ich den teil in " y) " im zusammenhang mit case in {} setze gehts nicht mehr.
Ich verstehe nicht so genau, was du damit sagen möchtest. ;-)

Allein das ping verhindert, daß das Skript beendet wird. Du mußt mit

Code: Alles auswählen

ping -c 5 127.0.0.1
die Anzahl der Pings begrenzen.

So

Code: Alles auswählen

case
y) { ping -c 5 127.0.0.1; whois 127.0.0.1; } 2>&1 | mailx -s "auswertung" root ;;
...
esac
sollte das Skript funktionieren.

Benutzeravatar
HelsAett
Beiträge: 749
Registriert: 18.03.2003 18:25:00

Beitrag von HelsAett » 02.07.2003 15:33:12

Code: Alles auswählen

Olaf Dietsche

case
y) { ping -c 5 127.0.0.1; whois 127.0.0.1; } 2>&1 | mailx -s "auswertung" root ;;
...
esac
so funktioniert es leider nicht, hab ich auch schon versucht, wie auch im ersten posting geschrieben.

dass der erste gepostete gepostete code nicht ganz echt ist und keinen sinn ergibt hab ich oben auch schon beschrieben. das war nur als beispiel gedacht um die problematik verständlicher zumachen.
Wollt doch den leuten hier ersparen sich durch den ganzen script zuwühlen :-)

aber nagut haue ich mal das script hier rein :
# -------------------------- / kleines IDS \ -------------------------------#
#
# Dieses Script Ueberprueft die Einstellungen Ihres System`s um spaeter
# eventuell auftrettende Aenderungen leichter Ausfindig zu machen !
#
#
#
# --------------------------------------------------------------------------#

echo " Um dieses Script ausfuehren, muss es im Root Verzeichniss gestartet
werden, dazu benoetigen Sie Root Recht ! Wollen Sie dieses Scripte
Starteten [yes] [no]"

echo -n "Script Starten:"

read eingabe

case "$eingabe" in

yes | y ) {
echo "Ausgabe kleines IDS `date` und `/bin/hostname`"
echo ""

# loescht a.out und .o files die aelter als 7 Tage sind
/usr/bin/find / \ -name a.out -name core -name '*.o' \
-atime + 7 \ -exec /bin /rm -f {} \;

# saeubert /tmp and /usr/tmp
/usr/bin/find /tmp -type f -atime + 7 -exec /bin/rm -f
{} \;
/usr/bin/find /usr/tmp -type f -atime + 7 -exec /bin/rm
-f {} \;

# findet Accounts ohne password
echo ""
echo "Accounts ohne password"
echo "----------------------"
/bin/grep '^[^:}*::' /etc/shadow

# findet Accounts mit UID und/oder GID von 0
echo ""
echo "Accounts mit ID 0"
echo "-----------------"
/bin/grep ':00*:' /etc/passwd

echo "SUID-files"
echo "----------"
/usr/bin/find / -perm -4000 -type f -exec ls -l {} \;
echo ""

echo "SGID-files"
echo "----------"
/usr/bin/find / -perm -2000 -type f -exec ls -l {} \;
echo ""

# Sucht offene Port`s auf dem System
echo "Offene Ports"
echo "------------"
/usr/bin/nmap / 127.0.0.1 -p 1-65535;
echo ""
} > 2>&1 | mailx -s "kleines IDS" root 2>&1 #<----- HIER IST DAS PROBLEM

echo "Ueberpruefung beendet"
;;


no | n ) echo "Ueberpruefung des Systems abgebrochen"
;;


* ) echo "Falsche Eingabe"
;;

esac

exit

grüsse helsaett
Zuletzt geändert von HelsAett am 07.09.2014 17:01:41, insgesamt 1-mal geändert.

Olaf Dietsche
Beiträge: 520
Registriert: 12.06.2003 23:18:50
Wohnort: Siegburg

Beitrag von Olaf Dietsche » 02.07.2003 17:20:20

HelsAett hat geschrieben:

Code: Alles auswählen

Olaf Dietsche

case
y) { ping -c 5 127.0.0.1; whois 127.0.0.1; } 2>&1 | mailx -s "auswertung" root ;;
...
esac
so funktioniert es leider nicht, hab ich auch schon versucht, wie auch im ersten posting geschrieben.

dass der erste gepostete gepostete code nicht ganz echt ist und keinen sinn ergibt hab ich oben auch schon beschrieben. das war nur als beispiel gedacht um die problematik verständlicher zumachen.
Wollt doch den leuten hier ersparen sich durch den ganzen script zuwühlen :-)
Dieses Skript

Code: Alles auswählen

#! /bin/sh

eingabe=y
case "$eingabe" in
y) { ping -c 5 127.0.0.1; whois 127.0.0.1; } 2>&1 | mailx -s "auswertung" olaf ;;
esac
habe ich gerade eben ausprobiert und bei mir kommt definitiv eine mail mit der Ausgabe von ping und whois an.

Ein Möglichkeit warum dein Skript nicht funktioniert, könnte diese Zeile sein:

Code: Alles auswählen

 } > 2>&1 | mailx -s ...
Was passiert, wenn du das erste > weglässt. Das macht so eigentlich keinen Sinn

Code: Alles auswählen

 } 2>&1 | mailx -s ...

Benutzeravatar
HelsAett
Beiträge: 749
Registriert: 18.03.2003 18:25:00

Beitrag von HelsAett » 03.07.2003 06:13:51

2>&1 | mailx -s "auswertung" root;;

tatsächlich ohne " > " gehts, hmm wunder muss nicht eine umleitung normalerweise mit " > " geschehen.

danke dir, es funtzt


gruss helsaett

Olaf Dietsche
Beiträge: 520
Registriert: 12.06.2003 23:18:50
Wohnort: Siegburg

Beitrag von Olaf Dietsche » 03.07.2003 12:02:35

HelsAett hat geschrieben:2>&1 | mailx -s "auswertung" root;;

tatsächlich ohne " > " gehts, hmm wunder muss nicht eine umleitung normalerweise mit " > " geschehen.
Das ist richtig, aber dann muß nach dem > auch ein Ziel (z.B. eine Datei) angegeben werden. In deinem Fall ist das Ziel aber die Pipe, folglich erübrigt sich eine Umleitung von stdout. Lediglich stderr muß :?: mit in die Pipe umgebogen werden, deswegen das 2>&1 (stderr wird nach stdout umgeleitet).

Antworten