ubuntuusers.de

Ereignis+Zeichenkette von Server A an B weitergeben (bash)

Status: Ungelöst | Ubuntu-Version: Server 10.04 (Lucid Lynx)
Antworten |

basic

Anmeldungsdatum:
7. Oktober 2008

Beiträge: Zähle...

Hi,

auf dem Linux-Server A wird durch eine Ereignis ein .sh-script aufgerufen (Zeichenkette wird mit übergeben).

Jetzt möchte ich die Zeichenkette mit diesem Ereignis automatisch an Server B übertragen, aber ich weiss nicht wie das am einfachsten und elegantesten umsetzbar ist.

Zur Zeit hab ich das so, dass die Zeichenkette auf dem Server A durch das script in eine txt-Datei geschrieben wird und auf Server B wird per cronjob (alle x minuten) per scp die Datei abgerufen und der inhalt geprüft. Das ist erstmal nicht gerade zeitnah und macht zu viele unnötige ssh verbindungen.

Eine Idee, die ich hatte war die Installation eine HTTP-Server mit php auf Server B. Das Bashscript auf Server A macht dann beim Ereignis ein http-aufruf z.b. http://serverb/ey_du?x=<Zeichenkette> das php-script auf server b verarbeitet das dann weiter.

Oder gibt es noch andere praktische, nicht zu komplizierte Möglichkeiten/Techniken. Ich bin gerne mich in andere Techniken/Sprachen einzuarbeiten.

Im hinterkopf habe ich noch die erweiterungen: was wenn server B nicht erreichbar? zeichenkette zwischenspeichern!? beim nächsten Ereignis alte und neue zeichekette übertragen.

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21852

Wohnort: Lorchhausen im schönen Rheingau

hi,

ich verstehe nicht mal genau, was du eigentlich vorhast, geschweige denn wie du vorgehen willst. Kannst du vielleicht dein Vorhaben etwas konkreter beschreiben? Siehe auch Richtig Fragen

The-Compiler Team-Icon

Avatar von The-Compiler

Anmeldungsdatum:
21. April 2006

Beiträge: 2640

Wohnort: Winterthur, Schweiz

Spricht irgendwas gegen die Verwendung von ssh?

Also im Skript auf Server 1 einfach nur:

ssh blah@server2 "echo $wert > file" 

oder so?

Flo

basic

(Themenstarter)

Anmeldungsdatum:
7. Oktober 2008

Beiträge: Zähle...

@redknight ich bin der Meinung ich hätte es gut genug beschrieben ohne zu weit auszuholen.

The Compiler schrieb:

Spricht irgendwas gegen die Verwendung von ssh?

Also im Skript auf Server 1 einfach nur:

ssh blah@server2 "echo $wert > file" 

Server 1/A ist eine Server bei einem Hoster und deshalb wollte ich dort keine privaten ssh key ohne passphrase abspeichern.

Server 2/B steht in nem LAN und ist dort durch ne Firewall gesichert. Deshalb hab ich dort den ssh priv-key ohne passphrase liegen, mit dem die txt-Datei abgeholt wird.

Ich wollte ssh eigentlich nicht nehmen, weil es evtl zu viel weitere zugriffe bei Kompromittierung ermöglichen könnte. Man müsste wohl nen stark eingeschränkten benutzer anlegen dafür.

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21852

Wohnort: Lorchhausen im schönen Rheingau

basic schrieb:

@redknight ich bin der Meinung ich hätte es gut genug beschrieben ohne zu weit auszuholen.

Mag auch an mir liegen, jedenfalls verstehe ich die Problemstellung nicht. Anzeichen für nicht ausreichende Fragestellung ist auch, wenn kritische Details erst auf nachfrage kommen, zB das einer der Server keys haben kann und einer nicht. Aber wie es auch immer sein mag, wenn du es nicht näher beschreiben kannst/willst, kann zumindest ich dir leider nicht helfen. Ich wünsche trotzdem noch viel Erfolg.

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

Über einen Webserver lässt sich sowas auf jeden Fall relativ einfach machen. Statt PHP reicht möglicherweise auch ein einfaches CGI-Skript oder sogar ein Programm, das sich den String aus dem Logfile fischt.

Es gibt natürlich auch andere Möglichkeiten, z.B. ein einfaches Programm, das (selbstständig oder über inetd) an irgendeinem Port auf die Daten wartet, die du ihm dorthin z.B. per netcat schickst.

Zu überlegen ist:

  • Ist es ein Problem, wenn die Zeichenkette von anderen im Netz mitgelesen werden kann? falls ja, brauchst du eine verschlüsselte Übertragung.

  • Ist es ein Problem, wenn auch andere dir eine Zeichenkette schicken können? Falls ja, brauchst du eine ausreichend sichere Authentifizierung.

basic

(Themenstarter)

Anmeldungsdatum:
7. Oktober 2008

Beiträge: 52

diesch schrieb:

Über einen Webserver lässt sich sowas auf jeden Fall relativ einfach machen. Statt PHP reicht möglicherweise auch ein einfaches CGI-Skript oder sogar ein Programm, das sich den String aus dem Logfile fischt.

Es gibt natürlich auch andere Möglichkeiten, z.B. ein einfaches Programm, das (selbstständig oder über inetd) an irgendeinem Port auf die Daten wartet, die du ihm dorthin z.B. per netcat schickst.

Zu überlegen ist:

  • Ist es ein Problem, wenn die Zeichenkette von anderen im Netz mitgelesen werden kann? falls ja, brauchst du eine verschlüsselte Übertragung.

  • Ist es ein Problem, wenn auch andere dir eine Zeichenkette schicken können? Falls ja, brauchst du eine ausreichend sichere Authentifizierung.

CGI wäre für mich wohl das einfachste.

netcat klingt aber auch interessant. Habe gerade mal die Wikipedia Artikel zu netcat und (x)inetd gelesen, wobei ich so schnell keine weiterführenden infos dazu gefundne habe, was ich quasi hinter den inetd bauen muss/kann um die Weiterverarbeitung durchzuführen.

Die beiden Sicherheitsaspekte sind unwichtig. VPN sorgt für Verschlüsselung und Authentifizierung.

tobi81

Anmeldungsdatum:
9. Juni 2010

Beiträge: 234

Wohnort: 127.0.0.1

Hier eine Möglichkeit, wie man sowas per netcat realisieren kann (wobei Du ggf. "netcat" durch "nc" ersetzen musst): http://stackoverflow.com/questions/2701059/how-to-send-a-notification-to-another-user-with-notify-send-bash

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

basic schrieb:

netcat klingt aber auch interessant. Habe gerade mal die Wikipedia Artikel zu netcat und (x)inetd gelesen, wobei ich so schnell keine weiterführenden infos dazu gefundne habe, was ich quasi hinter den inetd bauen muss/kann um die Weiterverarbeitung durchzuführen.

inetd kann die Daten einfach per stdin an ein Programm weitergeben, das dann gar nichts von Netzwerken wissen muss.

Einfaches Beispiel:

/usr/local/bin/reader:

1
2
3
4
5
6
#!/bin/sh

LOG='/tmp/test.log'
date >> $LOG
cat >> $LOG
echo '------------------------------------' >> $LOG

Eintrag in /etc/inetd.conf:

1
1234 stream tcp nowait user_xy /usr/local/bin/reader

Ersetze 1234 durch einen freien Port und user_xy durch den User, unter dem das Script laufen soll.

Restarte inetd, schicke mit z.B.

1
echo HALLO WELT | nc  localhost 1234

Daten und schau, was in /tmp/test.log ankommt.

radoe2

Anmeldungsdatum:
30. November 2006

Beiträge: 243

diesch schrieb:

Restarte inetd, schicke mit z.B.

1
echo HALLO WELT | nc  localhost 1234

Daten und schau, was in /tmp/test.log ankommt.

Die Bash auf Ubuntu ist mit Netzwerksupport übersetzt. Das Sendebeispiel kann man damit zu

1
echo HALLO WELT > /dev/tcp/localhost/1234

vereinfachen und netcat komplett einsparen.

Antworten |