• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Tipp] HoTo ssh in einer while Schleife

JoKurt

Member
Hallo,

da ja die Frage hier schon des öfteren aufkam "Wie benutze ich ssh in einer while schleife", kommt hier die Lösung:

Code:
## Datei mit IP Adressen oder Hostname wird per cat ausgegeben, mit grep werden Zeilen, die ein # beinhalten ignoriert und read -r ausgelsen
cat datei_mit_einträge | grep -v "#" | while read -r adresse
     do
        ssh -x -a root@$adresse "reboot" & ##anstatt reboot kann natürlich jeder Befehl genutzt werden
done ## zurück zum Schleifenanfang und wieder von vorne, bis die Datei keine Daten mehr hat

Ich hoffe das hilft anderen Leuten auch weiter, die evtl. das gleiche Problem haben ;)

Ich habe zwar lange daran gesessen (ohne fremde Hilfe), aber es funktioniert ;)
man pages sind doch manchmal ganz nützlich.....

Ich hoffe das Rätsel der while-ssh Schleife auch für andere gelöst zu haben.

Gruß
JoKurt
 

framp

Moderator
Teammitglied
Hatte auch mal das Problem. Beim Googeln habe ich
http://www.ibm.com/developerworks/aix/library/au-satdistadmin/ gefunden wo 2 sehr schöne Varianten stehen wie man sehr elegant auf einer Menge von Maschinen per ssh sequentiell oder parallel Befehle ausführen kann.
 

regexer

Advanced Hacker
JoKurt schrieb:
Ich hoffe das Rätsel der while-ssh Schleife auch für andere gelöst zu haben.
Der Workaround ist OK, aber das eigentliche "Rätsel" ist aus meiner Sicht noch nicht gelöst...

Was anderes: Funktioniert eigentlich ein wait? Immerhin würde diese While-Schleife im Zweifelsfall ganz viele Sessions parallel aufmachen...
 
OP
J

JoKurt

Member
@notoxp
Jap ein Wait funktioniert auch ;)
Der Wait befehl sieht dann so aus:

Code:
wait $!

Ich benutze aber lieber sleep 3, weil noch einiges am System selber passiert.

@framp
ist auch nett, allerdings hilft das mir beim auslesen zweier Datensätze aus einer Config-Datei nicht wirklich weiter.


Gruß
JoKurt
 
notoxp schrieb:
Was anderes: Funktioniert eigentlich ein wait? Immerhin würde diese While-Schleife im Zweifelsfall ganz viele Sessions parallel aufmachen...

$! ist die PID des zuletzt mit "&" gestarteten Prozesses _nur dieser Shell_ (wenn vorhanden).
Nur "wait" wartet auf alle Prozesse im Hintergrund dieser Shell.
"wait <pid>" wartet bis der Prozess "<pid>" beendet ist.

Zum Grund aus meiner Sicht: Wie schon von mir im anderen Thread geschrieben liest
ssh nach meiner Erinnerung "stdin" von der Schleife weg. => Schleife hört auf.

Ein ssh im Hintergrund kommt nicht an das "stdin" der Schleife.

Haveaniceday
 
Oben