Rsync przez ssh, działa świetnie za każdym razem.
Jednak próba rsynchronizacji z hostem, który zezwala tylko na logowanie sftp, ale nie na logowanie ssh, powoduje następujący błąd:
rsync -av / source ssh user @ remotehost: / target /
niezgodność wersji protokołu - czy twoja powłoka jest czysta? (wyjaśnienie znajduje się na stronie podręcznika użytkownika rsync) błąd rsync: niezgodność protokołu (kod 2) w kompatybil.c (171) [sender = 3.0.6]
Oto odpowiednia sekcja ze strony man rsync:
Ten komunikat jest zwykle spowodowany przez skrypty startowe lub narzędzie zdalnej powłoki produkujące niechciane śmieci w strumieniu używanym przez rsync do transportu. Aby zdiagnozować ten problem, uruchom zdalną powłokę w następujący sposób:
ssh remotehost /bin/true > out.dat
następnie spójrz na out.dat. Jeśli wszystko działa poprawnie, plik out.dat powinien być plikiem o zerowej długości. Jeśli otrzymujesz powyższy błąd z rsync, prawdopodobnie przekonasz się, że plik out.dat zawiera tekst lub dane. Spójrz na zawartość i spróbuj ustalić, co ją produkuje. Najczęstszą przyczyną są niepoprawnie skonfigurowane skrypty startowe powłoki (takie jak .cshrc lub .profile), które zawierają instrukcje wyjściowe dla nieinteraktywnych loginów.
Wypróbowanie tego w moim systemie spowodowało, że w out.dat:
ssh-dummy-shell: Polecenie niedozwolone.
Tak jak myślałem, host nie pozwala na logowanie ssh.
Poniższy link pokazuje, że możliwe jest wykonanie tego zadania za pomocą bezpiecznika z sshfs - jednak jest on bardzo wolny i nie nadaje się do użytku produkcyjnego.
Czy jest jakaś szansa na uruchomienie rsync sftp?
csync /home/csync sftp://[email protected]:2222/home/csync
zobacz tę odpowiedź .lftp -e "mirror -eRv /local/dir/ /remote/dir; quit;" sftp://user@server:port
Odpowiedzi:
Niestety nie bezpośrednio.
rsync
wymaga czystego linku z powłoką, który pozwoli mu uruchomić zdalną kopięrsync
po uruchomieniu w ten sposób.Jeśli masz jakiś sposób uruchamiania długotrwałych procesów nasłuchiwania na hoście, możesz spróbować uruchomić rsync ręcznie nasłuchując połączeń na nieuprzywilejowanym porcie, ale większość technik, które to robią, wymagałaby również odpowiedniego dostępu do powłoki przez SSH, i to zależy od konfiguracja zapory hosta zezwalająca na połączenia na wybranym porcie (i host z zainstalowanym rsync w pierwszej kolejności). Uruchamianie rsync jako usługi publicznie dostępnej (zamiast pośrednio przez SSH lub podobny) nie jest jednak ogólnie zalecane w przypadku danych niepublicznych.
Jeśli host pozwala na tworzenie skryptów w PHP lub podobnym i nie ma go zablokowanego, więc dodatkowe procesy nie mogą być
exec
edytowane przez skrypty użytkownika, możesz spróbować uruchomić rsync w trybie nasłuchiwania w ten sposób. Jeśli twój koniec jest możliwy do podłączenia (korzystasz z SSH dostępnego dla świata zewnętrznego), możesz spróbować w odwrotnej kolejności - uruchom skrypt rsync na serwerze, ale zamiast nasłuchiwać połączeń przychodzących, skontaktuj się z lokalną usługą i zsynchronizuj w ten sposób. Nadal zależy to od faktycznego zainstalowania rsync na hoście, co nie jest dane, lub że można przesłać kopię roboczą, ale nie ma to wpływu na bezpieczeństwo uruchamiania demona rsync w sposób publicznie adresowalny i rozmawiania z nim za pomocą niezaszyfrowanego kanał.Zaniepokojenie, jak opisano powyżej, może być jednak sprzeczne z zasadami hosta, nawet jeśli w ogóle działa i może cię wyrzucić. Lepiej jest zapytać, czy dla tego konta można włączyć pełną powłokę, albo porzucić rsync dla tego hosta, albo porzucić ten host i przenieść się gdzie indziej, jeśli tego nie zrobią.
źródło
Teoretycznie tak. Możesz zamontować zdalny system plików na komputerze lokalnym za pomocą FUSE . Następnie możesz uruchomić lokalną kopię rsync między katalogiem podłączonym a katalogiem lokalnym. Nie próbowałem tego osobiście, ale powinno to działać w teorii. Prawdopodobnie byłoby o wiele mniej wydajne niż wykonywanie rsync przez SSH, ponieważ musiałoby przesłać co najmniej część każdego pliku, aby wykonać porównanie.
źródło
Alternatywą dla korzystania z rsync jest użycie lftp (które może połączyć się z sftp) i użycie polecenia mirror. Na przykład można to zrobić
źródło
trochę późno, ale oto jak to zrobić, używając sshfs
źródło
Nie. Rsync działa, uruchamiając rsync po drugiej stronie i komunikując się z nim, co oznacza, że wymagany jest pewien rodzaj dostępu do powłoki.
źródło
Alternatywą byłoby uruchomienie rsync jako demona i połączenie się z nim przez tunel SSH.
źródło
authorized_keys
która zezwala na określony tunel i działa npsleep 86400
. Następnie strona klienta może następniersync
przejść przez tunel.Opcja łączenia najlepiej ze wszystkich
Wydaje się, że ma następujące zalety, których inne odpowiedzi tutaj nie mają:
rsync
demonaJeszcze go nie testowałem, ale z powodzeniem korzystałem z wszystkich tych funkcji oprócz
rrsync
.Jak to zrobić
ssh-keygen
(funkcja openSSH)~/.ssh/authorized_keys
(funkcja openSSH)~/.ssh/authorized_keys
(funkcja openSSH) używając jako polecenia skrypturrsync
dystrybuowanego z rsync, coś w rodzajucommand="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-
Następnie możesz normalnie synchronizować rsync z klientem.
Jeśli potrzebujesz więcej szczegółów
Ograniczanie dostępu SSH do rsync | Guy Rutenberg
Jeden krok poza linkiem powyżej
Polecenie na końcu tej strony można skrócić. Aby
~/.ssh/config
utworzyć sekcję taką jak ta: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
następnie polecenie rsync z klienta
staje się
źródło
rsync
uruchomienie, pomijając aspekt SFTP. Jeśli zostanie Ci przedstawiony serwer SFTP innej osoby, nad którym nie masz kontroli, ta odpowiedź nie rozwiąże problemu.