PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BASH - SSH-Tunnel - Befehle ausführen



tetex
18-02-2010, 10:28
Hallo zusammen,

habe ein Script das einen SSH-Tunnel vom lokalen Linux-System zu einem anderen Linux-System (remote) aufbaut. Anschließend sollen die im Script enthaltenen Befehle auf dem Remote-System ausgeführt werden. Funktioniert aber irgendwie nicht.

Folgendes zum Test:


#!/bin/bash

SSHKEY="/root/.ssh/tunnel"
WHOYOUARE=$(ping -c 1 $REMOTE_MACHINE | awk -F" |:" '/from/{print $4}')

ssh -i $SSHKEY root@$WHOYOUARE

DUMP_FILE_NAME=$("ls -t $DUMP_ARCHIVE$ORACLE_USER*.DMP* | head -1")

echo $DUMP_FILE_NAME

Das "ls -t" führt er nicht wie er sollte auf dem Remote-System aus sondern local obwohl das Script durch den SSH-Tunnel doch bereits auf dem neuen System ist oder nicht? Scheinbar aber nicht! ^^

Habe es auch schon mit EOF probiert...


#!/bin/bash

SSHKEY="/root/.ssh/tunnel"
WHOYOUARE=$(ping -c 1 $REMOTE_MACHINE | awk -F" |:" '/from/{print $4}')

ssh -i $SSHKEY root@$WHOYOUARE <<EOF

DUMP_FILE_NAME=$("ls -t $DUMP_ARCHIVE$ORACLE_USER*.DMP* | head -1")

echo $DUMP_FILE_NAME

EOF

funktionierte leider auch nicht. Kann mir bitte jemand sagen wie das umzusetzen ist?

Gruß

msi
18-02-2010, 11:56
du kannst ssh den befehl den es aufrufen soll als parameter übergeben:


ssh root@server "ls -l /was/auch/immer" > lokale_datei

so kannst du dann den output von dem befehl ls -l ... (wird auf dem remoten rechner aufgerufen) in der lokalen datie gespeichert.

tetex
18-02-2010, 13:28
Gibt es wirklich keine andere Möglichkeit die Befehle direkt an die Remote-Shell zu senden?

Mein Script beinhaltet mehr als nur das obige Beispiel... da sind if-Abfragen, jede Menge Variablen... exit-Codes usw.

Ich weiß nicht, ob das mit deinem Beispiel so einfach möglich ist. Aber danke.

msi
18-02-2010, 17:01
deine zweite variante mit dem <<EOF ... EOF funktioniert so schon auch.
Allerdings wrid $(..) schon auf deinem lokalen rechner ausgewertet.
wenn du das nicht möchtest musst du entspr escapen


bsp.:



# ssh localhost <<EOF
> cd /tmp
> echo \$(ls -l)
> EOF
root@localhost's password:
stdin: is not a tty
total 20 -rw-r--r-- 1 root root 1 2010-01-29 01:54 tcpdump.out -rw-r--r-- 1 root root 15264 2010-01-29 01:54 temp.cap

tetex
01-03-2010, 09:18
Klasse @msi !!

Der erste Test hat funktioniert und das gewünschte Resultat gebracht.

Mal sehen ob es auch mit dem ganzen Script funktioniert.

tetex
01-03-2010, 14:43
Klasse @msi !!

Der erste Test hat funktioniert und das gewünschte Resultat gebracht.

Mal sehen ob es auch mit dem ganzen Script funktioniert.

###edit###

Nach ein paar Stunden habe ich es nun geschafft.

Ergebnis: Einen zentralen Hudson geschaffen von dem aus Oracle Dumps auf Maschinen nach Wahl automatisiert importiert werden können.