Rsync через SSH, или что-то еще?


10

Я пытался использовать rsync на OSX для Linux или Unix, над которым у меня мало контроля. Я делал что-то вроде этого

rsync -avz -e ssh remoteuser@remotehost:/remote/dir /this/dir/ 

Ошибка возвращается:

bash: rsync: команда не найдена rsync: соединение неожиданно закрыто (пока получено 0 байт) [приемник] Ошибка rsync: удаленная команда не найдена (код 127) в /SourceCache/rsync/rsync-37.3/rsync/io.c(452 ) [получатель = 2.6.9]

Однако после прочтения документации я начинаю думать, что на самом деле мне нужно будет установить демон rsync на удаленном хосте.

  1. Нужно ли устанавливать сервер rsync на удаленном хосте?
  2. Бесплатные альтернативы - GUI или не-GUI - которые не требуют установки чего-либо на удаленном хосте ?

Спасибо!


1
Какие именно проблемы у вас есть с вашей текущей командой?
Фидели

@fideli, извини, забыл об этом. Редактирование вопроса сейчас
Дэн Розенстарк

1
Спасибо за этот вопрос, но вы можете пометить его, rsyncпожалуйста?
Эндрю Гримм

Ответы:


21

Вам нужна команда rsync на сервере, но вам не нужно запускать демон.

Получить RSync бинарного кода , который работает на сервере, поставить его где - нибудь в вашем доме, и добавить этот флаг в командной строке: --rsync-path=/home/user/path/to/rsync.

Если вы не хотите копировать rsync на серверы, вы можете использовать scp или sshfs.

sshfs user@host ~/sync/user-host
rsync -av ~/local-dir ~/sync/user-host/remote-dir

В этом случае rsync будет работать полностью локально, но изменения будут распространены на сервер.


Мне очень нравится это решение, особенно потому, что сервер - это дешевый хостинг на GoDaddy, и я сомневаюсь, что смогу запустить rsync на сервере. +1 сейчас!
Дэн Розенстарк

Какой самый простой путь для установки sshfs на OSX? MacFuse или есть что-то проще?
Дэн Розенстарк

MacFuse + (MacFusion или sshfs-static-leopard), я думаю (я не пользователь OSX)
Тобу

Да, MacFuse это делает. Просто страница загрузки для двоичного файла sshfs дает вам двоичный файл с расширением .gz. Таким образом, вы должны переименовать его вместо того, чтобы делать это. Раздражает, но хорошо сейчас! Спасибо
Дэн Розенстарк

6

Вам нужно иметь rsync на удаленном хосте - не обязательно сервер rsync (который, я считаю, не будет обрабатывать ssl-соединение в любом случае), но rsync на локальном блоке должен общаться с rsync на удаленном блоке. Вы используете SSH для связи двух.

Предполагая, что rsync существует в удаленном окне, он не находится в пути поиска по умолчанию для вашего ssh, вошедшего в оболочку. В зависимости от ваших предпочтений и разрешений на удаленном боксе, вы можете попробовать

  • используя опцию --rsync-path =
  • изменение пути по умолчанию для вашей удаленной оболочки ssh
  • добавление псевдонима для rsync в удаленной оболочке ssh
  • изменение выполненной удаленной команды на абсолютный путь к rsync

или что-то подобное. Если rsync как исполняемый файл (заместитель сервера) не существует на удаленном хосте, его необходимо добавить.


Это было полезно, так что +1, но мне интересно, как указать начальный каталог для rsync на стороне Windows, если я запускаю его с Mac на ПК, например: superuser.com/questions/1462861/…
Райан

1

Нет смысла использовать rsync без запуска демона rsync на удаленном хосте, несмотря на предложенное выше решение creative sshfs. Вся идея эффективности в rsync состоит в том, чтобы два экземпляра сравнивали свои локальные копии набора данных, вычисляя контрольные суммы локально, сравнивая их по сети и передавая фактические данные только для тех частей этих файлов, которые фактически различаются.

Если вы используете sshfs или любое сетевое монтирование, оно скрывает только тот факт, что ему нужно скопировать весь набор данных по сети с удаленного хоста, чтобы вычислить контрольные суммы локально, а затем передать различия поверх этого. Было бы быстрее и дешевле удалить все локально и «scp -r».


3
Не совсем так, потому что rsync проверяет, изменяются ли файлы по размеру и метке времени, и это все же намного эффективнее, чем scp'ing все файлы. Но действительно, механизм инкрементального обновления rsync внутри файлов не имеет смысла по сравнению с sshfs.
Яап Старейшина

0

Попробуйте SCP . Поскольку у вас уже есть доступ по SSH, вам не нужно устанавливать что-либо еще на удаленном хосте :)

Для копирования файлов с удаленного хоста на локальный хост используйте:

# scp -R remoteuser@remotehost:/remote/dir /this/dir/ 

Или скопируйте файлы с локального хоста на удаленный хост с помощью:

# scp -R /this/dir remoteuser@remotehost:/remote/dir 

1
Спасибо Ли, SCP великолепен, но не синхронизируется, верно?
Дэн Розенстарк

1
это должно быть маленькое «r»:scp -r
0x4a6f4672
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.