Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

hi Ihrs!

Ich bin auf der Suche nach einer Möglichkeit, automatisch Daten durchs LAN zu schicken. Sie sollen von Clients zum Server gelangen, wobei ich bei den Clients nach Möglichkeit nix installieren möchte. Die meissten Rechner die bei meinem Vorhaben die Clients darstellen haben einen postfix Mailserver an bord, so das ich theoretisch eMails verschicken könnte. das Problem ist dabei nur, das diese eMails vom Server dann auch automatisch wieder ausgelesen werden sollen.

Kennt irgendwer ein Clientprogramm das sich einfach per shellscript steuern lässt?

Geschrieben

Hi,

du kannst beim empfang einer mail z.b. mit procmail einen automatismus erzeugen oder alternativ mit einer .forward datei im userhome die via pipe die mail an ein anderes programm/script weiterleitet.

.forward

| myprogram.pl

hope it helps,

tom

Geschrieben
Ich bin auf der Suche nach einer Möglichkeit, automatisch Daten durchs LAN zu schicken.

Hallo,

also ich würde zur Datenübertragung im LAN eher eine Kombination von RSync und SSH empfehlen.

Du könntest:

a.) die zu übertragenden Daten vom Server aus pushen und dann ebenfalls via SSH die Folgeverarbeitung auf den Clients anstossen.

b.) auf den Clients die Daten per Cronjob aus ziehen und folgeverarbeiten.

Bye

SystemError

Geschrieben

also die sache mit .forward werde ich mir demnächst mal reinziehen. Bin im mom dabei, mich mit "expect" zurechtzufinden. Habe auch schon ne cfg geschrieben um mutt austomatisch laufen zu lassen. allerdings funzt das bisher nur in einem einzigen Fall. Ich muss irgendwie noch ne verzweigung a la "if-then-else" da rein bekommen. Daher meine Frage:

Hat jemand ein gutes (am Besten deutsches) howto, manual oder tutorial für "expect"?

Ich hab schomma google befragt, allerdings spucht mir google jede menge müss raus denn "expect" ist ein sehr häufig und sehr verschieden verwendeter Begriff.

Die Übertragung mit Hilfe von SSL und private/publickey wollte ich eigentlich aus Sicherheitsgründen vermeiden...

Geschrieben

Hallo,

das freut mich - expect ist einfach klasse!

Aber sag mal, das wäre doch auch einfacher gegangen - eine Datei von A nach B:

scp file user@remotehost:

Damit du kein Passwort eingeben musst, sicherst du einfach deinen Publick-Key in die .ssh/authorized_hosts des users von remotehost.

Nunja mit expect ist man wahrscheinlich flexibler :D

  • 3 Wochen später...
Geschrieben
Damit du kein Passwort eingeben musst, sicherst du einfach deinen Publick-Key in die .ssh/authorized_hosts des users von remotehost.

... und genau das will ich eben nicht. denn wenn dann irgendwer es geschafft hat, auf PCa zu kommen, dann kann er auch gleich auf PCb...

  • 2 Wochen später...
Geschrieben

Habe mal wieder an dieser Mail-geschichte nen bissel weitergebastelt. Dank dem Link (Linux-Mag) und dem expect-man steig ich auch schon so einigermaßen durch das ding durch. Da aber mein Ausbilder im mom urlaub hat, hier mal ganz simple Fragen:

Wenn ich eine Mail mit Anhang in Mutt öffne, dann besteht diese grundsätzlich immer aus dem eigentlichen Anhang und einem automatisch vom client-mail-prog angefügtem:


q:Verlassen  s:Speichern  |:Filtern  p:Drucke  ?:Hilfe

  I     1 <no description>                   [text/plain, 7bit, us-ascii, 0,1K]

  A     2 stats_dori                       [text/plain, 8bit, iso-8859-1, 0,1K]

- Wofür stehen das "I" und "A" am Zeilenanfang?

- Wie kann ich "expect" zuverlässig den richtigen Anhang zeigen?

- Wann wird Deutschland von DSDS, Popstars & Co. erlöst? ;)

mfg,

J2B4U

  • 1 Monat später...
Geschrieben

hab das jetzt soweit alles fertig, nur noch 1 problem:

wie kann ich expect sagen, was es tun soll, wenn keines der angegebenen Pattern passt? sozusagen das "else" bei einer if-abfrage...

wenn ich schreibe


expect "string1" { send "1" } \

       "string2" { send "2" } \

       default { send "default" } 

dann bekomm ich immer nen timeout falls weder string1 noch string2 zutreffen!

Geschrieben

Hallo,

du hast mehrere Möglichkeiten. Du kannst den timeout übrigens auch selbst definieren. Du kannst eine Abprüfung machen oder auch einfach den default Fall definieren:


...

set timeout 5;  #timeout=5 sec.

expect {

    "case1"    { send "1"; set flag 0; }

    "case2"    { send "2"; set flag 0; }

    "case3"    { send "3"; set flag 0; }

}

if {$flag != 0} {

    # If 'case[123]' isn't visible, exit with error..

    puts stderr "Error: Nothing to do. exit.\n";

    exit 1;

}

unset flag;

send "something...\r";

...

Geschrieben

jou.. so ähnlich habe ich das schon. nur habe ich diese abfrage inna schleife. Wenn ich nin nicht das ganze script abbrechen will sondern nur den schleifendurchlauf, wie mache ich das dann? gibt es eine funktion "break" oder sowas in der art?

Geschrieben

ok, danke! ich werd das dann mal so versuchen.

Sorry wenn ich so simple sachen nciht weis... ich hab kein plan von Tcl! Fange langsam aber sicher an, mit tcl und expect klarzukommen, daher ist mir jede hilfe recht! ich hoffe nur dieser ganze aufwand lohnt sich!

danke!

Geschrieben

Habe das script mal mit break angefangen:


#!/usr/bin/expect

# Expect: Maileingang Prüfen, Mails auswerten und löschen

#


# spawn mutt


set i 1;        # Zählvar für Mail Nr.

set timeout 3;  



spawn mutt;

while { $i < 10 } {

  send "$i \r";

  expect {

    "Ung*ltige Nachrichtennummer"  {

      break;

    }

    default                        {

      send "\r";

      sleep 1;

      send "i";

      send "d";

    }

  }

  incr i;

}

interact;


allerdings habe ich immernoch das problem das Expect die timeout-zeit wartet, bevor es in den default-block geht. Ist das normal? Wie kann ich das noch lösen?
expect "*" {...};

ist sicherlich nicht grade die eleganteste lösung, oder?

Geschrieben

Folgenden Fehler erhalte ich von "cron", jedes Mal wenn er mein Expect-Script ausführen soll:


send: spawn id exp3 not open

    while executing

"send "$i \r""

    ("while" body line 3)

    invoked from within

"while { $flag == 0 && $i < 20 } {

  incr i;

  send "$i \r";

  expect {

    "*Ung*ltige Nachrichtennummer*" {  # Ende der Nachrichtenliste erreicht

   ..."

    (file "/etc/mrtgserver/data_in/autoreceive_v0.5" line 23)

in meiner Crontab steht dieser Eintrag:

  */5 *  *  *  *   /etc/mrtgserver/data_in/autoreceive_v0.5   2>&1 > /dev/null

So sieht das Script aus:

#!/usr/bin/expect

# Expect: Maileingang Prüfen, Mails auswerten und löschen

#


# Variablen de-

# klarieren

################

set i 0;       # Zählvar für Mail Nr.

set flag 0;    # Steuert Wiederholung der Schleife

set eof 0;     # Steuert Programmende

set timeout 3; #

set testvar 0; # Testvariable

################



###

# Mutt starten

spawn /usr/bin/mutt;



###

# Mails abrufen

while { $flag == 0 && $i < 20 } {

  incr i;

  send "$i \r";

  expect {

    "*Ung*ltige Nachrichtennummer*" {  # Ende der Nachrichtenliste erreicht

      set flag 1;

    }

    "*keine Nachrichten vorhanden*" {  # Mailbox leer

      set flag 1;

    }


    "   $i "                        {  # Nachricht gefunden

      send "\rv2\r\r";

      expect {

        "*- Daten f*r MRTG %*" {       # Anhang enthält MRTG-Daten

          send "is\r";                 # # Anhang speichern

          expect {

            "Datei existiert*" {         # Datei existiert bereits

              send "u";                    # Datei überschreiben

            }

            default {

              set testvar 1;

            }

          }

          send  "qi";                    # Nachricht schliessen

        }

        default {                      # Anhang enthält keine MRTG-Daten

          send "iqi";                    # Mail schliessen

          set testvar "2";

        }

      }

      send "d";                        # Mail zum Löschen freigeben

    }

  }

}



###

Interessanterweise funktioniert das Script wenn man es selbst ausführt ganz prima:

[mrtg@dori data_in]$ ./autoreceive_v0.5

spawn /usr/bin/mutt

1

1 behalten, 1 gelöscht.

[mrtg@dori data_in]$

hat da wer ne ahnung was das sein könnte?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...