ฉันเพิ่งอัพเกรดเป็น 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 ทำงานได้ดี ข้อผิดพลาดนั้นมักบ่งบอกว่าไม่มีไฟล์ dir / ระยะไกลอยู่ แต่นั่นไม่ใช่กรณีที่เห็นได้ชัด
ปรากฏว่า 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 พวกเขาแนะนำสามสิ่งที่ดูเหมือนจะเกี่ยวข้อง:
หากคุณใช้ rsync รุ่นเก่ากว่า 3.1.3 เป็นไคลเอนต์และรับ xattrs จากเซิร์ฟเวอร์ rsync ที่คุณอาจไม่ไว้วางใจอย่างเต็มที่เซิร์ฟเวอร์ที่เป็นอันตราย (แก้ไข) สามารถส่งชื่อ xattr ที่ไม่สิ้นสุดด้วยค่า null เพื่อล้น xattr อ่านบัฟเฟอร์
หากคุณกำลังเรียกใช้ rsync daemon ที่เขียนได้ซึ่งเก่ากว่า 3.1.3 คุณควรเพิ่มกฎ "ปฏิเสธตัวเลือก = ป้องกัน - 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)