Kopieren per ssh mit anschließenden Codeaufruf

D

DerPate06

Grünschnabel
Hallo,

ich nutze die ksh und hatte folgendes vor:

/usr/bin/ssh 'server' 'aufruf einer for-schleife'

Er sollte auf dem Server bestimmte dateien suchen und diese auf eine andere kopieren. Wie funktioniert dies beim ssh?

Folgendes funktionierte (aber eigentlich wollte ich das möglichst ohne zusätzliches Script auf der anderen Maschine machen):

/usr/bin/ssh 'server' 'script mit parametern'

Danke für die Hilfe
 
"for ..." gehört ja zum Befehlsumfang einer Shell-Umgebung wie z.B. der bash, folglich muß diese auch aktiviert werden. Warum also kein Script? Evtl. geht's auch mit einem Einzeiler (z.B. "bash --login -c <command>"), habe ich aber noch nicht probiert.
 
Zuletzt bearbeitet:
Hi,

verstehe nicht, wo das Problem liegt; ein einfaches
Code:
ssh server 'for F in passwd shadow group; do ls -l /etc/$F; done'
funktioniert doch problemlos? Vielleicht solltest du erst genauer angeben was du bereits versucht hast, und was dabei nicht läuft ...

Gruss, A.
 
Hi,

erstmal danke für die Tipps, hatte irgendwie nur einen fehlerhafte Parameterübergabe. Folgendes funktioniert:

/usr/bin/ssh 'server' 'for i in `find . -type f -ctime -1 | grep -v '^./.*/'`; do scp -p $i SERVER:$i;done'

Gruss M.
 
Hi,

nochmals eine Frage zur Variablenübergabe.

Folgendes funktioniert nicht:
/usr/bin/ssh 'server' "export $ORDNER; for i in`find $ORDNER-type f -ctime -1 | grep -v '^./.*/'`; do echo $i; done"

Die Fehlermeldung ist Syntax ERROR.

Ist die Parameterübergabe hier nicht richtig? Wenn ich nur den Parameter $ORDNER über ein echo testweise ausgebe,
funktioniert es auch. Hat da vielleicht noch jemand eine Idee?

Gruss M.
 
Hi,

du könntest mal
Code:
/usr/bin/ssh server "export ORDNER=$ORDNER; for i in `find $ORDNER -type f -ctime -1 | grep -v '^./.*/'`; do echo $i; done"
versuchen, oder den export-Befehl ganz weglassen: wenn du den Wert von $ORDNER nur im find-Kommando verwendest, kannst du ihn ja dort auch direkt einsetzen.

Was du mit dem grep -v '^./.*/' eigentlich erreichen willst, ist mir allerdings unklar: wenn du einfach alle .-Files ignorieren willst, ginge evtl. auch etwas wie
Code:
/usr/bin/ssh server "for i in `find $ORDNER -type f -ctime -1 ! -name '.*'`; do echo $i; done"
oder gleich (ganz ohne die for-Schleife)
Code:
/usr/bin/ssh server "find $ORDNER -type f -ctime -1 ! -name '.*' -exec echo {} \;"

Gruss, A.
 
Hi,

ich habe es jetzt wie folgt gelöst (Kopieren mit Unterordner - werden beim scp bei der Zielmaschine nicht mit angelegt)

cd $Ordner
touch name_backup.tar

find $Ordner -type f -mtime -1 -exec tar rf name_backup.tar {} \; >/dev/null 2>>$Ordner/log.err


scp -p $Ordner/name_backup.tar dirx@$TARGET:$Ordner >/dev/null 2>>$Ordner/log.err

RMD_CMD="cd $Ordner; \
tar xf Name_backup.tar >/dev/null 2>>$Ordner/log.err; \
rm name_backup.tar"


/usr/bin/ssh dirx@$TARGET $RMD_CMD

rm $Ordner/name_backup.tar

Gruss, M.
 

Ähnliche Themen

PHP funktioniert, nur Web-Aufrufe mit Optionen nicht.

Unix: Zeile aus ManSeite kopieren

2 Ordner unter wget kopieren

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

Netzwerkproblem ? , wo ud wie suchen

Zurück
Oben