Как стать автором
Обновить

Использование 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 домашнего каталога пользователя, под которым мы хотим авторизоваться на внешней системе.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.