วิธีการตรวจจับหรือบันทึกการอัพโหลดขัดจังหวะด้วยเซิร์ฟเวอร์ OpenSSH SFTP


9

ฉันมีปัญหานี้ที่ลูกค้าของเราได้รับข้อมูลที่ถูกตัดทอน SFTP ฉันไม่แน่ใจว่าปัญหาเกิดขึ้นกับเราหรือไม่ ฉันเปิดใช้งานการบันทึก SFTP แล้ว แต่ไม่อนุญาตให้ฉันตรวจพบว่าการอัปโหลดถูกขัดจังหวะหรือไม่

ตัวอย่างเช่นถ้าฉันเปิดใช้งานไคลเอ็นต์ sftp และกดปุ่ม^Cตรงกลางของการอัปโหลดเซิร์ฟเวอร์จะพูดอะไรบางอย่างclose "/data/README.md" bytes read 0 written 5366ซึ่งไม่สามารถแยกออกจากการอัปโหลดที่ไม่หยุดชะงัก

ฉันเดาว่า.partคำนำหน้าจะใช้งานได้ แต่โดยการดูโพสต์อื่น ๆ เกี่ยวกับความผิดพลาดของเซิร์ฟเวอร์ฉันไม่คิดว่ามันจะเป็นไปได้ด้วยเซิร์ฟเวอร์ sftp ของ OpenSSH

ดังนั้นมีวิธีที่ฉันจะตรวจพบว่าการอัปโหลดไฟล์ถูกขัดจังหวะหรือไม่?

คำตอบ:


8

ฉันถือว่าโดย "ลูกค้า SFTP" คุณอ้างถึงไคลเอนต์ OpenSSH SFTP "ปัญหา" คือเมื่อคุณกดCtrl+Cมันจะหยุดการอัปโหลดและปิดไฟล์ระยะไกลอย่างสะอาดราวกับว่าการอัปโหลดเสร็จสมบูรณ์ (โปรดทราบว่ามันเป็นพฤติกรรมที่ถูกต้องและไคลเอนต์ SFTP อื่น ๆ อีกมากมายทำงานเหมือนกัน) ดังนั้นเซิร์ฟเวอร์จึงไม่มีทางที่จะบอกได้ว่าการอัพโหลดถูกขัดจังหวะ


มีการพูดอย่างเคร่งครัดเนื่องจากลูกค้า OpenSSH ส่งคำแนะนำขนาดไปยังเซิร์ฟเวอร์เมื่อสร้างไฟล์ แต่เซิร์ฟเวอร์ OpenSSH ไม่ได้ใช้หรือแม้แต่บันทึกข้อมูลนั้น แม้ว่ามันจะค่อนข้างง่ายในการปรับเปลี่ยนรหัสเพื่อบันทึกขนาดถ้าเป็นตัวเลือกสำหรับคุณ

ดูprocess_openในsftp-server.c:

a = get_attrib();
flags = flags_from_portable(pflags);
mode = (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) ? a->perm : 0666;
logit("open \"%s\" flags %s mode 0%o",
    name, string_from_portable(pflags), mode);

เปลี่ยนlogitคำสั่งเป็น:

logit("open \"%s\" flags %s mode 0%o size %llu",
    name, string_from_portable(pflags), mode, (unsigned long long)a->size);

โปรดทราบว่าการส่งคำใบ้ขนาดเป็นทางเลือก ในขณะที่ไคลเอนต์ SFTP บางรายจะส่ง (เช่น OpenSSH หรือ WinSCP) แต่บางอย่างจะไม่ (เช่น PSFTP, FileZilla หรือ LFTP) ในกรณีดังกล่าวคุณจะได้รับ a->size0


หากลูกค้ายกเลิกการอัพโหลดอย่างแท้จริง (โดยไม่ต้องปิดไฟล์ระยะไกลอย่างหมดจดเช่นเมื่อsftpถูกฆ่า) คุณจะสามารถบอกได้จากคำนำหน้า "บังคับ" ถึงบันทึก "ปิด":

บังคับปิด "/data/README.md" ไบต์อ่าน 0 เขียน 5366


1
ว้าวคุณทำ winSCP หรือไม่ เพื่อนใหญ่ ขอบคุณสำหรับคำตอบฉันจะทำอย่างนั้น
surjikal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.