SSH login automatisieren

G

googelybear

Grünschnabel
Hallo zusammen,

Muss ein Skript schreiben welches sich bei ~32 Rechnern einloggt, dann eine Reihe weitere Befehle ausführt und sich wieder ausloggt.
Doch leider scheitere ich schon am ersten Schritt: Zum Verbinden wollte ich ssh verwenden, doch da muss immer das pwd eingegeben werden. Wie kann ich das in einem Shellscript automatisieren? (Es gibt ja leider keinen Parameter wo man das pwd angeben kann. alle Rechner befinden sich im selben LAN). Oder am einfachsten public/private keys verwenden wie hier beschrieben?
Danke für eure Tipps!
 
Ok habe die keys nun überall verteilt, aber irgendwie funktioniert mein Skript nicht. Z.B. folgendes um einfach ein Verzeichnis 'test' aus dem home ins local des jeweiligen Rechners zu kopieren:
for i in rechner1 rechner2 rechner3 etc.
do
echo "Copying to"$i
ssh $i
cp -r /home/user/test /local/user/
exit
echo "...finished"
done

Er loggt sich beim 1. Rechner ein und dann erscheint das Prompt. Was mache ich hier falsch?
 
Fragen über Fragen

hmm...anscheinend kann man ssh nur jeweils ein command angeben, dann funktionierts jedenfalls.
for i in rechnername1 rechnername2 etc.
do
echo "Copying files to"$i
ssh $i rm -r /local/username/test
ssh $i cp -r /home/username/test /local/username/
echo "...finished"
done

Das script soll folgendes erledigen:
1. Verzeichnis von home (global, Netzlaufwerk) in das local Verzeichnis der jeweiligen Rechners kopieren (bestehende Files sollen dabei ersetzt werden)
2. Starten eines Programmes auf allen Rechnern im cluster.

Nun hänge ich beim 2. Punkt fest, wie kann ich auf jedem Rechner ein Programm (eine eclipse rcp Anwendung) asynchron starten (ohne jeweils zu warten bis das Programm terminiert)? Und wie kann ich dann das Programm nachdem es seine Arbeit verrichtet hat wieder auf allen Rechnern beenden? Vielen Dank für eure Tipps!
 
ähm sehe ich etwas falsch oder löscht der erst die Datein, bevor der sie kopieren soll?
 
googelybear schrieb:
Nun hänge ich beim 2. Punkt fest, wie kann ich auf jedem Rechner ein Programm (eine eclipse rcp Anwendung) asynchron starten (ohne jeweils zu warten bis das Programm terminiert)?

ssh $i nohup $PROGRAMM

googelybear schrieb:
Und wie kann ich dann das Programm nachdem es seine Arbeit verrichtet hat wieder auf allen Rechnern beenden?

Macht es das nicht selber... :think:
 
Hallo

Warum nimmst du nicht gleich rsync?
Das kannst du auch mit nohup in den Hintergrund schicken.

Gruß Wolfgang
 
ok danke für die tipps, werde es morgen ausprobieren!
@SkyFlash: Das Programm läuft eigentlich auf unbestimmte Zeit und muss manuell beendet werden wenn es nicht mehr gebraucht wird (ein 'kill' tuts auch wenn sich das automatisieren lässt).

edit: Kann leider das nohup Kommando nicht verwenden, da es nicht asynchron läuft, d.h. wenn ich per ssh $i nohup <command> meine Applikation starte, wartet es einfach so lange bis das Programm terminiert und macht erst dann weiter. Allerdings könnte ich die App per ssh $i <command>& starten. Aber nun die grosse Frage: Wie beende ich die Programme am Ende auf allen Rechnern? Für kill müsste ich ja die Prozessnummer wissen....hat jemand eine Idee??

edit2: Der Titel von diesem Thread passt nicht mehr wirklich, habe daher einen neuen erstellt (hoffe das ist ok): Hier gehts weiter.
 
Zuletzt bearbeitet:

Ähnliche Themen

ssh login via shell script, und anschliessend befehele ausfuehren.

Zurück
Oben