Rsync über ssh funktioniert jedes Mal hervorragend.
Wenn Sie jedoch versuchen, eine Synchronisierung mit einem Host durchzuführen, der nur SFTP-Anmeldungen, nicht jedoch SSH-Anmeldungen zulässt, tritt der folgende Fehler auf:
rsync -av / source ssh user @ remotehost: / target /
Nicht übereinstimmende Protokollversion - Ist Ihre Shell sauber? (Eine Erklärung finden Sie in der rsync-Manpage.) rsync-Fehler: Protokollinkompatibilität (Code 2) bei compat.c (171) [sender = 3.0.6]
Hier ist der relevante Abschnitt aus der rsync-Manpage:
Diese Meldung wird normalerweise von Ihren Startskripten oder der Remote-Shell-Funktion verursacht, die unerwünschten Datenmüll auf dem Stream erzeugt, den rsync für den Transport verwendet. Um dieses Problem zu diagnostizieren, führen Sie Ihre Remote-Shell folgendermaßen aus:
ssh remotehost /bin/true > out.dat
dann schau mal auf out.dat. Wenn alles richtig funktioniert, sollte out.dat eine Null-Länge-Datei sein. Wenn Sie den obigen Fehler von rsync erhalten, werden Sie wahrscheinlich feststellen, dass out.dat Text oder Daten enthält. Schauen Sie sich den Inhalt an und versuchen Sie herauszufinden, was ihn produziert. Die häufigste Ursache sind falsch konfigurierte Shell-Startskripts (z. B. .cshrc oder .profile), die Ausgabeanweisungen für nicht interaktive Anmeldungen enthalten.
Dies auf meinem System zu versuchen, ergab in out.dat Folgendes:
ssh-dummy-shell: Kommando nicht erlaubt.
Wie ich dachte, erlaubt der Host keine SSH-Anmeldungen.
Der folgende Link zeigt, dass es möglich ist, diese Aufgabe mithilfe von Fuse mit sshfs auszuführen. Sie ist jedoch extrem langsam und nicht für den produktiven Einsatz geeignet.
Gibt es eine Chance, rsync sftp zum Laufen zu bringen?
csync /home/csync sftp://[email protected]:2222/home/csync
Siehe diese Antwort .lftp -e "mirror -eRv /local/dir/ /remote/dir; quit;" sftp://user@server:port
Antworten:
Leider nicht direkt.
rsync
erfordert eine saubere Verknüpfung mit einer Shell, mit der die Remote-Kopie von gestartet werden kannrsync
, wenn diese auf diese Weise ausgeführt wird.Wenn Sie eine Möglichkeit haben, langlebige Abhörprozesse auf dem Host auszuführen, können Sie versuchen, rsync manuell zu starten, um auf Verbindungen an einem nicht privilegierten Port zu warten. Für die meisten Techniken ist jedoch auch ein ordnungsgemäßer Shell-Zugriff über SSH erforderlich Die Firewall-Vorkehrungen des Hosts lassen Verbindungen auf dem von Ihnen gewählten Port (und auf dem Host, auf dem rsync installiert ist) zu. Das Ausführen von rsync als öffentlich adressierbarer Dienst (anstatt indirekt über SSH oder ähnliches) wird für nicht öffentliche Daten im Allgemeinen jedoch nicht empfohlen.
Wenn Ihr Host
exec
Skripte in PHP oder ähnlichem zulässt und diese nicht gesperrt sind, sodass zusätzliche Prozesse nicht von Benutzerskripten bearbeitet werden können , können Sie versuchen, rsync auf diese Weise im Listening-Modus zu starten. Wenn Ihr Endgerät verbindbar ist (Sie verwenden SSH, auf das die Außenwelt zugreifen kann), können Sie dies in umgekehrter Reihenfolge versuchen: Lassen Sie ein Skript auf dem Server rsync ausführen, aber anstatt auf eingehende Verbindungen zu warten, wenden Sie sich an Ihren lokalen Dienst, und führen Sie die Synchronisierung auf diese Weise durch. Dies setzt immer noch voraus, dass rsync tatsächlich auf dem Host installiert ist, der nicht vorgegeben ist, oder dass Sie eine Arbeitskopie hochladen können, dies hat jedoch nicht die Sicherheitsauswirkungen, dass ein rsync-Dämon öffentlich adressierbar ausgeführt und über eine unverschlüsselte Verbindung mit ihm gesprochen wird Kanal.Das oben beschriebene Herumspielen kann jedoch gegen die Richtlinien des Hosts verstoßen, auch wenn es überhaupt funktioniert, und einen Anstoß verursachen. Am besten fragen Sie, ob für dieses Konto eine vollständige Shell aktiviert werden kann, und geben entweder rsync für diesen Host auf oder geben diesen Host auf und ziehen an einen anderen Ort, wenn dies nicht der Fall ist.
quelle
Theoretisch ja. Sie können das entfernte Dateisystem mit FUSE auf Ihrem lokalen Computer mounten . Anschließend können Sie eine lokale Kopie von rsync zwischen dem bereitgestellten Verzeichnis und dem lokalen Verzeichnis ausführen. Ich habe das nicht persönlich ausprobiert, aber es sollte theoretisch funktionieren. Es wäre wahrscheinlich weitaus weniger effizient, den rsync über SSH durchzuführen, da mindestens ein Teil jeder Datei übertragen werden müsste, um den Vergleich durchzuführen.
quelle
Eine Alternative zur Verwendung von rsync besteht darin, stattdessen lftp (das eine Verbindung zu sftp herstellen kann) zu verwenden und den Befehl mirror zu verwenden. Zum Beispiel kann man tun
quelle
ein bisschen spät, aber hier ist, wie ich es mit sshfs mache
quelle
Nein. Rsync führt rsync auf der anderen Seite aus und kommuniziert damit. Dies bedeutet, dass eine Art Shell-Zugriff erforderlich ist.
quelle
Eine Alternative wäre, rsync als Daemon zu starten und eine Verbindung über einen SSH-Tunnel herzustellen.
quelle
authorized_keys
, die einen bestimmten Tunnel zulässt und zB läuftsleep 86400
. Dann könnte die Clientseite dannrsync
über den Tunnel.Option, die das Beste von allem kombiniert
Es scheint die folgenden Vorteile zu haben, die andere Antworten hier nicht haben:
rsync
Daemon auszuführenIch habe es noch nicht getestet, aber ich habe alle diese Funktionen mit Ausnahme von erfolgreich verwendet
rrsync
.Wie es geht
ssh-keygen
(openSSH-Funktion)~/.ssh/authorized_keys
Erlaube die Anmeldung nur mit diesem bestimmten Schlüssel, mit einem Eintrag im Server (openSSH-Funktion)~/.ssh/authorized_keys
(openSSH-Funktion), indem Sie als Befehl dasrrsync
mit rsync verteilte Skript verwenden , etwacommand="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-
Dann können Sie normal vom Client aus rsyncen.
Wenn Sie weitere Informationen benötigen
Einschränken des SSH-Zugriffs auf rsync | Guy Rutenberg
Einen Schritt weiter oben
Der Befehl am Ende dieser Seite kann verkürzt werden. In
~/.ssh/config
schaffen eine Strophe wie folgt aus :Host remote # can be host or ip or custom-label User user # login on remote host HostName optional-dns-resolvable-host-or-ip # if label used above IdentityFile ~/.ssh/id_remote_backup
dann dein rsync befehl vom client
wird
quelle
rsync
er ausgeführt werden kann, wobei der SFTP-Aspekt umgangen wird. Wenn Ihnen der SFTP-Server einer anderen Person angezeigt wird, über den Sie keine Kontrolle haben, kann diese Antwort das Problem nicht lösen.