PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu rsync



pingufreak
20.04.05, 13:56
Hallo zusammen,

ich möchte mit rsync ein verzeichnis von meinem Server auf ein remote-Verzeichnis synchronisieren...

Dazu habe ich auf meinem Server einen User mit den benötigten Rechten und einen Public-Key (vom Remote-Host) in meine authorized_keys kopiert.

Meine authorized_keys sieht ungefair ;) so aus:


from="remote-server.de", no-port-forwarding,no-X11-forwarding, \
no-agent-forwarding,no-pty, \
command="rsync --server --sender -vlogDtprz --delete-excluded \
--numeric-ids . /srv/cvs || echo \"repository nicht synchronisiert...\" | \
mail -s cvs ich@mein-host.de" ssh-rsa ...schlüssel... \
user@remote-server.de

Jetzt muss derjenige auf dem Remote-Server nur folgendes aufrufen um mein Verzeichnis auf den Remote-Server zu synchronisieren:


rsync -avz --numeric-ids -e ssh --delete --delete-excluded meinserver.de:/ .

Jetzt meine Frage...

Der auf der Remote-Seite kann doch jetzt keine Dateien aus meinem Verszeichnis löschen, da --sender gesetzt oder? Oder ändern, hinzufügen und sonstiges?

Ich habe bis jetzt keine Möglichkeit gefunden...

Viele Grüße
pingufreak

pibi
20.04.05, 14:20
ich möchte mit rsync ein verzeichnis von meinem Server auf ein remote-Verzeichnis synchronisieren...Das ist eigentlich das einzigste, was ich an Deiner Mail verstanden habe;-) So sieht zB. mein authorized keys sieht ganz anders aus. Und was willst Du loeschen auf der Remote Maschine?

Anyway: Wo von nach wo willst Du kopieren? Sprich: Wer soll die Synchronisation initiieren? Die Source- oder die Destination-Maschine?

Auf der Destination-Maschine muss ein User "X" existieren, dieser muss Schreibrechte auf das Destination-Directory haben (Definition in /etc/rsyncd.conf). Wo das entsprechende Passwort fuer den Connect hinterlegt ist, steht auch in diesem Conf-File. Bei mir ist das zB. in /etc/rsyncd.secrets. Irgendwelche Keys brauchst Du dafuer nicht.

Und ja: Auf der Destination-Maschine muss natuerlich der rsync-Daemon gestartet sein bzw. der Start via (x)inetd konfiguriert sein.

Gruss Pit.

pingufreak
20.04.05, 14:28
Hallo :)

Also ich will ein Verzeichnis von meinem Server auf einen Remote-Server synchronisieren... Der Remote-Server führt den oben genannten rsync-Befehl aus. Daraufhin wird der Befehl der in meiner authorized_keys steht, ausgeführt.

Jetzt möchte ich wissen, ob der Remote-Server nur meine Daten lesen kann, oder ob er auch Daten ändern/löschen/hinzufügen kann.

Die Remote-Maschine initiiert ja den rsync und verbindet sich (nachdem der rsync-Server auf meinem Server temporär durch die authorized_keys ausgeführt wurde) mit meinem Server und liest die Daten...

Gruß
pingufreak

Wordooo
20.04.05, 14:34
Und ja: Auf der Destination-Maschine muss natuerlich der rsync-Daemon gestartet sein bzw. der Start via (x)inetd konfiguriert sein.


noe ... deswegen gibts ja "-e ssh" und authorized_keys. die software muss nur installiert sein. bei mir hab ich auch nix konfiguriert und klappt :)

Wordooo
20.04.05, 14:36
Hallo :)

Also ich will meinen Server auf die Remote-Maschine synchronisieren... Ich will jedoch nicht, dass die Remote-Maschine irgendwas mit meinem Server machen kann (auf meinem Server Dateien löschen, ändern, hinzufügen usw...).

Gruß
pingufreak


du tust ja auch nicht deren key in deine authorized_keys rein, dann kommen sie ohne PW auch nich auf deine kiste ..
theoretisch kannste du auch mit iptables blocken.

pingufreak
20.04.05, 14:40
du tust ja auch nicht deren key in deine authorized_keys rein, dann kommen sie ohne PW auch nich auf deine kiste ..
theoretisch kannste du auch mit iptables blocken.

Dafür gibts doch "command=befehl... ssh-rsa ... KEY..." für die authorized_keys, damit er wirklich nur den Befehl ausführen kann... Oder nicht?

p.s. jo... rsyncd braucht man nicht :)

Wordooo
20.04.05, 14:42
oehm .. da bin ich ueberfragt :) also ich hab mit ssh-keygen auf maschine a nen key erstellt und den in die authorized_keys von maschine b gelegt. jetz kann ich ueber ssh von a nach b syncen ohne daemon etc.
bin mit den details von rsync da nicht so vertraut, aber so isses easy going :)

pibi
20.04.05, 15:05
Dafür gibts doch "command=befehl... ssh-rsa ... KEY..." für die authorized_keys, damit er wirklich nur den Befehl ausführen kann... Oder nicht???? Wieso Befehle aufrufen? rsync connected doch.
p.s. jo... rsyncd braucht man nicht :)???
Jetzt muss derjenige auf dem Remote-Server nur folgendes aufrufen um mein Verzeichnis auf den Remote-Server zu synchronisieren:Langsam wird mir klar, wo Dein Denkfehler liegt. rsync ist ein Programm, welches ohne weiteres Zutun mit einem anderen rsync irgendwelche Daten nach bestimmten Kriterien abgleicht. Bevorzugt laesst man das automatisch in der Nacht via cron ablaufen. Und ja, das hatte ich ueberlesen: Du kannst auch die Verbindung ueber ssh verschluesseln. Das bedeutet aber nicht, dass die Remote-Maschine einen ssh-Zugang zu Dir bekommt. Und ssh ist sowieso nur sinnvoll, wenn die Daten irgendwo uebers IN geroutet werden. Falls alles in Deinem privaten Heim&Hobby-Netz bleibt, kannst Du darauf verzichten.

Nochmal: Den lokaler rsync connected mit einem remote rsync. Welche Shares dieser anbietet, kannst Du ganz einfach mit rsync "servername.domain.de::" erkennen. Irgendwelche User-Aktionen oder Scripts braucht es auf der Remote-Seite nicht. Oder habe ich Dich immer noch nicht verstanden?

Gruss Pit.

pingufreak
20.04.05, 15:54
??? Wieso Befehle aufrufen? rsync connected doch.???Langsam wird mir klar, wo Dein Denkfehler liegt. rsync ist ein Programm, welches ohne weiteres Zutun mit einem anderen rsync irgendwelche Daten nach bestimmten Kriterien abgleicht. Bevorzugt laesst man das automatisch in der Nacht via cron ablaufen. Und ja, das hatte ich ueberlesen: Du kannst auch die Verbindung ueber ssh verschluesseln. Das bedeutet aber nicht, dass die Remote-Maschine einen ssh-Zugang zu Dir bekommt. Und ssh ist sowieso nur sinnvoll, wenn die Daten irgendwo uebers IN geroutet werden. Falls alles in Deinem privaten Heim&Hobby-Netz bleibt, kannst Du darauf verzichten.

Nochmal: Den lokaler rsync connected mit einem remote rsync. Welche Shares dieser anbietet, kannst Du ganz einfach mit rsync "servername.domain.de::" erkennen. Irgendwelche User-Aktionen oder Scripts braucht es auf der Remote-Seite nicht. Oder habe ich Dich immer noch nicht verstanden?

Gruss Pit.

Der rsync der Gegenseite verbindet sich zuerst mittels ssh mit meinem ssh-Daemon. SSH erkennt dann die "command="-Option im Public-Key und führt den angegebenen Befehl aus. (in diesem Fall rsync --server --sender ...).

Ich brauche also keinen rsync-Daemon der ständig auf einem Socket lauscht...

Die Daten sind vertraulich und gehen durch einen VPN-Tunnel. Damit die Daten nochmals durch interne Angriffe gesichert sind, benutze ich zusätzlich SSH...

Kennst du denn die Variante ohne den rsync-Daemon? Vielleicht verstehen wir uns da falsch.

Klingt vielleicht komisch:
Aber ich weiß nicht wo wir uns falsch verstehen. Was willst du denn jetzt genau wissen?

Viele Grüße
pingufreak

pibi
22.04.05, 14:14
Ich brauche also keinen rsync-Daemon der ständig auf einem Socket lauscht...Dann brauchst Du auch keinen rsync:-))
Aber ich weiß nicht wo wir uns falsch verstehen. Was willst du denn jetzt genau wissen?Du wolltest etwas wissen;-)

Und notabene: "Mein" rsync v2.6.2 kennt weder die Option "--server" noch die Option "--sender". Vielleicht reden wir gar nicht vom gleichen Programm? Anyway, lassen wir dieses Thema.

Gruss Pit.

pingufreak
27.05.05, 09:12
Hi nochmal,

sicher kennt rsync die option --server und --sender... Guck mal in der Manpage von rsyncd.

Ich habe auch vom Linux-Magazin einen Artikel, wo die selbe rsync-Konfiguration beschrieben ist. (u.a. auch die beiden Optionen ;) ): Link (http://http://www.linux-magazin.de/Artikel/ausgabe/2004/09/backups/backups.html)

Mittlerweile läuft das ganz gut :):
- SSH-Connect
- rsync --server ...
- synchronisieren
- Server-Prozess weg :)...

Gruss
pingufreak

p.s.: sorry das ich jetzt erst geantwortet habe...

little_holly
28.06.05, 16:25
Hey Pingu....
Da Du das ähnliche vesucht/gemacht zu haben scheisnt wie ich kannst Du oder irgendjemand mir eventuell weiterhelfen...
Ich habe auch einen Server A und B die sich gegenseitig sichern...
Ebenfalls via rsync....
Das es für mich eine unbehagliche Vorstellung ist, dass nach dem keygen.. sich der eien rot einfach via ssh ohne passworteingabe auf den anderen Server einloggen kann.. will ich es auch auf den Befehl oder auf die Benutzerrechte einschränken...
1.) wie find ich raus, was ich genau in die erste Zeile des public keys schreiben müsste... ich habs wie im linux-magazin beschrieben versucht...(über den grep-befehl) um den genauen befehlslaut zu bekommen, oder kann ich es wirklich eins zu eins soo übernehmen wie ich es nachher in die shell eingebe?
2.) habe ich die Möglichkeit den automatischen ssh zugriff soweit einzuschränken, dass nur ein bestimmtes verzeichnis auf dem entfernten backup server ( das wohin gespiegelt werden soll) geschrieben werden kann?

pitu
28.06.05, 17:42
Ich brauche also keinen rsync-Daemon der ständig auf einem Socket lauscht...


Also ich weiss wo ihr euch nicht versteht ...
Keiner versteht, warum du einen rsync-server aufsetzen willst, wenn du verbindest. das brauchst du gar nicht.



There are eight different ways of using rsync. They are:


o for copying local files. This is invoked when nei*
ther source nor destination path contains a : sepa*
rator


o for copying from the local machine to a remote
machine using a remote shell program as the trans*
port (such as ssh or rsh). This is invoked when the
destination path contains a single : separator.


o for copying from a remote machine to the local
machine using a remote shell program. This is
invoked when the source contains a : separator.


o for copying from a remote rsync server to the local
machine. This is invoked when the source path con*
tains a :: separator or an rsync:// URL.


o for copying from the local machine to a remote
rsync server. This is invoked when the destination
path contains a :: separator or an rsync:// URL.


o for copying from a remote machine using a remote
shell program as the transport, using rsync server
on the remote machine. This is invoked when the
source path contains a :: separator and the
--rsh=COMMAND (aka "-e COMMAND") option is also
provided.


o for copying from the local machine to a remote
machine using a remote shell program as the trans*
port, using rsync server on the remote machine.
This is invoked when the destination path contains
a :: separator and the --rsh=COMMAND option is also
provided.


o for listing files on a remote machine. This is done
the same way as rsync transfers except that you
leave off the local destination.


Für deinen einfachen sync brauchst du definitiv nix in der authorized_keys, ausser dem key.

aber zu deinem keyfile:



The options (if present) consist of comma-separated option specifica*
tions. No spaces are permitted, except within double quotes. The fol*
lowing option specifications are supported (note that option keywords are
case-insensitive):


also du hast da ein paar leerzeichen drin, in deinem optionsfield ...


So, nun zu dem, was du willst.
Wenn ich dich richtig verstanden habe, moechtest du ein Verzeichniss recursive zu dir runterladen, so dass du eine exacte kopie von dem hast, was auf dem server drauf ist, ohne dass dort auf dem server etwas geloescht wird.

oder willst du es genau umgekehrt, dass du etwas hochsendest, aber bei dir nix geloescht wird?

beschreib einfach mal ganz genau, was du da eigentlich machen willst und versuch nicht das zu erklaeren mit den Dingen die du schon unternommen hast, denn irgendwie kommt dein eigentliches ziel nicht so ganz durch.

pitu
28.06.05, 17:48
Hey Pingu....

1.) wie find ich raus, was ich genau in die erste Zeile des public keys schreiben müsste... ich habs wie im linux-magazin beschrieben versucht...(über den grep-befehl) um den genauen befehlslaut zu bekommen, oder kann ich es wirklich eins zu eins soo übernehmen wie ich es nachher in die shell eingebe?
2.) habe ich die Möglichkeit den automatischen ssh zugriff soweit einzuschränken, dass nur ein bestimmtes verzeichnis auf dem entfernten backup server ( das wohin gespiegelt werden soll) geschrieben werden kann?

zu 1)
man sshd, zu authorized_keys blaettern, da steht alles beschrieben.
zu 2)
mit der command option kannst du natuerlich genau festlegen, was du so zulaesst, damit ist eine einschränkung auf die verzeichnisse natuerlich gegeben.

zu euch beiden.
habt ihr euch schon mal subversion ueberlegt? wunderbar zu bedienen und ihr muesst nicht mal einen user anlegen, der irgendwelche shells hat die ihr einschränken wollt.
hat auch den vorteil, dass ihr euch ums "loeschen" keine gedanken mehr machen muesst, repository vergisst nix

little_holly
29.06.05, 09:20
@pitu
Du hast Recht, ich glaueb deutlcher wird wenn ich beschreibe, was ich mache und will..

Der Server A macht täglich ein backup seines htdocss verzeichnisses, einmal auf ein backupverzeichnis auf sich selbst und dann via rsync-UPLOAD auf einen Server B.

Sieht in etwa so aus.

rsync -r -p -e ssh /tolleseiten/meine_seite ipa.dre.sse.B:/backup_vom_serv_A

hab dann mal diese sache mit den keys angelegt etc.. das klappt dannauch alles toll...
ABER wenn ich das so mache, dann ein auf A eingeloggter root sich per ssh ohne pw auf Server B einloggen, A soll aber wirklich nur den sync-upload machen...(dürfen). also wenn er direkt ssh root@servB eingibt soll ganz normal ein passwort Abfrage kommen...

Hoffe das hat mein Problem ein wenig verdeutlichen können, bzw. meine Absichten.

pitu
29.06.05, 11:16
Punkt 1)

gerade fuer einen solchen Fall nehme ich subversion. Dadurch habe ich alle aenderungen in meinem htdocs mit dabei und kann auch mal "zurueckschalten" subversion unterstützt auch diffs von binaries (also deltas)

Mein htdocs ist damit eine "workingcopy" genauso wie ales wo ich arbeite.

Das erste "backup" vom DOCROOT ist damit, dass alle workingcopies wo sie auch sind natuerlich das sind, was auch im htdocs ist.

als zweites kannst du dann auch noch subversion komplett sichern. entweder ohne connection einfach die verzeichnisse kopieren, oder einen dump der DB machen.

Punkt 2)
Wenn du an einen rsync-server connecten willst, benutzt Du als Seperator nicht ":" sondern "::"

schau dir in der man-page mal die Kapitel:
CONNECTING TO AN RSYNC SERVER
und
CONNECTING TO AN RSYNC SERVER OVER A REMOTE SHELL PROGRAM
an.

little_holly
29.06.05, 13:21
hab dann mal diese sache mit den keys angelegt etc.. das klappt dannauch alles toll...
ABER wenn ich das so mache, dann ein auf A eingeloggter root sich per ssh ohne pw auf Server B einloggen, A soll aber wirklich nur den sync-upload machen...(dürfen). also wenn er direkt ssh root@servB eingibt soll ganz normal ein passwort Abfrage kommen...
Da war ein Fehler drin es muss natürlich heißen..
Der rsync klappt auch toll ( auch mit nur einem Doppelpunkt) was mein Problem ist.. das sich jetzt der root von Server A auf Server B per ssh ohne passwort einloggen kann.. .
(Umgekehrt sichert übrigends auch Server B sein htdocs auf Server A)

Dein Vorschlag bezüglich der Versionsverwaltung scheint noch etwas komplexer zu sein.. Wenn ich erst mal diese komische ssh Sicherheitslücke irgendwie geschlossen habe werde ich auch was das angeht nochmal googlen. :)

marce
29.06.05, 13:39
mal 'ne doofe Frage: wieso denn root? rsync sollte auch mit einem beliebigen Benutzer mit eigenschränkten Rechten laufen...

little_holly
29.06.05, 13:54
hmm achsoo... ich hab diese ganze key-gen geschichte nach einem howto gemacht.. und dort liegt das dann alles im root verzeichnis und gilt somit glaube ich auch für den root..
- muss ich dann denn auf Server A einen neuen Benutzer
anlegen... ( der dann nur das rsync machen darf...) ?
- Muss der dann auch auf Server B vorhanden sein... ?
- Hat jeder Benutzer seine eigenen private keys?
- wie muessen dann die rechte auf dem Server B-Backup
verzeichnis gesetzt sein ( also das wohin das Server
A-Verzeichnis kopiert werden soll).

Danke in jedem Fall für den Tipp..

Dabei war ich so froh, dass alles so toll geklappt hat.. bis dann diese sache kam, das es blöd sei/ist, wenn sich ein root von A ohne PW auf B einloggen kann...

pitu
29.06.05, 13:56
Da war ein Fehler drin es muss natürlich heißen..
Der rsync klappt auch toll ( auch mit nur einem Doppelpunkt) was mein Problem ist.. das sich jetzt der root von Server A auf Server B per ssh ohne passwort einloggen kann.. .
(Umgekehrt sichert übrigends auch Server B sein htdocs auf Server A)

Dein Vorschlag bezüglich der Versionsverwaltung scheint noch etwas komplexer zu sein.. Wenn ich erst mal diese komische ssh Sicherheitslücke irgendwie geschlossen habe werde ich auch was das angeht nochmal googlen. :)

Wenn du nur einen doppelpunkt verwendest, dann geht er nicht an einen rsync-server also nur eine normale verbindung.

geh doch mal langsam vor.

mach eine wirklich kleine optionszeile, gerade mal mit einen from und einem command ala "echo;exit" oder so und versuch dich einzuloggen.

kannst du dich einloggen, hast du da irgendwo einen fehler drin.
kommt der echo, dann hast du es ...
und dann baust du es langsam aus ...


das mit dem subversion ist nicht wirklich schwierig ... ich glaub ich schreibn mal ein kleines howto oder nen tipp

marce
29.06.05, 13:59
mach doch einfach einen Benutzer (z.B. Backup) auf beiden Rechnern und dann kopiert das Ding einfach vom home ins home. Die Rechte drumrum kann man dann entsprechend einschränken, oder chrooten - und man kann ja davor z.B. auch das htdocs in das home kopieren, dann kann das für den user Backup auf rw------- gesetzt werden oder so... -> einfach einen Plan machen ;-)

little_holly
29.06.05, 14:24
Danke euch beiden....
Hmm das mit dem geplanten HowTo oder Tipp klingt gut..
ich werde mich sicherlich nochmal melden, wenn ich bezüglich meines rsyncs und ssh-Problems Fortschritte gemacht habe.. Es wird sicherlich dann auch nicht die perfekte aber in jedem Fall eine bessere als jetzt sein...

Ich werd jetzt erst nochmal schauen, was es genau mit dem doppel und dem doppelten doppelpunkt auf sich hat..

Danke und bis bald..

little_holly
29.06.05, 15:28
Falls diese info noch hilfreich ist:



. . . .
. . .


There are eight different ways of using rsync. They are:

1 for copying local files. This is invoked when nei*
ther source nor destination path contains a : sepa*
rator

2 for copying from the local machine to a remote
machine using a remote shell program as the trans*
port (such as ssh or rsh). This is invoked when the
destination path contains a single : separator.


3 for copying from a remote machine to the local
machine using a remote shell program. This is
invoked when the source contains a : separator.


4 for copying from a remote rsync server to the local
machine. This is invoked when the source path con*
tains a :: separator or an rsync:// URL.


5 for copying from the local machine to a remote
rsync server. This is invoked when the destination
path contains a :: separator or an rsync:// URL.


6 for copying from a remote machine using a remote
shell program as the transport, using rsync server
on the remote machine. This is invoked when the
source path contains a :: separator and the
--rsh=COMMAND (aka "-e COMMAND") option is also
provided.


7 for copying from the local machine to a remote
machine using a remote shell program as the trans*
port, using rsync server on the remote machine.
This is invoked when the destination path contains
a :: separator and the --rsh=COMMAND option is also
provided.


8 for listing files on a remote machine. This is done
the same way as rsync transfers except that you
leave off the local destination.

. . . .
. . .


Bei mir trifft von diesen Dingen der 2te Fall zu... Darum auch der einfache Doppelpunkt...

Gruß Holly =)

pingufreak
04.07.05, 14:12
@pitu:

naja meine pubkeys funktionieren aber wunderbar und wenn ich den rsync starte, werden auch alle Optionen ordnungsgemäß in der Prozessliste angezeigt. Wenn eine Option falsch wäre, würde das garnicht funktionieren...

subversion ist ein Versionsmanagementsystem und eigentlich nicht für eine reine "Datensynchronisation" gedacht. Von der Performance her wird subversion mit Sicherheit nicht so schnell sein wie rsync... Ich musste mir eben ganz scharf überlegen ob dein Vorschlag ironisch gemeint war? :o

edit: Achsooo... Du hattest das nur auf die htdocs bezogen? Dann wäre Subversion oder cvs doch ok. Dann müssten Bilder usw. aber als Binär eingecheckt werden! Sonst sieht das nicht schön im diff aus.

Viele Grüße,
pingufreak

pitu
04.07.05, 14:17
deine pubkeys funktionieren, aber dein command nicht.
Warum wehren sich die leute eigentlich immer so, wenn man ihnen mal vorschlägt, es mit ganz kleinen lösungen zu versuchen und diese dann auszubauen...

subversion: nix ironie, ich mach dass die ganze zeit so und bastel fuer webseiten auch gerade ein frontend zusammen, falls man auf den server keinen ssh-zugang hat. die synchronisation ist schnell, da nur diffs/deltas uebertragen werden...

marce
04.07.05, 14:19
Warum wehren sich die leute eigentlich immer so, wenn man ihnen mal vorschlägt, es mit ganz kleinen lösungen zu versuchen und diese dann auszubauen...weil es !c00l und nicht l33t ist?