Вопрос или проблема
У меня есть ПК с Windows 10, на котором установлен rsync 3.3.0 (через cygwin)
У меня есть Raspberry Pi 4 с Debian Linux и rsync 3.2.7
Я настроил свои SSH-ключи, чтобы получить доступ к Pi с ПК без пароля.
Я пытаюсь выполнить следующую команду:
C:\cygwin64\bin\rsync.exe -avz /Sites/monsters/ [email protected]:var/www/monsters.local
В этом случае в Raspberry Pi есть пользователь с именем saletto. Существует допустимый файл с именем monsters в соответствующих местах на обоих компьютерах. Также папка /Sites/ находится непосредственно на диске C: на ПК.
Затем я сталкиваюсь со следующими ошибками:
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(232) [Receiver=3.2.7]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(231) [sender=3.3.0]
Некоторые из различных попыток отладки следующие:
- Проверено, что rsync установлен в /usr/bin/rsync и имеет правильные разрешения (-rwxr-xr-x для root).
- Успешно запущен rsync локально на Pi для копирования файлов внутри Pi (rsync -avz –progress ~/testfile /var/www/giantmonstersonthehorizon.local/).
- Проверено, что rsync –server успешно запускается на Pi.
- Подтверждено соединение SSH с Pi с компьютера под управлением Windows с использованием ssh -vvv [email protected].
- Проверено, что /usr/bin/rsync доступен и выполняется удаленно, запустив ssh [email protected] “/usr/bin/rsync –version”. – Подтверждено, что бинарный файл rsync находится в /usr/bin/rsync и корректно выполняется на Pi.
- Проверен файл /etc/ssh/sshd_config на наличие ограничений (PermitUserEnvironment, AllowTcpForwarding, ForceCommand закомментированы).
- Проверено, что rsync имеет правильные разрешения на Pi (/usr/bin/rsync исполняется).
Мои ключевые выводы и нерешенные вопросы
- rsync работает локально на Pi, но не выполняется при запуске удаленно через SSH с Windows.
- Аутентификация SSH проходит успешно, но процесс rsync не устанавливает связь.
- Возможно, существует несовместимость между Cygwin rsync и rsync на Pi или проблема с сетью, которая прерывает процесс rsync до передачи данных.
Заранее благодарю за вашу помощь!
Ответ или решение
Ошибка Rsync с кодом 12 является достаточно распространенной проблемой, которая указывает на неполадку в протоколе передачи данных Rsync. Основная сложность заключается в том, что эта ошибка не всегда указывает на конкретную проблему, что затрудняет её диагностику и устранение. В данном случае, проблема возникает при передаче данных между Windows 10 с Rsync 3.3.0 на базе Cygwin и Raspberry Pi 4 с Debian Linux и Rsync 3.2.7. Рассмотрим возможные причины данной ошибки и способы её устранения.
Теория
Библиотека Rsync используется для синхронизации файлов между разными системами через SSH. При возникновении ошибки с кодом 12, как правило, есть проблема с подключением или согласованием протоколов между клиентом и сервером Rsync. В большинстве случаев, данная ошибка связана с:
-
Неподдерживаемым или некорректным протоколом связи. Версии Rsync должны корректно сопоставляться друг с другом, и когда возникает несовпадение, это может привести к проблемам с передачей данных.
-
Сетевой или брандмауэрной конфигурацией. Ограничения брандмауэра могут препятствовать установлению корректного соединения между системами.
-
Неправильными настройками SSH или неправильными привилегиями пользователей. Это включает в себя ошибки в конфигурации SSH или проблемы с разрешениями ключей, используемых для аутентификации.
-
Отсутствующими или поврежденными зависимостями в Cygwin. Пакеты Cygwin должны быть правильно установлены, чтобы обеспечить полноценную работу Rsync.
Примеры
В вашей конкретной ситуации была выполнена значительная предварительная работа для диагностики проблемы:
- Версия Rsync была установлена корректно и прошла проверку на доступность как на удаленном Pi, так и на локальном уровне.
- Успешно выполнена локальная синхронизация через Rsync на Raspberry Pi.
- SSH ключи были настроены правильно и обеспечивают доступ без пароля.
- Был выполнен тест SSH соединения с использованием "ssh -vvv", показывающий успешное соединение.
Несмотря на все эти приготовления, проблема все еще остается, что говорит о необходимости более глубокого анализа.
Применение
Для устранения ошибки Rsync с кодом 12 в вашем контексте рекомендуется следовать следующим рекомендациям:
-
Обновление Rsync и Cygwin до последних стабильных версий. Проверьте, что вы используете совместимые версии Rsync. Иногда обновление до последних стабильных версий может разрешить проблемы совместимости.
-
Проверка конфигурации Cygwin. Убедитесь, что все необходимые пакеты Cygwin правильно установлены. Rsync в Cygwin зависит от ряда вспомогательных библиотек, и отсутствие одной из них может привести к ошибкам.
-
Тестировка SSH через командную оболочку. Попробуйте выполнить команду
ssh [email protected] "which rsync"
, чтобы проверить доступность Rsync через SSH. Это позволит определить, есть ли проблемы с путями в переменной окружения. -
Анализ сетевого трафика с использованием
tcpdump
или Wireshark. Это может помочь выявить, происходит ли разрыв соединения или блокировка на уровне сети. -
Проверка и настройка конфигурации брандмауэра. Убедитесь, что ваш брандмауэр не блокирует необходимые порты для SSH и Rsync. Также проверьте NAT или VPN настройки, если они используются.
-
Отладка соединения с помощью
strace
илиltrace
. Эти инструменты помогут отследить системные вызовы Rsync и выявить, на каком этапе происходит сбой. -
Переключение на альтернативные методы передачи данных как временное решение. Например, использование SCP или SFTP для синхронизации данных, если важно быстрое временное решение.
Рекомендуется выполнять диагностику с помощью данных инструментов поэтапно, чтобы можно было идентифицировать конкретный аспект, где происходит неисправность. Хотя это может занять время, такой комплексный подход обеспечит наилучшие результаты и минимизирует риски возникновения подобных проблем в будущем.