ubuntuusers.de

SFTP-Upload-Script gesucht

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

allesdabei

Avatar von allesdabei

Anmeldungsdatum:
31. März 2010

Beiträge: 46

Wohnort: München in Bayern

Hallo@All,

ich bin auf der Suche nach einem einfachen Shell-Upload-Script für SFTP (SSH File Transfer Protocol), hat da eventuell einer von Euch eines für mich, oder kann mir jemand Tipps geben, wie ich eines erstellen kann oder eine gute URL.

Ich bräuchte es, damit ich täglich per Cronjob, meine Backups von meinem zwei Servern auf den Backup-Server schieben kann. Der Backup-Server stellt leider nur SFTP zur Verfügung. Die Authentifizierung erfolgt mittels Benutzername und Passwort und/oder Benutzername und SSH-Key.

Ich sag schon einmal ganz artig danke für alle Infos, Tipps, Anregungen oder eventuell Beispiele 😉

Liebe Grüße Sven

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21846

Wohnort: Lorchhausen im schönen Rheingau

Wenn sFTP zur Verfügung steht, müsste doch auch scp gehen. Und das lässt sich im Zusammenspiel mit SSH-Keys doch scripten

allesdabei

(Themenstarter)
Avatar von allesdabei

Anmeldungsdatum:
31. März 2010

Beiträge: 46

Wohnort: München in Bayern

Hallo redknight,

nein, scp steht nicht zur Verfügung.

Grüsse

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21846

Wohnort: Lorchhausen im schönen Rheingau

Gut, dann halt mit dem Batchfilemode -b

sftp -b batchfile [user@]host

-b batchfile

Batch mode reads a series of commands from an input batchfile instead of stdin. Since it lacks user interaction it should be used in conjunction with non-interactive authentication. A batchfile of ‘-’ may be used to indicate standard input. sftp will abort if any of the following commands fail: get, put, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, and lmkdir. Termination on error can be suppressed on a command by command basis by prefixing the command with a ‘-’ character

Das sollte - mit einer passend erstellten batchfile - ja das tun, was du haben willst.

allesdabei

(Themenstarter)
Avatar von allesdabei

Anmeldungsdatum:
31. März 2010

Beiträge: 46

Wohnort: München in Bayern

Hallo@All,

an alle, die es Interessiert, wie ich es gelöst habe, hier die Lösung:

Inhalt der uploader.sh

#!/bin/sh

MyUSER="USER"                               # user der auf den backup-server darf
MyKEY="/pfad/zum/key_file"                  # pfad zum key-file

MyHOST="127.0.0.1"                          # hostname/ip vom backup-server
MyPORT="4711"                               # port auf dem backup-server

WORKERDIR="/tmp"                            # verzeichnis fuer das batchfile
LOCALDIR="/backups"                         # wo sind die gepackten archive
REMOTEDIR="/upload"                         # das ist das zielverzeichnis

# jetzt wird gearbeitet

# jetzt bauen wir uns erstmal das batchfile, das dass
# verzeichnis ausliest
echo "cd $REMOTEDIR" >> $WORKERDIR/batchfile

for i in `ls -x -1 $LOCALDIR`
do
 echo "put $LOCALDIR/$i" >> $WORKERDIR/batchfile
done

echo "exit" >> $WORKERDIR/batchfile

# hier ist der eigentliche upload auf den backup-server
sftp -b $WORKERDIR/batchfile -o PubkeyAuthentication=yes -o IdentityFile=$MyKEY -o Port=$MyPORT $MyUSER@$MyHOST

# schreibe ins syslog
if [ $? -ne 0 ]; then

    logger -p local1.info -t "WARNING: Beim Upload gab es ein Probleme!."

else

    logger -p local1.info -t "INFO: Upload ohne Probleme durchgefuehrt."

fi

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21846

Wohnort: Lorchhausen im schönen Rheingau

Vielen Dank für das veröffentlichen Deiner Lösung

kubuntu_andi

Anmeldungsdatum:
16. September 2007

Beiträge: 187

Hallo zusammen,

ich suche genau das selbe und habe jetzt versucht, mir anhand Deines Beispiels so ein Script zu basteln - leider nicht sehr erfolgreich:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/sh

HOST="123.123.123.123"
USER="myuser"
KEYFILE="/home/ich/password.txt"

REMOTEDIR="/upload"
WORKERDIR="/tmp"

FILE='/home/ich/file.txt'

# jetzt bauen wir uns erstmal das batchfile, das dass
# verzeichnis ausliest
echo "cd $REMOTEDIR" >> $WORKERDIR/batchfile

echo "put $FILE1" >> $WORKERDIR/batchfile


echo "exit" >> $WORKERDIR/batchfile

# hier ist der eigentliche upload auf den backup-server
sftp -b $WORKERDIR/batchfile -o PubkeyAuthentication=yes -o IdentityFile=$MyKEY $USER@$HOST

Als Meldung bekomme ich:

command-line line 0: Missing argument.
Couldn't read packet: Connection reset by peer

..was sollte denn da für ein Argument fehlen? In der password.txt habe ich einfach nur mein Passwort reingeschrieben ... ist das so gedacht oder verstehe ich da etwas falsch?

Vielen Dank für jede Hilfe!

Viele Grüße, Andi

kubuntu_andi

Anmeldungsdatum:
16. September 2007

Beiträge: 187

Oh, jetzt ist mir noch ein Fehler aufgefallen: Ich hatte den falschen Namen für das Keyfile angegeben. Wenn ich den korrigiere, klappt es aber leider immernoch nicht:

Host key verification failed.
Couldn't read packet: Connection reset by peer

allesdabei

(Themenstarter)
Avatar von allesdabei

Anmeldungsdatum:
31. März 2010

Beiträge: 46

Wohnort: München in Bayern

kubuntu_andi schrieb:

Oh, jetzt ist mir noch ein Fehler aufgefallen: Ich hatte den falschen Namen für das Keyfile angegeben. Wenn ich den korrigiere, klappt es aber leider immernoch nicht:

Host key verification failed.
Couldn't read packet: Connection reset by peer

Hallo,

Du brauchst hier einen SSH-Key (siehe SSH (Abschnitt „Authentifizierung-ueber-Public-Keys“)), ich habe dafür einen extra Benutzer angelegt mit eigenen Schlüsseln. Die rechte müssen natürlich auch stimmen 😉.

a1d3s

Anmeldungsdatum:
15. April 2008

Beiträge: Zähle...

Hi also ich hab das jetzt alles probiert funktioniert super soweit Aber: es bleibt bei sftp> exit stehen. wenn ich dann strg+c mache und nochmal ausführe bleibt es dabei aber wenn sich z.b. was in dem ordner ändert wird dies nicht kopiert weil sftp bzw das script noch irgendwo im cache hängt. ist ein wenig blöd wenn ich nach jedem durchlauf den rechner neu starten muss damit das script wieder läuft.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/sh

MyUSER="root"                               # user der auf den backup-server darf
MyKEY="/home/user/.ssh/id_rsa"                  # pfad zum key-file

MyHOST="192.168.252.198"                          # hostname/ip vom backup-server
MyPORT="22"                               # port auf dem backup-server
datum=`date '+%d%m%y'`
WORKERDIR="/tmp"                            # verzeichnis fuer das batchfile
LOCALDIR="/home/user/dat$datum"                         # wo sind die gepackten archive
REMOTEDIR="/root/backup/dat$datum"                         # das ist das zielverzeichnis

# jetzt wird gearbeitet

# jetzt bauen wir uns erstmal das batchfile, das dass
# verzeichnis ausliest
echo "cd $REMOTEDIR" >> $WORKERDIR/batchfile

for i in `ls -x -1 $LOCALDIR`
do
 echo "put $LOCALDIR/$i" >> $WORKERDIR/batchfile
done

echo "exit" >> $WORKERDIR/batchfile

# hier ist der eigentliche upload auf den backup-server
sftp -b $WORKERDIR/batchfile -o PubkeyAuthentication=yes -o IdentityFile=$MyKEY -o Port=$MyPORT $MyUSER@$MyHOST

# schreibe ins syslog
if [ $? -ne 0 ]; then

    logger -p local1.info -t "WARNING: Beim Upload gab es ein Probleme!."

else

    logger -p local1.info -t "INFO: Upload ohne Probleme durchgefuehrt."

fi

hab am anfang noch ne kleine variable drin da auf beiden systemen ein cron läuft der täglich einen ordner erstellt mit datum

EDIT:// hier meine Lösung das problem war der logger , dieser beendete sich nicht und da das /tmp/batchfile auch vorhandenbleibt wird es zwar ergänzt aber nur der erste teil darin wird abgearbeitet, nachdem ich es nun nach jedem durchlauf lösche funktioniert das auch mit dem "sync"

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
!/bin/sh

MyUSER="root"                               # user der auf den backup-server darf
MyKEY="/home/stefan/.ssh/id_rsa"                  # pfad zum key-file

MyHOST="192.168.252.198"                          # hostname/ip vom backup-server
MyPORT="22"                               # port auf dem backup-server
datum=`date '+%d%m%y'`
WORKERDIR="/tmp"                            # verzeichnis fuer das batchfile
LOCALDIR="/home/stefan/dat$datum"                         # wo sind die gepackten archive
REMOTEDIR="/root/backup/dat$datum"                         # das ist das zielverzeichnis

# jetzt wird gearbeitet

# jetzt bauen wir uns erstmal das batchfile, das dass
# verzeichnis ausliest
echo "cd $REMOTEDIR" >> $WORKERDIR/batchfile

for i in `ls -x -1 $LOCALDIR`
do
 echo "put $LOCALDIR/$i" >> $WORKERDIR/batchfile
done

echo "exit" >> $WORKERDIR/batchfile

# hier ist der eigentliche upload auf den backup-server
sftp -b $WORKERDIR/batchfile -o PubkeyAuthentication=yes -o IdentityFile=$MyKEY -o Port=$MyPORT $MyUSER@$MyHOST

rm $WORKERDIR/batchfile
# schreibe ins syslog
#if [ $? -ne 0 ]; then

#    logger -p local1.info -t "WARNING: Beim Upload gab es ein Probleme!."

#else

#    logger -p local1.info -t "INFO: Upload ohne Probleme durchgefuehrt."

#fi

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Mal noch generelle Anmerkungen: Wenn auch eine SSH-Shell zur Verfügung steht, kann auch rsync genutzt werden. Ansonsten kann auch sshfs genutzt werden, was soweit ich weiß, auch nur sftp benutzt.

Antworten |