Я недавно обновился до Rtools-3.5 (вспомогательный к этому вопросу), который включает в себя rsync-3.1.3. На другом ноутбуке, использующем Rtools-3.4 (rsync-3.1.1), простая команда rsync -aHAX remote:/path/to/dir/* .
работает просто отлично, но с 3.1.3 это не так. Для устранения неполадок я скопировал исполняемый файл rsync-3.1.1 (с сопровождающим cyg*.dll
) из Rtools-3.4, поэтому теперь у меня есть два набора исполняемых файлов: 3.1.1 (старый, рабочий) и 3.1.3 (новый, не за работой). Версия 3.1.1 работает.
Конфигурация ssh
идентична, ssh-agent
работает нормально (через KeePass/KeeAgent) и ssh
-ing (из Git для Windows, версия OpenSSH_7.7p1, OpenSSL 1.0.2o 27 Mar 2018
если это имеет значение) работает на удаленном сервере без проблем.
Я думал, что другой вопрос « https://unix.stackexchange.com/questions/389908 » будет достаточно похожим, но в этом вопросе все версии rsync одинаковы.
Старая версия:
$ ~/rs/rsync --version
rsync version 3.0.9 protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
no socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes
Более новая версия:
$ /c/Rtools/bin/rsync --version
rsync version 3.1.3 protocol version 31
Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, no xattrs, iconv, symtimes, prealloc
Я пытаюсь rsync -e 'ssh -vv' ...
и ничего не кажется смешным: журнал не сообщает о проблемах, ключи принимаются, и это заканчивается:
debug2: input_userauth_pk_ok: fp SHA256:g2VNSDTf5fNp46rZUo4GmAVi84gSNA9nNbT9KKfGXP0
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (publickey).
Authenticated to my.remote.host ([11.22.33.44]:22).
dup() in/out/err failed
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.3]
Та же команда с 3.1.1 работает отлично. Эта ошибка часто указывает на то, что удаленный каталог / файл не существует, но это явно не так (поскольку работает 3.1.1).
Похоже, что Rtools изменил свои параметры компиляции, потому что сравнение возможностей обоих показывает некоторые различия:
## Versions: 3.1.1 3.1.3
$ diff -uw <( ~/rs/rsync --help) <( /c/Rtools/bin/rsync --help) | head -n 20
--- /dev/fd/63 2018-08-12 17:48:25.000000000 -0700
+++ /dev/fd/62 2018-08-12 17:48:25.000000000 -0700
@@ -1,10 +1,10 @@
-rsync version 3.0.9 protocol version 30
-Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
+rsync version 3.1.3 protocol version 31
+Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
- no socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
- append, ACLs, xattrs, iconv, symtimes
+ socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
+ append, ACLs, no xattrs, iconv, symtimes, prealloc
Поэтому они добавили socketpairs
и удалили xattrs
. Другие страницы, которые я прочитал, наводят меня на мысль , что это связано с xattrs
, но я не совсем в этом убежден и не знаю, как на самом деле это проверить.
Удаленный конец:
$ rsync --help | head -n 20
rsync version 3.1.1 protocol version 31
Copyright (C) 1996-2014 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes, prealloc
Далее предполагается, что ключом могут быть xattrs
.
Глядя на Rsync Security Advisories, они предлагают три вещи, которые, возможно, связаны между собой:
Если вы используете версию rsync старше 3.1.3 в качестве клиента и получаете xattrs с сервера rsync, которому вы не можете полностью доверять, злонамеренный (модифицированный) сервер может отправить ненулевое имя xattr для переполнения xattr читать буфер.
Если вы используете доступный для записи демон rsync старше 3.1.3, вам следует добавить правило «отменить опции = protect-args», если вы не полностью доверяете пользователям, отправляющим вам файлы.
Если вы используете версию rsync старше 3.1.2 в качестве клиента и получаете файлы с сервера rsync, которым вы не можете полностью доверять, эта версия добавляет дополнительную проверку в список файлов, чтобы предотвратить изменение путей отправителем и / или запросы на передачу таким образом, чтобы файл мог быть получен за пределами места назначения передачи.
Я попытался несколько комбинаций переменных (например, -X
), чтобы исправить это, но не могу найти ничего, чтобы заставить работать версию 3.1.3. Тем временем я могу использовать 3.1.1, чтобы делать то, что мне нужно, но что еще я могу проверить и / или изменить в командной строке, чтобы все заработало?
(win10_64, GfW-2.18.0, удаленный Ubuntu-16.04 с rsync-3.1.1)