Vraag Is het mogelijk om rsync te gebruiken over sftp (zonder een ssh-shell)?


Rsync via ssh, werkt elke keer weer geweldig.

Als u echter probeert te rsynchroniseren naar een host die alleen sftp-aanmeldingen toestaat, maar geen SSH-aanmeldingsgegevens, wordt de volgende fout weergegeven:

rsync -av / source ssh-gebruiker @ remotehost: / target /

protocolversie komt niet overeen - is uw   shell schoon? (zie de rsync man-pagina   voor uitleg) rsync error:   protocol incompatibiliteit (code 2) op   compat.c (171) [afzender = 3.0.6]

Hier is het relevante gedeelte van de rsync man-pagina:

Dit bericht wordt meestal veroorzaakt door uw opstartscripts of   externe shell faciliteit produceren   ongewenste afval op de stroom dat   rsync gebruikt voor   het transport. De manier om dit probleem te diagnosticeren is om uw   remote shell als dit:

          ssh remotehost /bin/true > out.dat

kijk dan naar out.dat. Als alles dan correct werkt   out.dat moet een bestand van nul lengte zijn.   Als u de bovenstaande foutmelding krijgt   van rsync          dan zul je waarschijnlijk merken dat out.dat wat tekst of   gegevens. Kijk naar de inhoud en probeer het   werk uit wat het produceert. De   meest com-          mon cause is incorrect geconfigureerde shell opstartscripts (such   als .cshrc of .profile) die bevatten   uitvoerinstructies voor niet-interactief   logins.

Dit proberen op mijn systeem produceerde het volgende in out.dat:

ssh-dummy-shell: opdracht niet toegestaan.

Zoals ik dacht, staat de host ssh-aanmeldingen niet toe.

Het volgende link laat zien dat het mogelijk is om deze taak te volbrengen met behulp van fuse met sshf's - het is echter extreem traag en niet geschikt voor productiegebruik.

Is er een kans dat rsync sftp werkt?


51
2018-04-25 11:07


oorsprong


lftp zal het lukken. Ik synchroniseer local naar remote met de -R switch
Weet je hoe de commando's beperkt zijn op de server? Als dit het geval is door ForceCommand in te stellen in sshd_config, kijk dan of je het bestand waarnaar wordt verwezen kunt wijzigen. Of als het is ingesteld op commando in authorized_keys, dan heb je misschien toegang tot authorized_keys over sshfs en kan je deze veranderen? - ptman
Je kan het proberen csync: csync /home/csync sftp://csync@krikkit.galaxy.site:2222/home/csync Zie dit antwoord. - nachtigall
Uiteindelijk deed ik het met lftp: lftp -e "mirror -eRv /local/dir/ /remote/dir; quit;" sftp://user@server:port - nachtigall
@nachtigall weet u hoe u lftp moet gebruiken met meerdere invoerbestanden / een lijst met bestanden en mappen? - bortran


antwoorden:


Helaas niet direct. rsync vereist een schone koppeling met een shell waarmee het de externe kopie van kan starten rsync, wanneer deze manier wordt uitgevoerd.

Als je een manier hebt om langdurig luisterprocessen op de host uit te voeren, kun je proberen rsync handmatig te starten om te luisteren naar verbindingen op een niet-bevoorrechte poort, maar de meeste technieken om dat te doen zouden ook een goede shell-toegang vereisen via SSH, en het is afhankelijk van de firewallarrangementen van de hosts waarmee verbindingen kunnen worden gemaakt op de poort die u hebt gekozen (en de host die rsync heeft geïnstalleerd in de eerste plaats). Het uitvoeren van rsync als een openbaar adresseerbare service (in plaats van indirect via SSH of iets dergelijks) wordt echter over het algemeen niet aanbevolen voor niet-openbare gegevens.

Als je host maakt scripts mogelijk in PHP of iets dergelijks en het heeft het niet op slot, dus extra processen kunnen dat niet zijn execed door gebruikersscripts, dan zou je op die manier kunnen proberen rsync te starten in luistermodus. Als je einde connecteerbaar is (je draait SSH toegankelijk voor de buitenwereld) zou je dit in omgekeerde volgorde kunnen proberen - laat een script rsync draaien op de server, maar in plaats van te luisteren naar inkomende verbindingen, moet je contact opnemen met je lokale service en op die manier synchroniseren. Dit is nog steeds afhankelijk van het feit dat rsync daadwerkelijk wordt geïnstalleerd op de host, wat geen gegeven is, of dat je een werkkopie kunt uploaden, maar niet de beveiligingsimplicaties van het draaien van een rsync-daemon op een openbaar adresseerbare manier en erover praten via een niet-versleutelde kanaal.

Knutselen, zoals hierboven beschreven, is misschien tegen het beleid van de host, ook al werkt het helemaal, en kan je eraf schoppen. Je kunt beter vragen of een volledige shell kan worden ingeschakeld voor dat account en of je rsync voor die host opgeeft of die host verlaat en ergens anders heen gaat als ze dat niet doen.


38
2018-04-25 11:39



Merk op dat het geen volledige schaal hoeft te zijn; het moet gewoon toestaan ​​dat de rsync-opdracht met de juiste argumenten wordt uitgevoerd. scponly is hiervoor handig. - sciurus


In theorie, ja. U kunt het externe bestandssysteem op uw lokale computer mounten met FUSE. Vervolgens kunt u een lokale kopie van rsync uitvoeren tussen de gekoppelde map en de lokale map. Ik heb dit niet persoonlijk geprobeerd, maar het zou in theorie moeten werken. Het zou waarschijnlijk een stuk minder efficiënt zijn om de rsync via SSH uit te voeren, omdat het minstens een deel van elk bestand zou moeten overzetten om de vergelijking uit te voeren.


15
2018-04-25 15:59



Dat zou moeten werken wanneer tijdstempel + maatvergelijking genoeg is om te beslissen wat er moet worden verzonden. Zodra een controlesom nodig is, wordt het volledige externe bestand over de regel gelezen, evenals de updates die worden verzonden, dus zorg ervoor dat de opties van rsync zo zijn ingesteld dat deze alles-of-niets doet voor elk bestand (zonder gebruik van --ignore- tijden of --checksum en met - het hele bestand gespecificeerd kan voldoende zijn). Sommige opties zoals --link-dest werken hoogst onwaarschijnlijk niet goed (of helemaal niet) op deze manier. - David Spillett
Bedankt voor het toevoegen van wat details David. Dat is het soort beperkingen in efficiëntie waar ik aan zat te denken, ik heb ze niet zo goed gearticuleerd :) - Kamil Kisiel
Het is een tijdelijke oplossing met beperkingen, ja, maar het is goed genoeg als er geen manier is om "juiste" rsync aan te roepen - Valery Lourie


een beetje laat, maar hier is hoe ik het doe, met behulp van sshf's

  source /scratch/slimdata/password.sh
  mkdir tmp_mnt
  echo $PASSWORD | sshfs user@host:dir tmp_mnt -o password_stdin
  rsync -rutL --delete tmp_mnt/ to_sync/
  fusermount -u tmp_mnt
  rmdir tmp_mnt

5
2017-09-20 12:04



Zoals @David Spillett zegt in zijn reactie op een eerder antwoord (serverfault.com/questions/135618/...), dit zal werken, maar is een beetje een inefficiënt gebruik van het rsync-protocol. - Evan Anderson
Jonathan, ik denk dat je oplossing verkeerd is. Als u een extern station koppelt en rsync uitvoert zoals u twee lokale mappen zou synchroniseren, wordt er altijd alles overgedragen tijdens het synchroniseren, aangezien het rsync-proces op uw lokale computer de hash-waarden van de externe bestanden berekent. Dit betekent dat het hele bestand wordt overgedragen en dat de voordelen van rsync verloren gaan. Bewerken: ah dit antwoord is al verschillende keren gegeven ... sry voor replicatie: D - Thekwasti


Nee. Rsync werkt door rsync aan de andere kant uit te voeren en daarmee te communiceren, wat betekent dat een bepaalde vorm van shell-toegang vereist is.


2
2018-04-25 11:23





Een alternatief zou zijn om rsync als daemon te starten en er verbinding mee te maken via een SSH-tunnel.


2
2018-04-25 12:17



Dit antwoord is te kort om volledig nuttig te zijn, maar als de server geen shell-toegang kan toestaan, maar kan toestaan ​​(1) een rsync-server lokaal te luisteren (niet beschikbaar van buitenaf, voor beveiliging), en (2) ssh-tunnel, dan in principe kon men via een regel in inloggen op de server authorized_keys dat een specifieke tunnel toestaat en b.v. sleep 86400. Dan zou de cliëntkant dan kunnen rsync via de tunnel. - Stéphane Gourichon


Een alternatief voor het gebruik van rsync is om in plaats daarvan lftp te gebruiken (dat verbinding kan maken met sftp) en de opdracht mirror te gebruiken. Je kunt bijvoorbeeld doen

lftp
~> open -u user,password sftp://host.com
~> mirror remotedir outdir
~> quit

2
2018-03-31 10:13





Optie die het beste van alles combineert

Het lijkt de volgende voordelen te hebben die andere antwoorden hier niet hebben:

  • profiteert volledig van SSH (veilig)
  • profiteert volledig van rsync (bandbreedte-efficiënt protocol, alle rsync-opties zoals bandbreedtebeperking)
  • feitelijk efficiënt (in tegenstelling tot sshf's die de dagen soms redden maar in de praktijk nog steeds langzaam is)
  • heeft geen behoefte aan willekeurige shell-opdrachten op de server
  • heeft geen server nodig om ssh-tunnels toe te staan
  • heeft geen server nodig voor het uitvoeren van a rsync demon

Ik heb het nog niet getest, maar ik heb al deze functies met succes gebruikt, behalve rrsync.

Hoe je dat doet

  • maak lokaal een sleutel aan ssh-keygen (openSSH-functie)
  • Toestaan ​​alleen inloggen met die specifieke sleutel, met een vermelding in de server ~/.ssh/authorized_keys (openSSH-functie)
  • koppel deze sleutel aan een specifiek commando, met ~/.ssh/authorized_keys (openSSH-functie) met als opdracht het script rrsync gedistribueerd met rsync, zoiets command="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-

Vervolgens kunt u normaal van de client rsyncen.

Als je meer details nodig hebt

Beperking van SSH-toegang tot rsync | Guy Rutenberg

Een stap verder dan bovenstaande link

De opdracht aan het einde van die pagina kan korter worden gemaakt. In ~/.ssh/config maak een stanza zoals deze:

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

dan je rsync commando van de klant

rsync -e "ssh -i $HOME/.ssh/id_remote_backup" -av user@remote: etc2/

wordt

rsync -av user@remote: etc2/

0
2018-01-08 10:04



Helaas heeft dit niets te maken met het gebruik van rsync met een SFTP-server, dit gaat over het configureren van een OpenSSH-server om toe te staan rsync worden uitgevoerd, waarbij het SFTP-aspect wordt omzeild. Als u de SFTP-server van iemand anders krijgt aangeboden waar u geen controle over hebt, kan dit antwoord het probleem niet oplossen. - Malvineous
Je hebt gelijk. Ik heb dit misschien wel geschreven om een ​​andere vraag te beantwoorden en hier per ongeluk geplaatst. Ik overweeg om mijn antwoord hier te verwijderen. - Stéphane Gourichon