So führen Sie eine sichere Synchronisierung zwischen Servern in einem ungesicherten Netzwerk durch


19

Grundsätzlich frage ich, ob jemand auf ein Mittel gestoßen ist, mit dem man rsync in ssh einbinden kann.

Mit OpenSSH v4.9 + hat sftp einige nette Optionen, mit denen Sie die eingehende Verbindung chrooten können - und das ist eine Lösung, die ich mir ansehen würde, aber ich bleibe bei RHEL, und weder RHEL4 noch RHEL5 sind bis zu dieser Version von ssh.

Meine derzeitige Lösung besteht darin, der Serverseite mithilfe des Schlüssels des Clientbenutzers so etwas hinzuzufügen ...

Server% cat ~ / .ssh / authorized_keys
Befehl = "cd / srv / rsync / etl && tar --exclude './lost+found' -pcf - ./" ssh-rsa ...

... und so wäre der Kunde dann auf eine Sache und nur auf eine Sache beschränkt ...

client% ssh -T -i $ {HOME} / .ssh / id_rsa oracle@database.com> sensative.tar

Dies sichert die Verbindung sowie den Server (vom Client), ist jedoch ineffizient, da alle Dateien immer wieder abgerufen werden.

Ich mache etwas ähnliches (oder besser) mit rsync.

Antworten:


18

Rsync unterstützt die Verwendung von ssh als Transport

rsync -az /path/to/source username@host:/path/to/destination

Bei einigen älteren Versionen von rsync müssen Sie ssh explizit angeben

rsync -aze ssh /path/to/source host:/path/to/destination

Eine Alternative zur Verwendung von rsync ist BC Pierces Unison , das eine ähnliche Funktionalität wie rsync hat, jedoch an beiden Enden einen lokalen Index führt, um zu vermeiden, dass das Dateisystem durchsucht werden muss, um die Deltas zu berechnen


Danke, für die schnelle Antwort! Ich hätte erwähnen sollen, dass ich das auch untersucht habe - das Problem (in meinem Fall) ist, dass es den Benutzer nicht einschränkt / chroot. Wenn es möglich wäre, mit dem rsync-Dienst über ssh (dh unter Verwendung der Doppelpunktsyntax zum Definieren der Fernbedienung) zu kommunizieren, wäre dies perfekt, aber das oben Genannte funktioniert nur mit einem Doppelpunkt, dh über ssh, und daher ohne Chrooting.
Xerxes

Ich habe vergessen zu erwähnen - Unison sieht gut aus, und ich behalte einen Link dazu - in diesem Fall kann ich jedoch nichts anderes als das von RHN angebotene installieren - was lahm ist, aber außerhalb meiner Kontrolle liegt.
Xerxes

Eine weitere Einschränkung, die ich erwähnen sollte, ist, dass die Verbindung vom Client initiiert werden muss - von der <i> ziehenden </ i> Seite und nicht vom Server. (Server-seitiges Push wäre natürlich einfach, um den Server zu sichern, da der Client nichts zu sagen hat, aber nicht für mein aktuelles Problem gilt).
Xerxes

1
rsync -az server: / pfad / pfad / on / client?
Dave Cheney

1
Warum die Chroot? Sie wissen, dass eine Chroot die Sicherheit nicht wirklich verbessert. Wenn Sie bereits ssh bereitstellen, wird die Sicherheit des Systems durch rsync über ssh nicht beeinträchtigt. Denken Sie auch daran, dass rsync über ssh die rsync-Binärdatei auf dem Server aufruft. Sie können dies auf dieselbe Weise sichern, wie Sie Ihren Kopierbefehl sichern.
Paul de Vrieze

5

Okay, ich habe es endlich herausgefunden, aber die Lösung ist nicht so elegant, wie ich es mir erhofft hatte.

Auf der Serverseite müssen Sie der authorized_keys-Datei für den entsprechenden Benutzer Folgendes hinzufügen ...

no-pty, command="exit"

Auf dem Client können Sie dann wie folgt einen Tunnel erstellen ...

ssh -l username -fNTL 8073:server:873

Sobald der Tunnel eingerichtet ist, können Sie wie gewohnt eine Synchronisierung mit localhost durchführen, wobei die Syntax mit zwei Doppelpunkten nicht möglich ist.

Die von Ihnen ausgewählte localhost-Portnummer (8073) ist natürlich völlig optional. Denken Sie jedoch daran, dass Sie mit dieser Nummer synchronisieren müssen, um ...

rsync --port=8073 -a user@localhost::mySecureStore /srv/some/place/

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.