Probleme mit rsync

wg`c-benny

New Member
Hallo,

ich habe einen vServer mit SuSE Linux 9.3 laufen.

Nun habe ich rsync installiert.

Wenn ich ein Verzeichnis mit einem Verzeichnis auf einem anderen Server mit:

rsync -avz -e ssh /VERZEICHNIS1 root@IP:/VERZEICHNIS2

synchronisieren will, dann klappt das einwandfrei. Nach dem Ausführen des Befehls kommt die Passwortabfrage..


Nun will ich dies jedoch unter einem Cronjob laufen lassen. Hier kann ich natürlich nicht das Passwort von Hand eintippen.

Deshalb speichere ich das Root-Passwort für den Zielserver in eine Datei mit:

echo "PASSWORT" > /root/pw

Nun füge ich noch wie ich es nachgelesen habe folgendes dem rsync-Befehl hinzu:

--password-file=/root/pw


Ich habe das jetzt jedoch so schon oft hin und her probiert, bekomme es jedoch nicht zum laufen.

Wenn ich das Script manuell mit diesem Zusatz anstoße kommt immer noch die Passwortabfrage!

Wäre schön, wenn mir jemand ein Tipp hätte, woran das liegen könnte, ich bin echt ratlos. Ich bin mir jedoch sicher, dass es irgendwie gehen muss.

Danke schonmal,
Benny
 
Last edited by a moderator:
Damit komm ich nicht so recht klar, entschuldige bitte. Das ist mir alles zu hoch.

Also auf einem anderen Server von mir, welcher unter Debian 3.1 läuft funktioniert es auch nicht. Auch dort werde ich nach dem Passwort gefragt.

Es muss doch sicher irgendwie mit rsync möglich sein, sonst wäre dieses Tool für ein Backupsystem doch föllig nutzlos..

Muss ich vielleicht noch in irgend einer Config von rsync etwas spezielles konfigurieren?

Trotzdem Danke für deine Hilfe,
Benny
 
Also auf einem anderen Server von mir, welcher unter Debian 3.1 läuft funktioniert es auch nicht. Auch dort werde ich nach dem Passwort gefragt.

Es muss doch sicher irgendwie mit rsync möglich sein, sonst wäre dieses Tool für ein Backupsystem doch föllig nutzlos..

Du könntest natürlich auf dem Backup-Server den rsync-Dienst direkt laufen lassen und Dir den Umweg über SSH sparen. Das ist aber nicht ideal, da die Daten unverschlüsselt übertragen werden.

Deshalb nutzt rsync ssh zur Datenübertragung. Und das will nun mal ein Passwort. Ausser man hat eben einen Key hinterlegt.

Im Prinzip ist es ganz einfach, nehmen wir an, Du willst mit dem root-Account sichern:

1. auf dem Server, den Du sichern willst, ein Schlüsselpaar erstellen:
"ssh-keygen -t dsa" (als root, dabei bei der Passwortabfrage einfach Enter drücken)
2. den Public-Key auf den Backup-Server übertragen, zB. mit "scp /root/.ssh/id_dsa.pub backupserver:/tmp"
3. Pubkey-Authentifizierung auf dem Backupserver aktivieren, falls noch nicht geschehen: Dazu die Datei /etc/ssh/sshd_config mit einem Texteditor öffnen und die Zeile "PubkeyAuthentication yes" eintragen bzw. das Kommentarzeichen davor entfernen. Damit der SSH am richtigen Ort nach den gültigen Pubkeys sucht, noch die Zeile "AuthorizedKeysFile .ssh/authorized_keys" eintragen.SSH danach neu starten. Danach das Verzeichnis "/root/.ssh" erstellen, falls es noch nicht existiert: "mkdir /root/.ssh". Jetzt kann man den kopierten Pubkey ins authorized_key-file kopieren: "cat /tmp/id_dsa.pub >> /root/.shh/authorized_keys".
4. Jetzt solltest Du Dich vom Server aus ohne Passwort als Root auf dem Backupserver über SSH anmelden können. Wenn das funktioniert, sollte rsync auch funktionieren, da es ja wie gesagt SSH zur Datenübertragung nutzt.
 
--password-file=/root/pw
Auszug aus "man rsync":
Note that this option is only useful when accessing an rsync server using the built in transport, not when using a remote shell as the transport.
Soviel zur Erklärung, warum es nicht geht.

Du würdest deutlich schneller ans Ziel kommen, wenn Du das Public-Key-Verfahren verwenden würdest.

huschi.
 
Ich habe mich nach langem hin und her doch dazu entschlossen, rsync wie von euch hier beschrieben laufen zu lassen.

Jedoch habe ich dabei noch ein kleines Problem. Er erkennt zwar die Schlüssel, frägt jedoch immer nach dem Passphrase, obwohl ich keinen angegeben habe.

Für Tips bin ich dankbar,
Benny
 
Er erkennt zwar die Schlüssel
Woran erkennst Du das?

frägt jedoch immer nach dem Passphrase, obwohl ich keinen angegeben habe.
Und mit welchem Passwort funktioniert es dann?

Eigendlich brauchst Du nicht zu antworten, denn die Hauptfragen sind eigendlich:
Wie sieht Dein Commando konkret aus?
Was steht in den Logfiles?

huschi.
 
4. Jetzt solltest Du Dich vom Server aus ohne Passwort als Root auf dem Backupserver über SSH anmelden können. Wenn das funktioniert, sollte rsync auch funktionieren, da es ja wie gesagt SSH zur Datenübertragung nutzt.
Bei diesem Satz sollten sich jedem, der die Bezeichnung Administrator halbwegs verdient, die Fußnägel hochrollen.
Login per SSH-Key ohne Passphrase sollte nur für unprivilegierte User möglich sein.
Permissions/Ownership sichert man am besten extra, wenn man es unbedingt braucht.
 
Full ACK, elias!

Erstelle Dir einen Backup-User, der nur für das Transferieren der Files genutzt wird. Der root-cronjob macht das Backup, packt die tar Dateien in das Home-Verzeichnis des Backup-Users und der kopiert dann die entsprechenden Dateien.

Den könnte man dann noch hervorragend jailen und andere Dinge machen, die einen einigermaßen ruhig schlafen lassen.
 
Also mein Befehl sieht wie folgt aus:

Code:
rsync -avz -e "ssh -i /root/.ssh/id_rsa.pub" --delete --update $SPEICHER_HOME/ $REMOTE_USER@$REMOTE_HOST:$SPEICHER_REMOTE

wenn ich das Script ausführe kommt folgendes:

Code:
Enter passphrase for key '/root/.ssh/id_rsa.pub':
Password:
 
Natürlich geht es nicht. Weil dein Befehl so lautet:
Code:
rsync -avz -e "ssh -i /root/.ssh/id_rsa.pub" --delete --update $SPEICHER_HOME/ $REMOTE_USER@$REMOTE_HOST:$SPEICHER_REMOTE
Der public Key (.pub) gehört in die authorized_keys auf dem Zielsystem.
Und zum Authen brauchts natürlich den private Key. (Asymmetrisches Kryptosystem - Wikipedia)

Ergo muss dein Befehl so aussehen:
Code:
rsync -avz -e "ssh -i /root/.ssh/id_rsa" ...
 
Last edited by a moderator:
Login per SSH-Key ohne Passphrase sollte nur für unprivilegierte User möglich sein.

ACK, falls man mit dem Key eine Rootshell erhält. Für das Backup braucht man aber nur einen rsync-Befehl, den man im authorized_keys eintragen kann.

Das Problem ist halt, dass man a.) auf dem zu sichernden Server Rootrechte braucht (um alle Dateien lesen zu können) und b.) auf dem Backup-Server Rootrechte braucht (um die Permissions und Owner zu sichern).

Zuerst alle Dateien zu tar-en kommt für mich nicht in Frage, da ich rdiff-backup verwende, welches auf die einzelnen Dateien zugreifen können muss, um sinnvoll zu funktionieren.

Ich schlafe ruhig, auch wenn der Pubkey meines Rootservers im authorized_keys vom Root des Backupservers eingetragen ist. Der Zugriff ist limitiert auf die IP des Rootservers. Im schlimmsten Fall könnte jemand, der meinen Server übernommen hat, rdiff-backup auf dem Backupserver ausführen.

Das ist natürlich Ansichtssache, andere mögen alternative Lösungen bevorzugen.
 
ACK, falls man mit dem Key eine Rootshell erhält.
Deine Anleitung im Posting Nr. 4 führt genau dazu.

Für das Backup braucht man aber nur einen rsync-Befehl, den man im authorized_keys eintragen kann.
Dann solltest du diese Möglichkeit nicht unterschlagen und jetzt benutzen um es als Munition auf Kritiker abzufeuern.
Bitte beschreibe auch, wie das geht. Dann kann bestimmt nicht nur ich noch was dazulernen...
 
Deine Anleitung im Posting Nr. 4 führt genau dazu.

Ja, das war ein Fehler. Ich hätte besser einen Link zu einem vollständigen Tutorial gepostet anstatt kurz selbst ein Unvollständiges getippt.

Dann solltest du diese Möglichkeit nicht unterschlagen und jetzt benutzen um es als Munition auf Kritiker abzufeuern.
Bitte beschreibe auch, wie das geht. Dann kann bestimmt nicht nur ich noch was dazulernen...

Grundsätzlich gibt es 2 Möglichkeiten:

- Entweder man legt das verfügbare Kommando für einen Key in der authorized_keys fest. Dazu verwendet man folgende Zeile:

Code:
command="<erlaubter Befehl>" ssh-dss AABAB.....restlicher...Key

- Oder man gibt dem User eine Shell, die nur bestimmte Kommandos erlaubt und evtl. gleich noch ein chroot macht. Dafür eignet sich scponly homepage. Nun kann man natürlich schlecht dem Root-User eine beschränkte Shell geben... Man kann aber einen zweiten User mit Root-Rechten anlegen und dem die eingeschränkte Shell zuweisen. Er muss die User-ID 0 haben (wie root) und sollte im passwd-file unter root stehen, damit Files mit Owner-ID 0 noch dem User root zugeordnet werden.

- Oder man verwendet einen non-root-User mit eingeschränkter Shell und setzt das SUID-Bit auf rsync.

Ein gutes Tutorial für Variante 1 ist auf Linux-Magazin - backups zu finden.
 
Back
Top