Dienste Remote per Mail Steuern
Dienste Remote per Mail Steuern
Hallo,
ich würde gerne ein paar Dienste remote steuern und
zwar in dem ich eine Mail an den Server sende.
Zum Beispiel würde ich gerne den Indianer mal anhalten.
also "/etc/init.d/apache2 stop"
Ich dachte das lässt sich dann über den Betreff lösen:
zum Beispiel mail an "verwaltung@domain.de" mit dem
Betreff: "stop apache2".
Der Oberhammer wäre wenn der Server zurückmailt
"Apache2 erfolgreich angehalten"
Natürlich soll der Server nur Befehle von einer e-mail adresse
annehmen die er kennt.
Weiss jemand wie ich das lösen kann?
Oder gibs da schon was fertiges?
Auf eine Oberfläche wie plesk / webmin etc, wollte ich verzichten.
Grüße
Andreas
ich würde gerne ein paar Dienste remote steuern und
zwar in dem ich eine Mail an den Server sende.
Zum Beispiel würde ich gerne den Indianer mal anhalten.
also "/etc/init.d/apache2 stop"
Ich dachte das lässt sich dann über den Betreff lösen:
zum Beispiel mail an "verwaltung@domain.de" mit dem
Betreff: "stop apache2".
Der Oberhammer wäre wenn der Server zurückmailt
"Apache2 erfolgreich angehalten"
Natürlich soll der Server nur Befehle von einer e-mail adresse
annehmen die er kennt.
Weiss jemand wie ich das lösen kann?
Oder gibs da schon was fertiges?
Auf eine Oberfläche wie plesk / webmin etc, wollte ich verzichten.
Grüße
Andreas
Re: Dienste Remote per Mail Steuern
Hallo.
Ich geh mal davon aus, dass die Mails von einem POP3-Server abgeholt werden.
Meine Idee:
1. Lass Dir die Mails lokal als Datei in einen Ordner speichern. Die Dateien sind dann als Texte hinterlegt, die man ziemlich einfach mit Linux-Bordmitteln auswerten kann.
2. Mit einem 2. Script lässt du diese Dateien nacheinander mit einem unpriviligierten Benutzer abarbeiten und per vordefinierten sudo-Befehlen die Kommandos ausführen.
Die Mail verschiebe dann in einen Archiv-Ordner, da du sonst nicht mehr nachvollziehen kannst, wann welche Befehle abgesetzt wurden.
3. Aus Script 2 kannst Du (Beispielsweise auch wieder mit Perl) eine Mail versenden.
Da ich gern in Perl scripte hab ich da auch schon mal etwas gesehen.
Beispiel zum Mail empfangen und senden mit Perl: http://rolfrost.de/mail.html
Gruß
Georg
Ich geh mal davon aus, dass die Mails von einem POP3-Server abgeholt werden.
Meine Idee:
1. Lass Dir die Mails lokal als Datei in einen Ordner speichern. Die Dateien sind dann als Texte hinterlegt, die man ziemlich einfach mit Linux-Bordmitteln auswerten kann.
2. Mit einem 2. Script lässt du diese Dateien nacheinander mit einem unpriviligierten Benutzer abarbeiten und per vordefinierten sudo-Befehlen die Kommandos ausführen.
Die Mail verschiebe dann in einen Archiv-Ordner, da du sonst nicht mehr nachvollziehen kannst, wann welche Befehle abgesetzt wurden.
3. Aus Script 2 kannst Du (Beispielsweise auch wieder mit Perl) eine Mail versenden.
Da ich gern in Perl scripte hab ich da auch schon mal etwas gesehen.
Beispiel zum Mail empfangen und senden mit Perl: http://rolfrost.de/mail.html
Gruß
Georg
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
Re: Dienste Remote per Mail Steuern
Erstmal danke für die Antwort.
Ich benutze IMAP, also die Mails liegen immer auf dem Server.
Leider bin ich im Scripten nicht so gut, das ich das blind lösen könnte.
Ich werde mal weiter suchen ob ich noch was finde.
Ich benutze IMAP, also die Mails liegen immer auf dem Server.
Leider bin ich im Scripten nicht so gut, das ich das blind lösen könnte.
Ich werde mal weiter suchen ob ich noch was finde.
Re: Dienste Remote per Mail Steuern
Hi.
Dieses Script liest die ungelesenen Mails von einem IMAP-Konto und führt in einer IF-Abfrage erst mal ein "print" aus (QUELLE Net::IMAP::Simple-Dokumentation):
Informationen zu "Net::IMAP::Simple" findest Du hier: http://search.cpan.org/~jettero/Net-IMA ... Simple.pod
Versenden wirst Du vermutlich über SMTP. Das kannst du da auch mit einbauen. Stichwort "Net::SMTP" und falls nötig "Net::SMTP::auth".
Gruß
Georg
Dieses Script liest die ungelesenen Mails von einem IMAP-Konto und führt in einer IF-Abfrage erst mal ein "print" aus (QUELLE Net::IMAP::Simple-Dokumentation):
Code: Alles auswählen
#!/usr/bin/perl
use strict;
use warnings;
use Net::IMAP::Simple;
use Email::Simple;
# Create the object
my $imap = Net::IMAP::Simple->new('SERVERIP_ODER_DNSNAME') ||
die "Unable to connect to IMAP: $Net::IMAP::Simple::errstr\n";
# Log on
if(!$imap->login('BENUTZER','KENNWORT')){
print STDERR "Login failed: " . $imap->errstr . "\n";
exit(64);
}
# Print the subject's of all the messages in the INBOX
my $nm = $imap->select('INBOX');
for(my $i = 1; $i <= $nm; $i++){
# Zeige alle Mails an, die nicht gelesen sind
if( ! $imap->seen($i)){
my $es = Email::Simple->new(join '', @{ $imap->top($i) } );
printf("[%03d] %s\n", $i, $es->header('Subject'));
# Fuehre etwas aus, wenn im Subject "EINBEFEHL" steht
if ($es->header('Subject') eq "EINBEFEHL"){
print "Ein Befehl\n";
$es->header('Subject')
}
}
# Mail als gelesen markieren
$imap->see($i);
}
$imap->quit;
Versenden wirst Du vermutlich über SMTP. Das kannst du da auch mit einbauen. Stichwort "Net::SMTP" und falls nötig "Net::SMTP::auth".
Gruß
Georg
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
Re: Dienste Remote per Mail Steuern
Naja. Etwas umständlich. Mails liegen bei mir in /var/mail/username.
Wie wäre es so. Der Befehl steht dann im Subjekt der E-Mail. Hoffentlich macht der E-Mail-Client die Kodierung nicht im Subject kaputt. Auch darf der Befehl keinen Doppelpunkt enthalten.
mail.pl
Script in CRON einbauen und fertig. Entweder direkt als "root" oder per "sudo" dem Benutzer "username" das Starten, Stoppen usw. erlauben. Sicherer wäre die zweite Lösung, da eine E-Mail mit Subjekt "rm -rf /" vielleicht zu Problemen führen würde
Wie wäre es so. Der Befehl steht dann im Subjekt der E-Mail. Hoffentlich macht der E-Mail-Client die Kodierung nicht im Subject kaputt. Auch darf der Befehl keinen Doppelpunkt enthalten.
mail.pl
Code: Alles auswählen
#!/usr/bin/perl
$maildatei = "/var/mail/username";
open (FILE,"$maildatei");
foreach $line (<FILE>)
{
if ($line =~ /^Subject:/)
{
($muell,$subject) = split (":", $line);
system($subject);
}
}
close (FILE);
open (FILE,">$maildatei") || die "Can't Open $maildatei: $!\n";
print FILE "";
close (FILE);
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Re: Dienste Remote per Mail Steuern
Ich habe mal was Ähnliches gemacht: Ich habe eine Datei .forward im $HOME eines speziellen Users angelegt mit diesem Inhalt...
...so dass EMails an dieses Perl-Script übergeben werden anstatt sie direkt ins Postfach zu stecken. In diesem Perl-Script werte ich die Absender-Adresse aus. Bei einer bestimmten Adresse speichere ich die EMail als Datei ab, ansonsten hänge ich sie an das normale Postfach hintendran. Ich habe das Script etwas anonymisiert, musst Du halt selbst etwas adjustieren, soll nur als Grundlage dienen.
Ach ja, dem sendmail musste ich noch sagen, dass das Scipt als MTA arbeiten darf (Symlink in /etc/mail/smrsh/ auf das Perlscript machen).
Gruss, mistersixt.
Code: Alles auswählen
"|/home/user/scripts/filter.pl"
Code: Alles auswählen
#!/usr/bin/env perl
# mistersixt
#
$LOCK_EX=2;
$LOCK_UN=8;
$mail_folder="/var/mail/einuser";
$file_mail_folder_path="/space/einuser/emails";
sub append_to_mail_folder{
open (MAILFILE, ">>$mail_folder") || die "Could not create $mail_folder: $!\n";
flock (MAILFILE, $LOCK_EX); # lock file
for ($i=0; $i<$loop; $i++){
print MAILFILE "$mail{$i}";
}
print MAILFILE "\n";
flock (MAILFILE, $LOCK_UN); # unlock file
close (MAILFILE);
}
sub append_to_file_folder{
$date=`date +%H%M%S`;
$file_mail_folder="$file_mail_folder_path/email_id_$$";
open (MYFILE, ">>$file_mail_folder") || die "Could not create $file_mail_folder: $!\n";
flock (MYFILE, $LOCK_EX); # lock file
for ($i=0; $i<$loop; $i++){
print MYFILE "$mail{$i}";
}
print MAILFILE "\n";
flock (MYFILE, $LOCK_UN); # unlock file
close (MXFILE);
chmod 0660, $file_mail_folder;
}
$loop=0;
$match=0;
while (<>){
$mail{$loop}=$_;
if ($_ =~/^From:.*absender\@einedomain/){
$match=1;
}
$loop++;
}
#
# Ok, now check, what to do with the email ...
#
if ($match=="1"){
&append_to_file_folder;
}
if ($match=="0"){
&append_to_mail_folder;
}
Gruss, mistersixt.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
Re: Dienste Remote per Mail Steuern
Hi.
Mein Hintergedanke war, dass man mit der IMAP-Lösung die Mails gleich als gesehen markiert, damit der Befehl nicht mehrfach verarbeitet wird. Man erspart sich weitere Prüfungen.
Wenn man das ein wenig weiterbastelt könnte man die Mails auch in einen anderen Ordner schieben.
Auf einem Server, auf dem die Mails abgeholt werden können bzw. liegen könnte das alles aber auch über ein eingebautes Script im MTA (Postfix, Exim, Sendmail) eingebaut werden wie die Zusatzprodukte Sieve oder Spamassassin aber das wär wirklich übertrieben...
Gruß
Georg
Die Mails können dort liegen. Ich setze Beispielsweise den Cyrus-IMAP ein, der die Mails in eine eigene Ordnerstruktur schiebt. /var/mail/ bleibt dann leer.uname hat geschrieben:Naja. Etwas umständlich. Mails liegen bei mir in /var/mail/username.
Mein Hintergedanke war, dass man mit der IMAP-Lösung die Mails gleich als gesehen markiert, damit der Befehl nicht mehrfach verarbeitet wird. Man erspart sich weitere Prüfungen.
Wenn man das ein wenig weiterbastelt könnte man die Mails auch in einen anderen Ordner schieben.
Auf einem Server, auf dem die Mails abgeholt werden können bzw. liegen könnte das alles aber auch über ein eingebautes Script im MTA (Postfix, Exim, Sendmail) eingebaut werden wie die Zusatzprodukte Sieve oder Spamassassin aber das wär wirklich übertrieben...
Gruß
Georg
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft
Re: Dienste Remote per Mail Steuern
Probier ich auch mal aus, danke für die Hilfe.
Re: Dienste Remote per Mail Steuern
hmm...
ich hänge an folgenden Fehlern:
Verzeichnissen sind vorhanden und der Pfad stimmt auch, irgendwelche Tipps?
ich hänge an folgenden Fehlern:
Code: Alles auswählen
landix2:/home/verwaltungsmod# ./filter.pl
./filter.pl: line 5: =2: command not found
./filter.pl: line 6: =8: command not found
./filter.pl: line 7: =/var/opt/vmail/verwaltungsmod/aotten.de/Maildir/new: Datei oder Verzeichnis nicht gefunden
./filter.pl: line 8: =/var/opt/vmail/verwaltungsmod/aotten.de/Maildir/new: Datei oder Verzeichnis nicht gefunden
./filter.pl: line 10: sub: command not found
./filter.pl: line 11: syntax error near unexpected token `MAILFILE,'
./filter.pl: line 11: ` open (MAILFILE, ">>$mail_folder") || die "Could not create $mail_folder: $!\n";'
landix2:/home/verwaltungsmod# ./test2.pl
Can't Open /var/opt/vmail/aotten.de/verwaltungsmod/Maildir/new: Ist ein Verzeichnis
landix2:/home/verwaltungsmod#
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Re: Dienste Remote per Mail Steuern
Poste doch mal Dein Script, dann kann man mehr sehen.
Gruss, mistersixt.
PS: Solltest Du mein filter.pl als Grundlage genutzt haben, dann musst Du eine EMail durch dieses Script pipen, also als Beispiel "cat /tmp/eine-email-im-raw-format.txt | /pfaf/zum/filter.pl". So macht es dann auch der Mailserver.
Gruss, mistersixt.
PS: Solltest Du mein filter.pl als Grundlage genutzt haben, dann musst Du eine EMail durch dieses Script pipen, also als Beispiel "cat /tmp/eine-email-im-raw-format.txt | /pfaf/zum/filter.pl". So macht es dann auch der Mailserver.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
Re: Dienste Remote per Mail Steuern
Genau das hier:
ich hab jedeiglich die Pfade angepasst.
ich hab jedeiglich die Pfade angepasst.
Code: Alles auswählen
#!/usr/bin/env perl
# mistersixt
#
$LOCK_EX=2;
$LOCK_UN=8;
$mail_folder="/var/mail/einuser";
$file_mail_folder_path="/space/einuser/emails";
sub append_to_mail_folder{
open (MAILFILE, ">>$mail_folder") || die "Could not create $mail_folder: $!\n";
flock (MAILFILE, $LOCK_EX); # lock file
for ($i=0; $i<$loop; $i++){
print MAILFILE "$mail{$i}";
}
print MAILFILE "\n";
flock (MAILFILE, $LOCK_UN); # unlock file
close (MAILFILE);
}
sub append_to_file_folder{
$date=`date +%H%M%S`;
$file_mail_folder="$file_mail_folder_path/email_id_$$";
open (MYFILE, ">>$file_mail_folder") || die "Could not create $file_mail_folder: $!\n";
flock (MYFILE, $LOCK_EX); # lock file
for ($i=0; $i<$loop; $i++){
print MYFILE "$mail{$i}";
}
print MAILFILE "\n";
flock (MYFILE, $LOCK_UN); # unlock file
close (MXFILE);
chmod 0660, $file_mail_folder;
}
$loop=0;
$match=0;
while (<>){
$mail{$loop}=$_;
if ($_ =~/^From:.*absender\@einedomain/){
$match=1;
}
$loop++;
}
#
# Ok, now check, what to do with the email ...
#
if ($match=="1"){
&append_to_file_folder;
}
if ($match=="0"){
&append_to_mail_folder;
}
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Re: Dienste Remote per Mail Steuern
Jetzt hast Du mein Script 1-zu-1 nochmal gepostet. Ist das ein Debian-System, auf dem Du das laufen lassen willst? Trag vielleicht mal in der ersten Zeile...
...ein, bzw. halt den Pfad zum perl-Interpreter.
Gruss, mistersixt.
Code: Alles auswählen
#!/usr/bin/perl
Gruss, mistersixt.
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
Re: Dienste Remote per Mail Steuern
Ja, ist ein Debian Lenny.
Ich probiers nachher nochmal aus, danke für den Hinweis.
Ich muss, glaub ich mal ein, bisschen mehr mit perl machen, momentan
bin ich da komplett talentfrei.
Ich probiers nachher nochmal aus, danke für den Hinweis.
Ich muss, glaub ich mal ein, bisschen mehr mit perl machen, momentan
bin ich da komplett talentfrei.
Re: Dienste Remote per Mail Steuern
Anstelle von Cron koenntest du sicherlich auch inotify verwenden.uname hat geschrieben:Script in CRON einbauen und fertig.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Re: Dienste Remote per Mail Steuern
So, das script hängt auf der Kommandozeile, komme so leider nicht weiter.
Ich habe mir jetzt monit installiert, mit einer .htaccess davor.
Ich denke das langt mir aus, trotzdem danke für eure Hilfe!
Ich habe mir jetzt monit installiert, mit einer .htaccess davor.
Ich denke das langt mir aus, trotzdem danke für eure Hilfe!