Rsync-Dateien über Zwischenhost

22

Ich bin zurzeit nicht in meinem LAN und muss eine Sicherungskopie meines Laptops erstellen. Ich habe eine etwas neuere Kopie meines Laptops auf meinem Server und ich sichere den Laptop normalerweise mit rsync. Jetzt möchte ich das aber außerhalb meines LANs machen.

Kurz gesagt, ich möchte Daten von A nach C über B senden, wobei A mein Laptop, B mein Router und C mein Server ist.

Ich habe folgenden Befehl gefunden A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination:, das funktioniert gut für die Übertragung von Dateien über scp - aber da ich bereits die meisten Daten auf meinem Server habe, möchte ich rsync verwenden, um nur das Delta zu synchronisieren.

Ich habe versucht: A$ rsync file -e 'ssh B ssh' C und das funktioniert, soweit ich aufgefordert werde, das Kennwort für den Benutzer anzugeben: C. Wenn ich das Passwort eingebe, passiert jedoch nichts. Auf dem Router wird Tomato v1.28 ausgeführt, und ich kann es nicht so einrichten, dass eine ssh-Konfigurationsdatei verwendet wird, damit es sich mit einem Kennwort bei C anmelden kann.

Irgendwelche Ideen, wie man diese Arbeit macht?

GLaDER
quelle
2
Verwenden Sie dasselbe ProxyCommandin der Konfigurationsdatei. Rsync sollte das aufnehmen.
Jakuje,

Antworten:

30

Diese Frage wird im Wesentlichen an anderer Stelle beantwortet, einschließlich hier für scp und hier für rsync . Da letztere meine Antwort enthält, aber keine Antwort akzeptiert wurde, werde ich sie hier wiederholen.

Wie Sie bemerkt, können Sie rsync‚s -e | --rshOption, aber es wird ein bisschen komplizierter sein:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/

Wenn Ihre Version von sshneu genug ist (OpenSSH> = v7.3), können Sie die Option -J( ProxyJump) verwenden

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

Beachten Sie, dass ich verwende -A(Agent - Forwarding) , aber es sollte mit Passwort - Authentifizierung auch arbeiten , wenn Sie keine Tasten, und, natürlich, Sie ersetzen können proxymit Bund destmit Cin Ihrem Beispiel.

Wenn Sie zufällig nicht über eine ausreichend neue sshVersion verfügen (> = 5.3, IIRC), können Sie netcatanstelle der -WOption Folgendes verwenden ssh:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/

Wie bereits in den Kommentaren erwähnt, können Sie das ProxyCommandin Ihre $HOME/.ssh/configDatei einfügen, sodass Sie keine so komplizierte Befehlszeile benötigen. Fügen Sie im Einzelnen Folgendes hinzu:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

Oder verwenden Sie ProxyJumpfür OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Dann sollten Sie in der Lage sein:

rsync -azv foo/ C:./foo/
Purpurreiher
quelle