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
Moderator & Supporter
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)
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
Moderator & Supporter
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)
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
Moderator & Supporter
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)
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.
|