it-swarm.com.de

Rsync-Dateien über Zwischenhost

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 machen, aber außerhalb meines LANs.

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, der für die Übertragung von Dateien über scp gut funktioniert - 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, sofern 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 es eine ssh-Konfigurationsdatei verwendet, um sich ohne Kennwort bei C anzumelden.

Irgendwelche Ideen, wie man diese Arbeit macht?

17
GLaDER

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 angenommen wurde, werde ich sie hier wiederholen.

Wie Sie bereits bemerkt haben, können Sie die -e | --rsh-Option von rsync verwenden, dies wird jedoch etwas komplizierter:

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

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

rsync -azv -e 'ssh -A -J [email protected]:PORT' foo/ dest:./foo/

Beachten Sie, dass ich -A (Agentenweiterleitung) verwende, es jedoch auch mit der Kennwortauthentifizierung funktionieren sollte, wenn Sie keine Schlüssel verwenden. Natürlich können Sie in Ihrem Beispiel proxy durch B und dest durch C ersetzen.

Wenn Sie nicht genügend neue ssh-Version (> = 5.3, IIRC) haben, können Sie netcat anstelle der -W-Option für ssh verwenden:

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 die ProxyCommand in Ihre $HOME/.ssh/config -Datei 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 ProxyJump für OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Dann sollten Sie in der Lage sein:

rsync -azv foo/ C:./foo/
25
crimson-egret