Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Linux Bashscript

  1. #1
    mandark
    Gast

    Linux Bashscript

    Hallo,

    Da ich mit der linux bash normalerweise nichts zu tun habe, aber nun einige Abfragen darueber stricken muss, koennt ihr mir da vielleicht/wahrscheinlich helfen.
    Problemstellung:
    Auf 20 Systeme, die sich nur einem oktett, das aufzaehlend ist per ssh connecten ( root, passwort wird interaktiv eingegeben )
    dort pruefen ob per which logsurfer /usr/bin/logsurfer zurueckliefert.
    Falls fehlschlaegt, exitcode mit uname -n hat fehler.
    Falls ein true zurueckkommt, pruefen ob 2 logsurfer prozesse laufen $(pidof logsurfer)
    Wenn auch dies korrekt ist, muss man pruefen, ob in /dir/log1.conf ein grep nach $(uname -n) ein true zurueckkommt.
    Wenn auch dies korrekt ist, noch 2 weitere greps
    a) nach LOG1 /etc/init.d/logsurfer
    b) nach 255.255.255 aus /etc/sysconfig/network/ifcfg-eth*

    Die Systeme, die ueberprueft werden sind alle mit dem gleichen suse os ausgestattet und sollten in der config auch alle gleich sein.

    Da ich aber bashmaessig nie wirklich viel gemacht habe, war mein ansatz jetzt

    Code:
    for {1..20}
    do 
    if [ ssh -l ip.$1.ip.ip root ]
    then
      if [ which logsurfer ]
      then 
         if [ "$(pidof logsurfer)" | "awk{NF =2}" ] //nicht sicher wie awk dort abgefragt wird
         then
           if [ grep $(uname -n) /dir/logsurfer/alert.conf ]
           then
            if [ grep LOG1/etc/init.d/logsurfer ]
             then echo "$1"
              if [ grep 255.255.255.0 /etc/sysconfig/network/ifcfg-eth* ]
               then echo "Alle checks ok"
              fi
            fi
          fi
       fi
      fi
    done
    Es ist wohl einfach zu primitiv, aber bin mir nicht sicher wie das awk da perfekt reinspielen soll
    und ob die restlichen Abfragen dann so funktionieren koennten.

    Ueber Hilfe freu ich mich und danke im vorhinein.

    Cu

  2. #2
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Nimm statt awk lieber einfache bash-Tools:
    [ $(pidof logsurfer | tr -d '0123456789' | wc -c) -eq 2 ]

    Allerdings ist dein Skript nicht funktionsfähig, das hier sollte eher klappen:
    Code:
    for i in {1..20}
    do 
    cat '[ "$(which logsurfer)" == "/usr/bin/logsurfer" ] || ( uname -n >&2 ; exit 1 )
    [ $(pidof logsurfer | tr -d '0123456789' | wc -c) -eq 2 ] || exit 2
    grep LOG1 /etc/init.d/logsurfer 2&> /dev/null || exit 3
    grep 255.255.255.0 /etc/sysconfig/network/ifcfg-eth* 2&> /dev/null || exit 4' | ssh -l root ip.ip.ip.$i -p Passwort
    done
    2>> /dir/logsurfer/alert.conf
    exitcode = $?
    [ $exitcode -eq 0 ] && echo "Alle Checks OK bei ip.ip.ip.$i"
    [ $exitcode -eq 1 ] && echo "which logsurfer ist nicht /usr/bin/logsurfer bei ip.ip.ip.$i"
    [ $exitcode -eq 2 ] && echo "pidof logsurfer ergab nicht zwei Prozesse bei ip.ip.ip.$i"
    [ $exitcode -eq 3 ] && echo "LOG1 nicht in /etc/init.d/logsurfer bei ip.ip.ip.$i"
    [ $exitcode -eq 4 ] && echo "255.255.255.0 nicht in /etc/sysconfig/network/ifcfg-eth\* bei ip.ip.ip.$i"
    Allerdings war deine Problemstellung an einiegen Stellen ziemlich schwammig, ich habe mich mehr an den Befehlen orientiert (die IP-Adressen unterscheidensich in Netzwerken meist in dem letzten Oktett, wenn tatsächlich das zweite Oktett gemeint sein sollte, abändern).

    Du musst allerdings das Passwort als Parameter übergeben, oder im Skript selbst; du könntest das umgehen, indem du das Skript auf jedem Rechner abspeicherst und per "ssh -l root ip.ip.ip.$i <Pfad zum ausführbaren Skript>" aufrufst (dann wird das Passwort interaktiv abgefragt).

    Das würde dann z.B. so aussehen:
    /usr/local/bin/checklogsurfer.sh auf den 20 Rechnern:
    Code:
    #!/bin/bash
    # "chmod +x" auf dieses Skript anwenden!
    [ "$(which logsurfer)" == "/usr/bin/logsurfer" ] || ( uname -n >&2 ; exit 1 )
    [ $(pidof logsurfer | tr -d '0123456789' | wc -c) -eq 2 ] || exit 2
    grep LOG1 /etc/init.d/logsurfer 2&> /dev/null || exit 3
    grep 255.255.255.0 /etc/sysconfig/network/ifcfg-eth* 2&> /dev/null || exit 4
    Check-Skript auf deiner Kiste:
    Code:
    for i in {1..20}
    do ssh -l root ip.ip.ip.$i 2>> /dir/logsurfer/alert.conf
    exitcode = $?
    [ $exitcode -eq 0 ] && echo "Alle Checks OK bei ip.ip.ip.$i"
    [ $exitcode -eq 1 ] && echo "which logsurfer ist nicht /usr/bin/logsurfer bei ip.ip.ip.$i"
    [ $exitcode -eq 2 ] && echo "pidof logsurfer ergab nicht zwei Prozesse bei ip.ip.ip.$i"
    [ $exitcode -eq 3 ] && echo "LOG1 nicht in /etc/init.d/logsurfer bei ip.ip.ip.$i"
    [ $exitcode -eq 4 ] && echo "255.255.255.0 nicht in /etc/sysconfig/network/ifcfg-eth\* bei ip.ip.ip.$i"
    done

  3. #3
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Du musst allerdings das Passwort als Parameter übergeben, oder im Skript selbst; du könntest das umgehen, indem du das Skript auf jedem Rechner abspeicherst und per "ssh -l root ip.ip.ip.$i <Pfad zum ausführbaren Skript>" aufrufst (dann wird das Passwort interaktiv abgefragt).
    Ich würde in so einem Fall eifach pubkey Authentifizierung verwenden. Mittels ssh-keygen einen Key erzeugen (falls noch nicht vorhanden) und dann einmalig mit
    Code:
    ssh-copy-id <server>
    den Public Key auf die Server kopieren und nie mehr ein Passwort (ausser der Key hat ne Passphrase) eingeben müssen.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  4. #4
    mandark
    Gast
    Erstmal vielen dank fuer eure Informationen.
    Leider ist bash nicht meine Staerke und es war zum teil eine notloesung, die ich jetzt gerne uebernommen habe.
    Da ich das ganze noch nach ruby/perl uebersetzen werde um es fuer die ueberwachung in icinga zu nutzen.

    Hab auch einen mittelweg noch gefunden, der ueber dsh auch dies ermoeglichen kann.

    Ich habe wieder viel gelernt.

  5. #5
    mandark
    Gast
    danke jeebee und John W nochmals.
    Hab das jetzt auch in dem Umfang umgesetzt und es laeuft like a charme .

    Das zeigt, dem forum muss ich jetzt schon treu bleiben um euch mit weiteren Fragen zu nerven.

    Cu

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •