ओपनएसएसएच एसएफटीपी सर्वर के साथ अपलोड किए गए अपलोड का पता लगाने या लॉग करने के लिए कैसे?


9

मुझे यह समस्या है जहाँ हमारा ग्राहक SFTP-ing-truncated डेटा रहा है। मुझे यकीन नहीं है कि अगर समस्या हमारे अंत या उसकी है। मैंने SFTP लॉगिंग सक्षम की है, लेकिन यह मुझे यह पता लगाने की अनुमति नहीं देता है कि क्या कोई अपलोड बाधित हुआ है।

उदाहरण के लिए, अगर मैं sftp क्लाइंट को आग लगाता हूं, और ^Cअपलोड के बीच में मारा जाता है, तो सर्वर कुछ ऐसा ही कहता है close "/data/README.md" bytes read 0 written 5366, जो अबाधित अपलोड से अप्रभेद्य है।

मुझे लगता है कि .partउपसर्ग जैसा कुछ काम करेगा, लेकिन सर्वर की खराबी पर अन्य पोस्ट देखकर, मुझे नहीं लगता कि ओपनएसएसएच के sftf सर्वर के साथ यह संभव है।

तो, क्या मेरे लिए यह पता लगाने का कोई तरीका है कि क्या कोई फ़ाइल अपलोड बाधित हुई है?

जवाबों:


8

मुझे लगता है कि "sftp क्लाइंट" द्वारा आप एक OpenSSH SFTP क्लाइंट का उल्लेख करते हैं। "समस्या" यह है कि जब आप दबाते हैं Ctrl+C, तो यह अपलोड को रोक देता है और रिमोट फाइल को साफ-साफ बंद कर देता है, जैसे कि अपलोड पूरी तरह से समाप्त हो गया है (ध्यान दें कि यह एक सही व्यवहार है और कई अन्य एसएफटीपी ग्राहक समान व्यवहार करते हैं)। इसलिए सर्वर के पास यह बताने का कोई तरीका नहीं है कि अपलोड बाधित हुआ था।


वैसे यह कड़ाई से बोल रहा है, क्योंकि 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) नहीं करेंगे। ऐसे मामले में, आपको 0 में मिलेगा a->size


अगर क्लाइंट ने अपलोड को रद्द कर दिया था (रिमोट फाइल को साफ किए बिना, उदाहरण के लिए, जब sftpमारा गया हो), तो आप इसे "मजबूर" उपसर्ग से "बंद" रिकॉर्ड करने में सक्षम होंगे:

मजबूर करीब "/data/README.md" बाइट्स 0 लिखा 5366


1
वाह, आपने winSCP बनाया ?? बड़ा अप यार। उत्तर के लिए धन्यवाद, मैं ऐसा करूँगा।
सुरजिकाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.