Если вкратце, когда я отправляю свои файлы на VPS с ПК Ubuntu через Rsync, все идет хорошо, однако если я делаю то же самое из Windows, я получаю ошибку
rsync: соединение неожиданно закрыто (пока получено 0 байт)
[Receiver] Ошибка rsync: ошибка в потоке данных протокола rsync (код 12) в io.c(235) [Receiver=3.1.3]
Хотя в отличие от Linux Rsync не установлен по умолчанию в Windows, я установил Rsync на свой ПК с Windows.
Данные об окружающей среде
- Локальный ПК №1: Windows 10
- Локальный ПК №2: Ubuntu 20.04.5
- VPS: Ubuntu 20.04
Препараты
Я инициализировал VPS с чистой Ubuntu. Чтобы исключить некоторые переменные из уравнений, я сделал некоторые вещи, которые не следует делать на реальном (не экспериментальном, как в моем случае) VPS из-за безопасности.
- Я отправлю данные, используя учетную запись root.
- Я не буду использовать SLL
Также я создал/var/www/example.comкаталог на VPS, чтобы избежать ошибки о невозможности синхронизировать данные, поскольку целевой каталог не был создан.
Цель
Отправить содержание06-ПроизводствоСборкакаталог на VPS.
Ход эксперимента
На терминале Windows введите
rsync -azve ssh --progress 06-ProductionBuild [email protected]:/var/www/example.com
Пароль был запрошен. После ввода пароля получил:
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [Receiver=3.1.3]
Если я просто ввел неправильный пароль, ошибка была бы Permission denied, please try again
.
Теперь та же команда с Ubuntu PC:
Все было отлично.
Пожалуйста, дайте мне несколько подсказок.
Попробовал из WSL - все нормально. Похоже, что-то не так сRsync из Windows.
решение1
По-видимому, это происходит потому, что вы используете «системную» ssh
программу (собственную сборку OpenSSH от Microsoft), когда указываете просто -e ssh
. (Точнее, это, вероятно, потому, что приоритет PATH каталога bin
установки (cw)rsync ниже, чем у другого рассматриваемого пути).
В моем тесте самым простым решением было указать -e /bin/ssh
вместо этого , что заставит rsync
использовать (cygwin) ssh
, который идет в комплекте. («Магия» cygwin должна автоматически определить корень пути для вас, шоколадный вы или нет.)
Заслуга (в обнаружении причины) принадлежит комментариюздесь, хотя предлагаемый там подход кажется излишне неуклюжим. (Ну, если только у вас нет причин использовать сборку ssh
от Microsoft.)
EDIT: на самом деле объяснение, данное в ссылке, не кажется мне совсем верным. В моем тесте "системный" ssh действительно использовал бы known_hosts
другое место, но он предлагает мне добавить сервер в список, когда я пытаюсь подключиться к нему в первый раз и known_hosts
успешно создал свой собственный. Он также не спрашивал меня при более поздней попытке, так что, по-видимому, он МОЖЕТ найти свой собственный, чтобы прочитать обратно. Поэтому я понятия не имею, как его предложение помогло ему, и указание опции/пути в любом случае не работает для меня.