PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell Script Problem: Durch While Schleife mehrere ssh-Aufrufe tätigen



GaRRaT
06.04.06, 17:06
Hallo,

ich habe eine Datei servers
In dieser Datei stehen mehrere hostnamen (in jeder Zeile einer)
ich will nun eine While Schleife machen, die die Datei servers durchgeht und sich per ssh auf jeden dieser server anmeldet und ein script ausführt.

Merkwürdigerweise bearbeitet er aber nur einen einzigen (ersten) server in der Datei.
Wenn ich den ssh-aufruf weg lasse und stattdessen z.B. ein "echo a" mache, zeigt er mir mehrere a's an.

Geht er nach einem ssh-Aufruf automatisch aus der Schleife? Kann man dies verhindern?

SSH ist so eingerichtet, dass er nach keinem Passwort fragt.

Aufruf mit ssh:
cat servers | while read input; do ssh -l root $input "touch test"; done

Aufruf mit echo:
cat servers | while read input; do echo a; done

Gruß,
Werner

claudius
06.04.06, 17:13
SSH ist so eingerichtet, dass er nach keinem Passwort fragt.

... ich will dir nicht reinreden, aber ist das nicht ein bisschen unsicher?

poste doch mal mehr vom script (bzw den ganzen); so braucht man schon fast hellseherische Fähigkeiten, um helfen zu können :D

Der Gestreifte
06.04.06, 18:29
Sowas in der Art kommt mir bekannt vor.
Probier mal
(echo servername; sleep 1; echo servername2) | while read fasel; do ssh blah; done


edit:
ein "echo" vergessen.

Samsara
06.04.06, 20:25
... ich will dir nicht reinreden, aber ist das nicht ein bisschen unsicher?
Kann ja per Zertifikat sein.

@GaRRaT:

[X] Du willst Dir mal expect anschauen.

Samsara
.

GaRRaT
07.04.06, 11:02
Hallo alle,

Danke für die Unterstützungen!

Ich habe es nun ganz anders gemacht :)

Ich benutze nun eine for-Schleife und lies die Datei zeilenweise mit awk auf:

for input in `awk '$1 ~ /'${SERVER}'/ { print $2 }' ${CONFIG}`

@Claudius: Ich benutze natürlich schon Zertifikate. Allerdings halt ohne Passphrase. Mir ist schon klar dass das nicht so sicher ist als mit, aber es wird auch einen eigenen User dafür geben. Ist nur zum Testen im moment auf root...

@Der Gestreifte: Das hat auch nicht funktioniert. Das Problem scheint zu sein, dass er nach dem ersten ssh-Aufruf komplett aus der While-Schleife geht bzw. irgendwie dann die Schleife weiter auf dem Zielsystem vom ssh-Aufruf weiterführt wo er die Serverdatei nicht hat. mir ist noch nicht ganz klar warum oder ob das so ist wie ich sage, aber jedenfalls hat es mit ner While-Schleife nicht funktioniert :)

@Samsara: Hab es mir mal überflogen, aber habe mich aus zwei Gründen dagegen entschieden. Erstens müsste man es zusätzlich installieren (was ja nicht ganz so dramatisch wäre) und Zweitens weil ich im Shellprogrammieren eh schon nicht so gut, da will ich mir eine andere Scriptsprache nicht antun :)

Aber wie gesagt, an alle noch ein herzliches Danke!

Gruß,
Werner

edit:
$SERVER = <hostname> der aus der Datei gesucht werden soll
$CONFIG = Pfad zur Konfigurationsdatei in der alle Server stehen

Die Konfigdatei sieht in etwa so aus
fry.mydomain.com task1
fry.mydomain.com task2
bender.mydomain.com task1

Dem Skript wird nun $SERVER=fry mit übergeben und das script soll dann beide tasks nacheinander abarbeiten