Search
Write a publication
Pull to refresh

Использование rsync в режиме клиента для ОС Windows

Хочу поделиться вариантом использования rsync для синхронизации файлов между внешней UNIX/Linux системой и локальной системой Windows.


Подобные задачи иногда возникают в работе администратора. Однако оказалось непросто быстро найти в сети работоспособный вариант версии rsync под win32 и сразу начать использовать для решения возникших задач автоматизации переноса файлов. Я не буду рассказывать о преимуществах rsync. На мой взгляд, это наиболее универсальный и гибкий инструмент синхронизации файлов между хостами.





Мною были найдены несколько вариантов реализации rsync под платформу win32:
  1. rsync-win — вполне работоспособная сборка версии 2.5.7, но достаточно старая — датируемая 2002 годом. Содержит в себе команду rsync, которая имеет те же ключи, что и оригинальный rsync. В работе себя показало очень медленным и нестабильным решением.
  2. RsyncShare — дружественная по интерфейсу реализация rsync сервера под Windows.
  3. winrsync — графический клиент написанный на PHP4 и использованием библиотеки GTK.
  4. cwRsync — сборка rsync версии 3.04.

Из рассмотренных вариантов, я выбрал cwRsync.


Инсталляция

Скачиваем дистрибутив с домашней страницы cwRsync


У меня это был файл cwRsync_2.1.5_Installer.zip


Устанавливаем в систему. Скорее всего путь будет «C:\Program Files\cwRsync\»


Поскольку это консольное приложение и вызов его может потребоваться в разных контекстах. Я рекомендую обеспечить возможность нахождения приложения с помощью переменной окружения %Path%, мне больше нравится копировать подобные утилиты в специальный каталог, предназначенный для множества консольных утилит и который давно прописан в переменной %Path%. Если такого каталога нет, можно положить в %Systemroot%, поскольку этот каталог перечислен в %Path% по умолчанию. Либо добавить путь C:\Program Files\cwRsync\ в %Path% (изменения вступают в силу после повторного входа в систему). Вообщем, выбирайте по вкусу. В любом случае при наборе rsync в коммандной строке — мы должны увидеть вывод встроенной справки.


Использование

Формат вызова:
rsync опции источник приемник


Пример вызова:
rsync -rut -v -e ssh username@192.168.0.1:/remotefolder localfolder/
Данный пример копирует файлы с внешней системы в локальный фолдер.


Итак, какие опции использованы в даном примере:


-rut — в одну «кучу» собраны ключи определяющие режим копирования файлов:
r — рекурсивный обход дерева каталогов
u — обновлять только измененные файлы
t — сохранять значения даты и времени изменения файла


-e ssh — Как известно, утилита rsync может работать, используя разные оболочки для связи хостов, по умолчанию используется ssh. Для однозначности, я всегда указываю используемую оболочку.


username@192.168.0.1:/remotefolder localfolder/ — авторизация под пользователем username на хосте с адресом 192.168.0.1, будут браться файлы из каталога /remotefolder, копируемые дерево каталогов и файлы будут помещены в папку localfolder/ относительно текущего пути в момент вызова rsync.


При каждом запуске rsync будет запрашивать пароль для username. Для пакетного режима, следует воспользоваться возможностью авторизации SSH по ключам.


Чтобы изменить направление копирования файлов, достаточно в качестве источника указать локальный ресурс, а в качестве приемника — внешний.


Авторизация по ключам

Запускаем ssh-keygen.exe под тем пользователем от имени которого будет запускаться rsync в пакетном режиме:
На все вопросы нажимаем Enter. Пароль для ключа тоже не указываем, иначе в пакетном режиме будет запрашиваться пароль, но уже для самого ключа. Ключ должен быть успешно создан — в домашнем каталоге windows пользователя (переменная %USERPROFILE%) будет создан каталог .ssh, в нем записаны файлы ключей: id_rsa и id_rsa.pub. Теперь содержимое файла id_rsa.pub нужно скопировать на сервер (в нашем случае хост 192.168.0.1), добавив эту строку в файл ~/.ssh/authorized_keys домашнего каталога пользователя, под которым мы хотим авторизоваться на внешней системе.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.