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

[gelöst] Eine Bash Funktion per SSH ausführen

f.gruber

Hacker
Hallo,
kann mir bitte jemand helfen: Habe eine Funktion
Code:
rotation () {
   ...
}
Diese Funktion möchte ich einmal direkt aufrufen und ein anderes Mal auf einem entfernten Host über SSH.
Geht das irgendwie?

So jedenfalls nicht:
Code:
if [ -z $ZIEL_Host ] ; then rotation
else "ssh $ZIEL_Host rotation"; fi
 

abgdf

Guru
Ich hab' zwar keine Ahnung von ssh, aber ein Skript / einen Befehl wirst Du damit ausführen können, oder?

Also, Du machst ein bash-Skript mit Deiner Funktion darin und einer Zeile, die die Funktion aufruft.
Dann rufst Du das Skript über ssh auf. Der Rückgabewert der Funktion muß dann Ausgabe des Skripts werden (so daß Dein aufrufendes Programm diese Ausgabe z.B. in einer Pipe verarbeiten kann).
 
OP
F

f.gruber

Hacker
Dann muss aber das Skript auf dem Remote Host sein, damit ich es über SSH aufrufen kann.
Ich möchte aber den ganzen Programmcode beisammen haben auf dem lokalen Rechner in einem Skript, deswegen eben die Idee mit einer Funktion, die einmal normal und ein anderes Mal über SSH auf dem entfernten Host ausgeführt werden soll.

Ich denke, das wird wohl gar nicht gehen, sondern ich muss alle Befehle durch Strichpunkte getrennt als Parameter dem SSH Kommandol übergeben, also so:
Code:
ssh host "befehl1; befehl2; befehl3; ..."
Das geht ja auf jeden Fall. Ich hätte nur nach einer komfortableren Lösung gesucht.
 

spoensche

Moderator
Teammitglied
Per SSH eine Bash Funktion aufrufen wird ohne weiteres nicht funktionieren. Damit es funktioniert hast du mehrere Möglichkeiten:

1. Das Script, in dem die Funktion definiert ist muss beim Login geladen werden, damit die Funktion zur Verfügung steht.
2. Du schreibst ein Script, das die Funktion aufruft und dieses Script führst du dann per SSH aus.
 
OP
F

f.gruber

Hacker
spoensche schrieb:
...
1. Das Script, in dem die Funktion definiert ist muss beim Login geladen werden, damit die Funktion zur Verfügung steht.
2. Du schreibst ein Script, das die Funktion aufruft und dieses Script führst du dann per SSH aus.
Beides setzt aber voraus, dass das Skript auf dem Ziel Host liegt, wenn ich das richtig verstehe.
 

spoensche

Moderator
Teammitglied
f.gruber schrieb:
spoensche schrieb:
...
1. Das Script, in dem die Funktion definiert ist muss beim Login geladen werden, damit die Funktion zur Verfügung steht.
2. Du schreibst ein Script, das die Funktion aufruft und dieses Script führst du dann per SSH aus.
Beides setzt aber voraus, dass das Skript auf dem Ziel Host liegt, wenn ich das richtig verstehe.

Ja, richtig verstanden.
 
OP
F

f.gruber

Hacker
Habe es daher jetzt so gemacht:
Code:
if [ -z $ZIEL_Host ] ; then 
    /usr/local/bin/rotation.sh 
else 
    scp /usr/local/bin/rotation.sh $ZIEL_Host:/usr/local/bin
    ssh $ZIEL_Host "/usr/local/bin/rotation.sh"
fi
Etwas umständlich aber es funktioniert.
 
A

Anonymous

Gast
framp schrieb:
Das finde ich aber nicht umstaendlich.
doch ;)
und außerdem bleibt das Script dann auch noch auf dem remote-Host liegen und könnte dort von anderen Usern eingesehen und ausgeführt werden. Äußerst unschön.

wenn du wie in deinem Beispiel alle Befehle und Funktionen die du local sowie auch remote ausführen willst in einem Script stehen, dann geht es auch ohne dieses Script erst auf den entfernten Rechner zu kopieren.

Code:
if [ -z $ZIEL_Host ] ; then
    /usr/local/bin/rotation.sh
else
   ssh $ZIEL_Host  'bash -s --'  <  /usr/local/bin/rotation.sh
fi

wenn das Script noch Optionen benötigen würde können diese dann sogar noch hinten drangehängt werden.
hatten wir erst vor nicht allzulanger Zeit. http://forum.linux-club.de/viewtopic.php?f=91&t=118356

robi
 
Oben