jones79
Anmeldungsdatum: 23. Juni 2009
Beiträge: 79
|
Hallo! Ich steh grad irgendwo auf dem Schlauch... ☺)
Könnt Ihr mir weiterhelfen? Mein Backupskript sieht im Prinzip so aus: | #!/bin/bash
sudo rsync -azvvv --modify-window=2 -e 'ssh -i /home/administrator/.ssh/id_rsa' --stats --progress --delete --delete-excluded --exclude-from=/home/administrator/.rsync/exclude.txt --log-file=/home/administrator/.rsync/rsync_dns323.log / root@DLINK-16G314:/mnt/HD_a2/administrator/RAIDBackup/ 2> /home/administrator/.rsync/error_dns323.log
|
Wird natürlich alles über Variablen gesetzt, aber das ist der Befehl, der am Ende hinten rauskommt. Das Problem ist jetzt, dass das Skript beim Ausführen mit [sender] _exit_cleanup(code=1, file=main.c, line=363): about to call exit(1) abbricht. Da das Skript aber per echo den Befehl vor dem Ausführen einfach ausspuckt, kann ich den direkt im Terminal ausführen und dann funktioniert alles einwandfrei. Ich hab irgendwie das Gefühl, dass es was mit dem eingebetteten ssh-Befehl und doppelten oder einfachen Anführungsstrichen zu tun hat, aber ich finds einfach nicht...
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21818
Wohnort: Lorchhausen im schönen Rheingau
|
Wenn dein Skript "im Prinzip" so aussieht, wie sieht es denn dann wirklich aus? Das Leerzeichen zwischen 2> und /home/[...] muss afaik weg du führst das mit sudo aus? root hat eigentlich keine leserechte auf ~/.ssh/id_rsa bzw verweigern viele Anwendungen der Start, wenn die rechte nicht stimmen. Kontrolliere das. ist das ein cronjob? Dann absolute Pfade angeben, vermutlich auch für ssh
|
jones79
(Themenstarter)
Anmeldungsdatum: 23. Juni 2009
Beiträge: 79
|
hi! 1.) Hier mal ein Ausschnitt...
Das ganze Skript ist bischen wild ☺ Da gibts noch if-Klauseln,
die auf vorhandene verzeichnisse prüfen o.ä. 1
2
3
4
5
6
7
8
9
10
11
12
13 | HOST="root@DLINK-16G314"
SOURCEDIR="/"
TARGETDIR="/mnt/HD_a2/administrator/RAIDBackup/"
SSHDIR=$HOST":"$TARGETDIR
SSHKEY="/home/administrator/.ssh/id_rsa"
LOGFILE2="/home/administrator/.rsync/rsync_dns323.log"
LOGPARAMETER="--log-file="$LOGFILE2
ERRORLOG="/home/administrator/.rsync/error_dns323.log"
OPTIONS="-azvvv --modify-window=2 -e 'ssh -i $SSHKEY' --stats --progress --delete --delete-excluded"
EXCLUDES="--exclude-from=/home/administrator/.rsync/exclude.txt"
echo "sudo rsync $OPTIONS $EXCLUDES $LOGPARAMETER $SOURCEDIR $SSHDIR 2> $ERRORLOG"
sudo rsync $OPTIONS $EXCLUDES $LOGPARAMETER $SOURCEDIR $SSHDIR 2> $ERRORLOG
|
2.)
ist glaub bei einer datei egal, nur wenns
2>&1
lautet muss es wohl direkt dran sein 3.) sudo ist nötig (weiß nicht genau warum, aber ohne funzts nicht) und es ist ja egal, dass root keine Leserechte hat, sudo bedeutet ja "führe aus als Benutzer mit root-rechten" und nicht "führe aus als root", oder? Was mich verwirrt, ist dass es einfach funktioniert wenn ich den Befehl im Terminal eingebe. 4.) Ne, kein cronjob, soll aber einer werden, deswegen brauche ich ja die ssh-Verbindung ohne Passwortabfrage und mit rsa-key.
Bearbeitet von redknight: Codeblock mit Syntaxhighlighting.
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21818
Wohnort: Lorchhausen im schönen Rheingau
|
jones79 schrieb: 2.)
ist glaub bei einer datei egal, nur wenns
Alle mir bekannten Erklärungen zur Ausgabeumleitung schreiben direkt hintendran, so hab ich mir das auch angewöhnt. Allerdings find ich nun auch andere Beispiele. 3.) sudo ist nötig (weiß nicht genau warum, aber ohne funzts nicht) und es ist ja egal, dass root keine Leserechte hat, sudo bedeutet ja "führe aus als Benutzer mit root-rechten" und nicht "führe aus als root", oder?
Nein. Es heisst "führe als root aus", vgl sudo
$ sudo whoami
root Was mich verwirrt, ist dass es einfach funktioniert wenn ich den Befehl im Terminal eingebe.
Mit sudo oder ohne? Über den rest muß ich erst mal meditieren.
|
jones79
(Themenstarter)
Anmeldungsdatum: 23. Juni 2009
Beiträge: 79
|
2.) Stimme dir jetzt vollkommen zu ☺ Die direkte Ausführung klappt nur mit sudo. Die Datensicherung sichert ja mein komplettes System und ich glaub das
mit sudo hatte ich so eingerichtet, dass er alle Dateien sichert,
auch die, bei denen nur root Leseberechtigung hat. Wie schon gesagt, ohne sudo bricht er ab.
Die Meldung dazu ist FATAL I/O ERROR: dying to avoid a --delete-during issue with a pre-3.0.7 receiver.
[sender] _exit_cleanup(code=4, file=flist.c, line=1800): about to call exit(4) Exitcode 4
"...or an option was specified that is supported by the client and not by the server." Da steht ja auch was dran, pre-3.0.7.reciver...aber als root funktioniert es.
Vermutlich ist es weil im Zielverzeichnis System-Dateien gelöscht werden müssen.
die im Quellverzeichnis nicht mehr vorhanden sind. Kann es irgendwas mit dem eingebetteten ssh-Befehl im rsync-Befehl zu tun haben? Na dann meditier mal und erleuchte mich ☺
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21818
Wohnort: Lorchhausen im schönen Rheingau
|
Um mal Voodoo zu betreiben (ich rate jetzt nur wild, weil sonst keiner ideen hat), mit dem SSH-Teil in "" gehts auch nicht?
|
jones79
(Themenstarter)
Anmeldungsdatum: 23. Juni 2009
Beiträge: 79
|
Also in der Shell klappts sowohl in einfachen als auch in doppelten Anführungszeichen wunderbar. Im Skript klappts garnicht. Ich hab mal bischen rumprobiert
und gelesen, das man manche Zeichen "escapen muss, aber
wenn das ein Problem wäre, dann würde ja nicht der Befehl
der mittels echo ausgespuckt wird funktionieren und der sieht
schon so aus wie es sein soll und funktioniert ja auch. Kann es irgendwas damit zu tun haben dass die Variable | SSHKEY="/home/administrator/.ssh/id_rsa"
|
eingesetzt wird in | OPTIONS="-azvvv --modify-window=2 -e 'ssh -i $SSHKEY' --stats --progress --delete --delete-excluded"
|
und dadurch irgendeine Formatierung verloren geht? Jedenfalls funktioniert der ssh-teil | ssh -i /home/administrator/.ssh/id_rsa root@DLINK-16G314
|
in der Shell problemlos. Mit oder ohne sudo ☺ Hat noch jemand eine Idee?
|
compiopa
Anmeldungsdatum: 18. November 2009
Beiträge: 68
Wohnort: Franken
|
Hallo jones79, ich bastle eben auch an so was.
SERVER_IP="192.168.xxx.xxx"
SSHUSER="backupuser"
SSH="/usr/bin/ssh -i /home/backupuser/.ssh/backupuser-rsa-key"
QUELLE="${SSHUSER}@${SERVER_IP}:/datenverzeichnis/"
RSYNC="/usr/bin/rsync -ab --stats -e"
ZIEL="/backupverzeichnis"
LOGDATEI="/verzeichnis/zur/logdatei/logdatei.log"
$RSYNC "${SSH}" ${QUELLE} ${RSYNCZIEL} >> $LOGDATEI 2>&1
Das funktioniert bei mir per script und cron.
Wie es mit sudo funktioniert, weiss ich auch noch nicht. Das ist sicher auch wieder tricky. 😊 Wenn Du das hin bekommst, lass es mich wissen, da ich das ja auch brauche. 😀 Gruß compiopa
|
redknight
Moderator & Supporter
Anmeldungsdatum: 30. Oktober 2008
Beiträge: 21818
Wohnort: Lorchhausen im schönen Rheingau
|
Ein interessiert mich da noch; Wenn du dir mit sudo -s eine rootshell hols und ds script (ohne sudo drin) ausführst, klappt es dann?
|
jones79
(Themenstarter)
Anmeldungsdatum: 23. Juni 2009
Beiträge: 79
|
Moin! So, ich hab noch bischen probiert und folgendes rausgefunden. Wenn ich als eingeschobenen Befehl nur verwende, dann funktioniert es mit dem Skript. Das heißt wenn die Key-Datei am Standardort unter ~/ssh/id_rsa ist, dann wird sie automatisch gefunden und benutzt. Ich habe allerdings um eventuelle Problem mit sudo auszuschließen, den Schlüssel auch mit richtigen Rechten im Home-Verzeichnis von root hinterlegt. Das Skript funktioniert aber trotzdem nicht. Liegt der Schlüssel nicht unter ~/ssh/id_rsa, wie z.b. bei compiopa | -i /home/backupuser/.ssh/backupuser-rsa-key
|
dann würde es bei mir nicht funktionieren. Das kann man einfach probieren in dem man sich mittels auf den Server einwählt. Ansonsten habe ich das Skript unter /etc/sudoers hinzugefügt, damit es ohne Passwortabfrage ausgeführt werden darf. | administrator ALL = NOPASSWD: /home/administrator/Skripte/rsync_backup.sh
|
Bezogen auf das ursprüngliche Problem bin ich aber immer noch ratlos...
|
compiopa
Anmeldungsdatum: 18. November 2009
Beiträge: 68
Wohnort: Franken
|
Hallo jones79, bei mir klappt es jetzt. 😊 Allerdings betreibe ich, im Gegensatz zu Dir, rsync im "pull modus", während Du es im "push modus" betreibst. Du kannst meine Lösung deshalb nicht 1:1 übernehemen. Aber vieleicht ist sie Dir bei derr lösung Deines Problems etwas behilflich. Meine Lösung findest Du hier: http://forum.ubuntuusers.de/topic/ssh-server-server-verbindung/2/#post-2672607 Gruß compiopa
|