Вопрос или проблема
В этой статье говорится, что необязательная функция сервера OpenSSH в Windows 11 может быть использована для поддержки rsync с Linux.
После установки сервера OpenSSH, как указано в приведенной выше статье (через Настройки/Программы/Необязательные программы, а не в WSL), и запуска службы с помощью Start-Service sshd
, я смог успешно подключиться с помощью SSH с машины Ubuntu.
В терминале Linux (Ubuntu 20.04 LTS) он предоставляет терминал Windows с подсказкой, напоминающей me@windowshost C:\Users\Me>
Из терминала Ubuntu я попробовал команду, как указано в статье:
rsync -avP --rsync-path="wsl rsync" /home/me me@windowshost:\\Users\\Me\\folder
После запроса пароля rsync выводит:
несоответствие версий протокола -- ваша оболочка чиста?
(см. страницу man rsync для объяснения)
ошибка rsync: несовместимость протокола (код 2) в compat.c(600) [отправитель=3.2.3]
Страница man rsync предлагает выполнить $ ssh hostname > /bin/true > out.dat
, чтобы выяснить, не является ли оболочка “грязной”. Я выполнил это и получил Система не может найти указанный путь.
в терминале. Файл out.dat был создан с 0 байтами. Я не уверен, как это интерпретировать.
Я заметил, что команда rsync включает “wsl”. Но название связанной статьи – “Как rsync напрямую в машину с Windows 10 (используя OpenSSH, а не cygwin или WSL)”
Команда действительно ожидает WSL на системе Windows? Всё ещё необходимо использовать WSL на Windows для поддержки rsync?
В Win32-OpenSSH нет rsync
.
Хотя статья, на которую вы ссылаетесь создаёт впечатление, что это не зависит от WSL, --rsync-path="wsl rsync"
в командной строке rsync
действительно доказывает обратное. Это зависит от rsync
в WSL.
Ответ или решение
Для передачи данных с Ubuntu на Windows 11 с использованием rsync
и OpenSSH-сервера вам понадобится правильно настроить обе системы и учитывать некоторые нюансы.
Установка и конфигурация OpenSSH на Windows 11
-
Установка OpenSSH Server:
- Перейдите в Настройки → Приложения → Дополнительные функции.
- Найдите и установите OpenSSH Server.
-
Запуск службы OpenSSH:
- Откройте PowerShell от имени Администратора и выполните команду:
Start-Service sshd
- Убедитесь, что служба запускается автоматически при старте системы:
Set-Service -Name sshd -StartupType 'Automatic'
- Откройте PowerShell от имени Администратора и выполните команду:
Настройка Ubuntu
Теперь вам необходимо убедиться, что вы можете подключиться к вашему Windows 11 с Ubuntu через SSH:
- Подключение по SSH:
На Ubuntu выполните:ssh me@windowshost
Проверьте, что переходите к приглашению командной строки Windows, например
C:\Users\Me>
.
Использование rsync для передачи данных
Теперь основной вопрос: как использовать rsync
без установки WSL? К сожалению, в стандартной установке OpenSSH для Windows нет rsync
, и для его использования в этой настройке потребуется WSL.
Установка WSL и rsync
-
Установка WSL:
- Откройте PowerShell и выполните команду:
wsl --install
- Откройте PowerShell и выполните команду:
-
Установка
rsync
в WSL:- Запустите WSL (например, Ubuntu) из меню Пуск и выполните:
sudo apt update sudo apt install rsync
- Запустите WSL (например, Ubuntu) из меню Пуск и выполните:
Команда rsync
Теперь вы сможете использовать rsync
через WSL. Обратите внимание на команду:
rsync -avP --rsync-path="wsl rsync" /home/me me@windowshost:/mnt/c/Users/Me/folder
--rsync-path="wsl rsync"
указывает, чтоrsync
должен исполняться в контексте WSL.- Проверьте путь назначения. На Windows пути выглядят как
/mnt/c/Users/Me/folder
, потому что WSL монтирует файловую систему Windows в/mnt
.
Устранение ошибок
Если вы столкнулись с ошибкой protocol version mismatch -- is your shell clean?
, это говорит о том, что команда rsync
не может правильно взаимодействовать с оболочкой. Проверьте следующие моменты:
-
Чистая оболочка:
- Убедитесь, что в вашем профиле не выполняются какие-либо команды, которые могут мешать
rsync
. Например, проверьте файл.bash_profile
,.bashrc
илиPowerShell
конфигурации.
- Убедитесь, что в вашем профиле не выполняются какие-либо команды, которые могут мешать
-
Отладка:
- Запустите команду:
ssh me@windowshost > out.dat
- Если в файле
out.dat
нет сообщений об ошибке, оболочка должна быть чистой.
- Запустите команду:
Заключение
Поскольку нет нативной поддержки rsync
в Windows OpenSSH без использования WSL, вам действительно придется установить WSL, чтобы работать с rsync
. Несмотря на то, что путь может показаться сложным, это обеспечит вам мощный инструмент для синхронизации файлов между Ubuntu и Windows 11.