rsync - Raspberry Pi auf DS

Status
Für weitere Antworten geschlossen.

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Leute, ich bräuchte mal eure Hilfe. Ja ich weis, das ist kein Raspberry Pi Forum und ich soll diese Fragen besser woanders stellen. Jedoch weiß ich, das ich mich auf die Leute hier verlassen kann und bestimmt jemand hier ist, der mir vielleicht helfen kann.

Als bekennender Linux-Noob hab ich es gewagt mir einen Raspberry Pi zuzulegen und diesen auch einzurichten. Soweit hat auch alles geklappt. Debian Wheezy, sowie der Apache, php, mySQL, FTP sowie Samba laufen bereits zufriedenstellend. Owncloud, der Baikalserver sowie meine eigene Website laufen auch bereits inkl. selbst erstelltes SSL-Zertifikat etc. und alles ist bereits über eine DDNS erreichbar. Soweit erstmal alles supi!

Der jetzige Zustand wurde auch durch das Anlegen eines SD-Card Images gesichert. So ein Image werde ich sporadisch auch immer mal wieder mit dem Win32DiskImager durchführen. Jedoch suche ich noch nach einer Möglichkeit, die Ordner...

/var/www (Webserver)
/var/lib/mysql/ (Datenbanken)
/media (persönliche Daten)

...regelmäßig per rsync auf meiner DS zu sichern. Und genau hier komme ich ins Straucheln. Ich habe bereits ein paar Anleitungen im Netz gefunden und auch ausprobiert, jedoch erschließen sich mir diese nicht wirklich. Ausprobiert habe ich u.a. folgende Anleitungen...

http://blog.moneybag.de/raspberry-p...erry-pi-backup-restore-mit-synology-als-host/

... und diese hier...

https://www.bitblokes.de/2013/04/sy...sh-ohne-passwort-eingabe-auf-das-nas-sichern/

Ich schaffe es jedoch nicht, das der rsync überhaupt angestoßen wird. Ich vermute mal, das es schon am Generieren des ID_RSA Key scheitert. Diesen brauch ich wohl, damit sich rsync über ssh verbindet, ohne das eine Passwortabfrage den Prozess blockiert. Mir ist aber ehrlich gesagt nicht wirklich klar, woher das System weiß, wo dieser Public-Key abgelegt wurde. Laut den Anleitungen kann ich den Key ja quasi überall speichern. Daher meine erste Frage: auf welchem System muß ich den Key generieren und auf welchem System gehört der Public Key? Wo wird dieser Key gespeichert (immer unter home/.ssh).Wo und/oder wie sag ich dem System, das der SSH-Key da oder dort liegt? Ich kann mir nicht vorstellen, das der Key automatisch gefunden wird und in den Anleitungen gibts dazu keine Infos.

Auch weis ich nicht, ob ich den rsync von der DS aus abfeuern sollte, oder aber vom Pi. Auch hier unterscheiden sich die beiden Anleitungen.

Kann ich den rsync nicht über die Netzwerksicherung der DS (Datensicherung & Replikation) anstoßen? Wie und wo müsste da der Key generiert/abgelegt werden.

Wie sieht es mit der Sicherheit aus? Da der Pi ja ins Internet zeigt... ist da so ein Public-Key überhaupt ratsam?

Ich komm da irgendwie nicht weiter und hoffe jetzt auf euch. Vielleicht hat ja jemand eine Anleitung parat oder wenigstens den entscheidenden Tipp, der mir weiterhilft. Aber wie gesagt, nur weil ich es geschafft habe, einen Pi einzurichten, heißt das noch nicht, das ich alles verstehe, was ihr mir hier evtl. gleich vor den Bug schmeißt. Also bitte "für doofe" beschreiben.

Tommes
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Ok, ich bin schon einen Schritt weiter. Ich habe jetzt eine Anleitung gefunden, mit der schon mal ein wenig Licht ins Dunkle kommt. *klick*

Ich habe auf der Konsole der DS unter dem Benutzer "admin" einen SSH-Schlüssel angelegt. Auf dem Pi hab ich dann unter dem Benutzer "Pi" die Datei authorized_keys im Ordner /home/pi/.ssh erstellt und habe den Inhalt der auf der DS erstellten Datei id_rsa.pub hineinkopiert. Auch die /etc/ssh/sshd_config habe ich angepasst (bzw. braucht ich nichts dran zu ändern) und den Dienst neu gestartet. so weit so gut. Der Key scheind also schonmal auf dem Pi eingerichtet zu sein.

Was aber gebe ich jetzt im rsync an um diesen Schlüssel einzubinden? Ich stütze mich dabei auf diese Anleitung. Wenn ich also im Aufgabenplaner der DS folgendes eingebe...

Rich (BBCode):
/usr/syno/bin/rsync -avz --delete --exclude-from=/volume1/public/rsync-exclude.txt -e "ssh -p 22" pi@192.168.178.7:/ /volume1/public/rasplive/$(date +%Y%m%d)rasplive/ >> /volume1/public/rasplive/$(date +%Y%m%d)rasplive_backup.log 2>&1

(habe nur den Pfad angepasst und natürlich Benutzer und IP: hier pi@192.168.178.7)

Dann erhalte ich in der Datei "rasplive_backup.log folgende Fehlermeldung ausgeworfen...

Rich (BBCode):
Host key verification failed.
rsync error: unexplained error (code 255) at io.c(687) [Receiver=3.0.9]

Was fang ich jetzt damit an? Was hab ich falsch gemacht? Wo liegt mein Fehler?

Ich werd hier noch irre

Tommes
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.165
Punkte für Reaktionen
63
Punkte
68
zuerst muss man sich bei ssh von Hand verbinden und bestätigen, das es sich um den richtigen Host handelt. Dann wird die Signatur des Remote Host in der Datei .ssh/known_hosts eingetragen. Auch im rsync kann man beim ssh die Option -i nutzen, wenn man nicht den Standard-Key .ssh/id_rsa nutzen möchte. Wobei ich glaube, das der User pi auf dem Raspberry nicht alle Dateien dort lesen darf und der Taskplaner auf der Syno auch nicht mit dem User admin sonder als root arbeitet. Mache es doch anders herum und nutze den rsync vom Pi aus auf die DS. Und wenn Du das Backup-Verzeichnis der DS über NFS auf dem Pi mountest, brauchst Du nicht einmal ssh dazu. Das ganze in einen Cronjob als root auf dem Pi, fertig

Thomas
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Danke schon mal für deine Antwort. Ich möchte aber erstmal bei der Option ssh -> rsync bleiben. Einen mount über NFS hinzulegen... darüber hatte ich auch schon mal was gelesen, fand das mit ssh jedoch recht interssant.

zuerst muss man sich bei ssh von Hand verbinden und bestätigen, das es sich um den richtigen Host handelt. Dann wird die Signatur des Remote Host in der Datei .ssh/known_hosts eingetragen.
OK, ich hab nochmal neu angefangen und auf der DS unter dem Benutzer "root" nochmals einen Key erstellt. Dann den Public-Key auf den Pi gespielt (unter dem Benutzer "Pi") und mich schließlich von der DS aus auf der Konsole per ssh mit dem Pi verbunden. Die Verbindung ist auch zustande gekommen und es wurde von dir beschriebene Signatur in die known_hosts eingetragen. Also ssh funktioniert schon mal.

Das einzige was ich noch nicht ganz verstehe ist, wie ich mich auf dem Pi als "root" anmelden kann. root hat wohl ein Passwort, welches ich aber nicht kenne und mit dem Benutzer Pi kann ich z.B. nicht auf den Ordner /root zugreifen um dort einen Ordner /.ssh anzulegen, auch nicht mit vorangegangenen sudo !

Auch im rsync kann man beim ssh die Option -i nutzen, wenn man nicht den Standard-Key .ssh/id_rsa nutzen möchte. Wobei ich glaube, das der User pi auf dem Raspberry nicht alle Dateien dort lesen darf und der Taskplaner auf der Syno auch nicht mit dem User admin sonder als root arbeitet.
Auch hier habe ich die Option -i mal entfernt und im Aufgabenplaner dann von "admin" auf "root" zurückgeschaltet (man kann dort sehr wohl den Benutzer angeben, über den die Aufgabe laufen soll). So sieht jetzt meine Befehlszeile aus...
Rich (BBCode):
/usr/syno/bin/rsync -avz --delete --exclude-from=/volume1/public/rsync-exclude.txt -e pi@192.168.178.7:/ /volume1/public/rasplive/ >> /volume1/public/rasplive/rasplive_backup.log 2>&1

Im Protokoll "rasplive_backup.log wird jetzt auch etwas geschrieben, nämlich...

Rich (BBCode):
sending incremental file list

sent 110 bytes  received 12 bytes  244.00 bytes/sec
total size is 1272  speedup is 10.43
Für mich sieht das erstmal so aus, als ob die Verbindung per ssh aufgebaut wurde, jedoch werden irgendwie keine Daten übertragen. Die Frage ist jetzt also, warum? Ich hab den rsync auch mal ohne die Angabe von "--exclude-from=/volume1/public/rsync-exclude.txt" durchlaufen lassen, mit dem gleichen Effekt!

Hast du also noch einen Tipp, was ich falsch mache? Liegt es wirklich daran, das ich mich als Benutzer Pi anmelde und nicht als root? Wie melde ich mich mit root am Pi an?

Tommes
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Ich doofi! Ich konnte jetzt auf dem Pi unter dem Benutzer "root" den Ordner /.ssh anlegen und dorthinein auch die Datei authorized_keys mit Schlüssel aus der id_rsa.pub. Dann im Aufgabenplaner das Script von pi auf root abgeändert und... DAS GLEICHE IN GRÜN !

Ich bekomm die gleiche Meldung in der rasplive_backup.log angezeigt, wie bereits unter Benutzer Pi.

Das ist doch Käse!

Tommes
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.165
Punkte für Reaktionen
63
Punkte
68
Zuerst bitte sicherstellen, das auf dem Pi auch rsync installiert ist (which rsync), ansonsten erst nachinstallieren (aptitude update, aptitude install rsync).
dann auf der Syno als root zuerst denn ssh connect test zum Pi machen und dann rsync mal so aufrufen ("<rasbpi>" und "/<ziel>" ersetzen):
/usr/syno/bin/rsync -avz -e ssh root@<rasbpi>:/ /<ziel>
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Cool!

rsync war auf dem Pi schon drauf, soviel ist sicher. Nach Eingabe deines Befehls...
Code:
/usr/syno/bin/rsync -avz -e ssh root@<rasbpi>:/ /<ziel>
... im Aufgabenplaner ratterte die DS auf einmal los. Jetzt wird grad der komplette SD-Card Inhalt des Pi's auf die DS gesynct. Das ist zwar ein wenig über's Ziel hinausgeschossen, aber es funktioniert schonmal. Klasse. Danke dafür! Knnst du mir vielleicht noch einen Tipp geben, wie ich nur die Ordner...

/var/www (Webserver)
/var/lib/mysql/ (Datenbanken)
/media (persönliche Daten)

... in den rsync Befehl packen kann? Oder muß ich da im Aufgabenplaner für jeden Ordner eine eigene Aufgabe zu erstellen.

Aber erstmal Danke für deine Hilfe. Ich wußte doch, das man sich auf die Leute hier verlassen kann. SUPER. Vielen vielen Dank schon mal.

Tommes
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.817
Punkte für Reaktionen
1.113
Punkte
754
Am einfachsten sollte es sein, wenn Du Dir ein Skript baust, in dem Du die entsprechenden rsync-Aufrufe untereinander schreibst. Und dann dieses Skript im Aufgabenplaner aufrufen.
 

Tommi2day

Benutzer
Mitglied seit
24. Aug 2011
Beiträge
1.165
Punkte für Reaktionen
63
Punkte
68
Mache Dir ein Shellscript z.B. backup.sh o.ä. und trage dort die benötigten rsync-Aufrufe nacheinander ein. Das Shellscript startest Du dann vom Aufgabenplaner.
Einfacher ginge es, wenn Du rsync vom Pi aufrufst. Dann kannst Du eine liste mit der Option --files-from=<listfile> mitgeben. So geht das nicht, weil die Listen auf der Quelle sein müssen.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Dank dir, dil88 & Tommi2day!

Ich werd mal schauen, was ich so hingefrickelt bekomme. Ich kann grad nur nichts machen, weil die DS immer noch dabei ist, die SD-Card des Pi's zu sichern. Das dauert wohl noch ein 1/2 Stündchen *g*

Ich glaub auch, meinen Fehler gefunden zu haben. Ich habe beim Absetzten des Befehles vergessen das ssh mitzuführen, also...

/usr/syno/bin/rsync -avz -e ssh root@<rasbpi>:/ /<ziel>

... das ist irgendwann wohl mal der DEL-Taste zum Opfer gefallen. Ich werd das ursprüngliche Script wie o.a. auf jeden Fall nochmal probieren, mir dann aber wohl mein eigenes Script schreiben. Für heute hatte ich aber erstmal genug Erfolgserlebnisse. Morgen gehts dann daran, das ganze zu verfeinern- jetzt wo die Rahmenbedingungen stehen.

Tommes
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Ich wollt nochmal einen abschließenden Statusbericht liefern.

Ich habe mir jetzt eine rsync_backup.sh gebaut, in der ich 3 rsync-Anweisungen eingepflanzt habe (Beispielhaft)...

#!/bin/sh

/usr/syno/bin/rsync -avz -e ssh root@192.168.178.7:/media/ /volume1/public/Daten/ >> /volume1/public/Daten/Daten-Backup.log 2>&1

/usr/syno/bin/rsync -avz -e ssh root@192.168.178.7:/var/lib/mysql/ /volume1/public/Datenbank/ >> /volume1/public/Datenbank/Datenbank-Backup.log 2>&1

/usr/syno/bin/rsync -avz -e ssh root@192.168.178.7:/var/www/ /volume1/public/Webserver/ >> /volume1/public/Webserver/Webserver-Backup.log 2>&1

... und das ganze wird dann über den Aufgabenplaner abgefeuert. Die rsync-Aufgabe wird im jeweiligen Ordner in der Datei [ORDNERNAME]-Backup.log protokolliert. Hier ist natürlich noch Potential nach oben, indem man Versionen von Ordnern- angelegt nach Datum erstellt. Jedoch reicht mir ein einfaches Backup der Daten des Pi's.

Ok, dann nochmal Danke, das ihr mir hierbei geholfen habt. Die Sache läuft jetzt rund und ich bin richtig zufrieden mit dem Ergebnis.

Tommes
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
Coole Sache Tommes,

also du liest quasi vom Pi und speicherst auf der Syno.

Führst du das script von der Syno als root aus bzw. von einem User dessen ~/.ssh/ ein RSA key file enthält?
Ich frage nur deshalb weil du hier nicht explizit ein RSA Key angibst mit der Option -i ~/.ssh/id_rsa

Wie schaut es aus wenn man mehrere RSA key´s in dem .ssh Verzeichnis liegen hat, geht das ganze dann auch noch gut oder muss man spätestens dann ein bestimmtes key file explizit angeben?

Gruß
luddi
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Erstmal- für mich ist das auch alles Neuland und habe auch erst ein wenig herumexperimentieren müssen um zu einem brauchbaren Ergebnis zu kommen. Ob dieser Weg jetzt der richtige ist, weis ich nicht. Ich weis nur, das es bei mir so funktioniert. (Anwender mit gefährlichen Halbwissen, eben)

Ich hab den RSA-Key auf der DS als Benutzer "root" durch Eingabe von "ssh-keygen -t rsa" erstellt. Es wurde dann automatisch unter /root der Ordner /root/.ssh sowie die Dateien id_rsa und id_rsa.pub angelegt. Bei mir existierte bereits die Datei /root/.ssh/known_hosts, da ich mit der DS einen Netzwerksicherung zu einer weiteren DS durchführe. (Wobei ich mich grade Frage, ob ich mir damit die Dateien meiner Netzwerksicherung (id_rsa und id_rsa.pub) damit überschrieben habe *schluck*) muß ich heut Abend mal prüfen!

Auf dem Pi habe ich mir dann durch "sudo -s" erstmal root-Rechte verschafft und unter /root dann die Datei /root/.ssh/authorized_keys erstellt und den Inhalt der erstellten id_rsa.pub von der DS hineinkopiert. (Ob hier noch spezielle Dateirechte gesetzt werden sollten, weis ich nicht)

Dann hab ich von der Konsole der DS aus eine ssh-Verbindung zum Pi aufgebaut, woraufhin in der /root/.ssh/known_hosts der Verbindungseintrag zum Pi erstellt würde.

Nachdem das alles geklappt hat, habe ich über den Aufgabenplaner dann den rsync abgefeuert der über den Benuter "root" läuft. Mir werden so die mich interessierenden Ordner vom Pi auf der DS gesichert. Klappt wirklich erschreckend gut.

So die Kurzform.

Ich hatte im Vorfeld erst mit den Benutern "Admin" und "Pi" gearbeitet bin dann aber zu "root" übergegangen. Da ich meine anfänglichen Probleme nicht einordnen konnte, kann ich nicht genau sagen, ob es mit Admi und Pi nicht genau so gut funktioniert hätte. Müsste man mal ausprobieren. Mehrere RSA-Key's habe ich "noch" nicht. Ich bin erstmal froh, das es mit dem einen läuft :D Meine aber das man durch Angabe der Option -i ~/.ssh/id_rsa_irgendwas weitere Key's anlegen kann.

Ich hoffe, ich könnte deine Fragen gut beantworten.

Tommes
 
Zuletzt bearbeitet:

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
/root/.ssh/authorized_keys erstellt..... (Ob hier noch spezielle Dateirechte gesetzt werden sollten, weis ich nicht)
Ich habe irgendwo mal gelesen dass die Attribute für ~/.ssh 700 und für ~/.ssh/authorized_keys 744 und natürlich der entsprechende Owner des ~/ gesetzt werden sollen.

Ich hoffe, ich könnte deine Fragen gut beantworten.

Danke Tommes für die detaillierte Beschreibung deines Vorgehens. Es entspricht genau dem wie ich es mir vorgestellt hatte. Ich habe fast ein ähnliches Szenario wo ich von DS auf DS Verzeichnisse synchronisiere und zwar auch mittels rsync und RSA Key.

luddi
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
29.817
Punkte für Reaktionen
1.113
Punkte
754
~/.ssh/authorized_keys 744

Da das eine nichtausführbare Datei ist, macht 644 mehr Sinn, aber 744 geht natürlich auch. Bei mir ist sie auf einem Linux-Server allerdings mit 600 angelegt, die known_hosts mit 644.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Von 600 bzw. 644 hab ich auch mal irgendwo was gelesen. Ich werd die Rechte auf jeden Fall noch anpassen.

Tommes
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.242
Punkte für Reaktionen
586
Punkte
174
Danke dil88, dass du aufgepasst hast. Ich wollte natürlich 644 schreiben hatte mich aber vertippt. :eek: Executable ist natürlich unnötig!

luddi
 

wolfn

Benutzer
Mitglied seit
03. Dez 2012
Beiträge
76
Punkte für Reaktionen
5
Punkte
8
Hallo Tommes,
bin hier beim Stöbern zufällig reingestolpert und will nur schnell einen Tip loswerden:

Wenn Du SSH mit Keys (zum login) benutzt, mußt Du dafür sorgen, daß auf dem Zielrechner die Benutzerrechte, insbesondere die von .ssh auf 600 bzw. 700 stehen, sonst bockt der ssh-client bzw. server. Ist eine Sicherheitsmaßnahme der neueren Versionen.
Eine recht gute Übersicht (die auch für den Pi einigermaßen passt) habe ich hier gefunden: http://wiki.ubuntuusers.de/SSH.

Außerdem solltest Du darüber nachdenken, den root nicht direkt von außen zugänglich zu machen.
Wenn Du Raspbian benutzt kannst Du in der Standard-Konfiguration als User Pi einfach eingeben 'sudo su' und bist root.
Habe ich aber alles aus Sicherheitsgründen abgeschaltet!

wolfn
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.139
Punkte für Reaktionen
1.112
Punkte
314
Hi wolfn

Das mit den Rechten hab ich wohl noch auf dem Schirm, hatte bis jetzt aber noch keine Zeit das zu ändern. Das Passwort des Benutzers "root" auf dem Pi habe ich bis jetzt noch nicht rausgefunden von daher arbeite ich eh die ganze Zeit mit sudo bzw. sudo su unter dem Benutzer Pi.

Den SSH-Login zwischen DS und Pi baue ich nur im lokalen Netzwerk auf, wobei meine DS erst garnicht ins Internet freigeschaltet und der Pi nur über Port 80/443 zu erreichen ist. SSH läuft auch nur deshalb, damit ich per rsync Backups vom Pi auf der DS ablegen kann.

Danke für deine Tipps, Hinweise und dem Link.

Tommes
 

wolfn

Benutzer
Mitglied seit
03. Dez 2012
Beiträge
76
Punkte für Reaktionen
5
Punkte
8
Hallo Tommes,
kurze Anmerkung noch: soweit ich mich erinnere, hat der root auf dem pi garkein passwort, d.h. ist (direkt) blockiert. deswegen su.
Kannst aber ein password setzten (als root), dann gehts direkt.

Etvl. ist für Dein rsync interessant: man kann ssh mit genau einem Kommando (z.B. für root) abfeuern. Habe ich aber noch nicht gemacht.
Wenn Du Dich in dem Ubuntu-Wiki umschaust, findest Du noch jede Menge Tips, auch zum root/su.
Das meiste passt auch für den pi. Dort (raspberrypi) gibts übrigens auch ein umfangreiches wiki, hab ich aber gerade nicht griffbereit.
wolfn
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat