Sandre Useres schrieb:
Ich möchte/muss ein Script basteln was verschiedene Aufgaben local und remote - via ssh auf verschiedenen und wechselnden Zielen, - ausführen soll, also etwa:
#!/bin/sh foobar_here ssh foobar_there ssh foobar_to_other barfoo_here ...
Konkret möchte ich mit einem Script lokal und auf verschiedenen ssh remote arbeiten und zwar mit fs-operationen und cmd-aktionen. Dabei kann ich NICHT mit ssh-keys arbeiten, der Schlüsseltausch wäre einfach zu aufwendig und ist auch nicht nötig. ...
Kleiner Zwischenbericht: Ab openssh.4.0 gibt es die Option ControlMaster mit der man quasi zusätzliche ssh Aufrufe über den selben Kanal laufen lassen kann. Das hat den Vorteil, z.b. in einen script nur beim ersten mal nach den Passwort gefragt zu werden und alle ssh Verbindungen laufen über einen Kanal was dann im Remote-Log auch nur mit einem Eintrag zu Buche schlägt. Als erstes sollte man ein extra Verzeichnis anlegen: #> mkdir ~/.ssh/tmp dann die eigentliche Config (erweitern), hier im Usermode: #> cat >> ~/.ssh/config << EOF Host * ControlPath ~/.ssh/tmp/master-%r@%h:%p ControlMaster auto EOF Ab sofort werden ssh Verbindungen zum gleichen Rechner über den selben Kanal abgewickelt, WENN noch eine ssh-Verbindung besteht. Bei der ersten Verbindung - ODER wenn noch keine, oder keine mehr, besteht - erfolgt ggf. eine Passwortanfrage. Dies funktioniert mit Password UND ssh-Keys mit oder ohne Passwort. Um z.B. eine Verbindung herzustellen und offenzuhalten reicht ein: #> ssh -l [USER] -f -n 'sleep 360s' # 350s == 5min Das -f -n zwingt den ssh in den Hintergrund. Aber ACHTUNG *!!SICHERHEITSRISIKO!!* Solange noch eine angemeldete Verbindung besteht, kann mit der selben Nutzerkennung JEDERZEIT eine neue Verbindung OHNE Passwortabfrage initiert werden. Das ist zwar für den Lauf eines Scriptes erwünscht, jedoch sollte das Timeout nur auf unbedingt notwendige Länge beschränkt werden. Wenn man innerhalb seines Scriptes mehrere ssh-Aktionen fährt, setzt man vielleicht besser ein 'doorstopper' hinter die einzelnen Komandos, um die Zeit zum nächsten ssh zu überbrücken - (!) das detach = -f -n nicht vergessen! -. Also etwa: ... ssh -l [USER] -f -n 'df -h ; foobar; sleep 10s' # do something here ssh -l [USER] -f -n 'do everything there; sleep 10s' ... Der ssh-Kanal bleibt solange offen bis das letzte ssh-Kommando endet. Also egal ob das sleep abgelaufen ist, solange das rsync -e 'ssh ...' noch läuft, bleibt der Kanal offen. Möchte man das temporär abschalten hilft die Option -o - oder man dreht das alles um - ;-) #> ssh -o ControlMaster=no ... Ob man dem rsync ssh auch ein sleep mitgeben kann, wage ich zu bezweifeln. Vielleicht hat ja noch jemand eine Idee wie man sowas händeln könnte. Der bisherige Ansatz wäre: Ein ssh-Kanal mit ausreichender Zeit öffnen in der das rsync auf jeden Fall durchkommt, und dann ggf. den 'doorstopper' killen. So, das war's erstmal. Viel Spass noch beim ausprobrieren! ;-) Tschö' Sue -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org