SFTP पर scp: ऐसे रिमोट पाथ लिखना जो वास्तव में हल हों
आधुनिक scp SFTP से स्थानांतरित करता है, इसलिए टिल्डे विस्तार और वाइल्डकार्ड अलग व्यवहार करते हैं। स्पष्ट सर्वर पाथ लिखें और प्रोटोकॉल जानबूझकर चुनें।
वर्षों से स्क्रिप्ट में चलने वाला scp कमांड मौजूदा क्लाइंट पर पाथ त्रुटि से विफल हो सकता है जिसका टनल से कोई संबंध नहीं है। VPN ने बाइट्स पहुँचाए; क्लाइंट ने सर्वर से ऐसा नाम माँगा जिसे सर्वर हल नहीं कर सका। मौजूदा OpenSSH scp डिफ़ॉल्ट रूप से SFTP से स्थानांतरित करता है, और SFTP पुराने प्रोटोकॉल की तरह शेल-शैली विस्तार नहीं करता। अपने स्वयं के खाते से कमांड को बाहर की ओर देखने पर पता चलता है कि पाथ वास्तव में कहाँ व्याख्यायित होता है।
खाते से शुरू करें, फिर उस निर्देशिका से जिसमें वह लिख सकता है
कोलन दो नामस्थानों को अलग करता है, और केवल बायाँ भाग उस मशीन का है जिस पर आप टाइप कर रहे हैं। उसके बाद सब कुछ सर्वर हल करता है, उस खाते के अंतर्गत जिससे आपने प्रमाणीकरण किया, उस फ़ाइलसिस्टम दृश्य के भीतर जो उस खाते के पास है। कमांड बनाने से पहले दोनों की पुष्टि करें, क्योंकि व्यवस्थापक के लिए सही पाथ स्थानांतरण उपयोगकर्ता के लिए स्वतः सही नहीं होता। यही अंतर नेटवर्क विफलताओं जैसी दिखने वाली अधिकांश अनुमति त्रुटियों का स्रोत है।
सर्वर से उसका अपना दृश्य पूछें: ssh [email protected] pwd और ssh [email protected] ls -ld /srv/archive। यदि दूसरा कमांड अनुमति अस्वीकृत बताता है, तो टनल ठीक है और पाथ उस खाते के लिए अनुपयोगी है। स्थानांतरण आगे बढ़ सके इसके लिए अनुमतियाँ बढ़ाने के बजाय स्वामित्व ठीक करें या दूसरा गंतव्य चुनें।
प्रतिबंधित SFTP कॉन्फ़िगरेशन chroot को फ़ाइलसिस्टम की जड़ के रूप में प्रस्तुत कर सकता है। उस दृश्य के भीतर पूर्ण पाथ chroot के भीतर पूर्ण है, जो वही स्थान नहीं है जो व्यवस्थापक होस्ट पर देखता है।
कोलन के दोनों पक्षों को स्पष्ट रूप से नाम दें
अपलोड को रिमोट फ़ाइल नाम बताना चाहिए, यह मानने के बजाय कि स्थानीय आधार नाम दूसरी ओर स्वीकार्य होगा।
scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csvडाउनलोड को ठीक उसी कारण से स्थानीय गंतव्य बताना चाहिए। दोनों नामस्थान स्वतंत्र हैं, और जो स्क्रिप्ट उनके मेल खाने को मानती है वह पहली बार तब टूटती है जब रिमोट ट्री अलग लेआउट का उपयोग करता है।
scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csvबनाए रखी जाने वाली स्क्रिप्ट में ~otheruser से बचें। दूसरे खाते की होम निर्देशिका का विस्तार रिमोट-शेल सुविधा थी, और SFTP सर्वर उसका अनुकरण करने वाला एक्सटेंशन लागू नहीं कर सकता। वह पूर्ण पाथ लिखें जिसे खाता वास्तव में खोल सकता है, और सर्वर पर शेल के लिए लिखी गई उद्धरण परतों की नकल करने के बजाय रिक्त स्थान वाले स्थानीय पाथ को उद्धरणों में रखें।
जानें कि आपका scp वास्तव में कौन-सा प्रोटोकॉल उपयोग करता है
OpenSSH 9.0 से क्लाइंट डिफ़ॉल्ट रूप से SFTP का उपयोग करता है, और वितरण उस व्यवहार को अपने कार्यक्रम के अनुसार अपनाते या बैकपोर्ट करते हैं। संस्करण स्ट्रिंग बताती है कि क्लाइंट का क्या इरादा है, पर विक्रेता का बिल्ड upstream से भिन्न हो सकता है, इसलिए जो क्लाइंट आप वास्तव में चलाते हैं उसे जाँचें: ssh -V।
दोनों प्रोटोकॉल नामों को अलग तरह से हल करते हैं। पुराना SCP रिमोट उपयोगकर्ता शेल से पाथ का विस्तार करने को कहता है, इसलिए वाइल्डकार्ड और टिल्डे उस शेल द्वारा उसके अपने नियमों से संभाले जाते हैं। SFTP इसके बजाय फ़ाइल-स्थानांतरण संचालन जारी करता है, इसलिए वाइल्डकार्ड या तो क्लाइंट विस्तारित करता है या बिल्कुल विस्तारित नहीं होता। दोनों SSH के भीतर उसी मशीन तक जाते हैं, इसीलिए एक होस्ट दो क्लाइंट के अधीन अलग व्यवहार कर सकता है।
scp -v वह सबसिस्टम प्रिंट करता है जिसका वह अनुरोध करता है, और sftp सबसिस्टम पंक्ति पुष्टि करती है कि आधुनिक पाथ उपयोग में है। scp -O जहाँ समर्थित और वास्तव में आवश्यक हो वहाँ पुराने प्रोटोकॉल को बाध्य करता है, और अपने स्वयं के उद्धरण नियम साथ लौटाता है। यह VPN विकल्प नहीं है, सर्वर पर कुछ सक्षम करने का तरीका नहीं है, और होस्ट-की जाँच ढीली करने का कारण नहीं है।
स्क्रिप्ट के उस पर निर्भर होने से पहले पाथ की जाँच करें
पाथ समस्या सबसे बुरे समय पर, रात में किसी के न देखे हुए स्वचालित कार्य में सामने आती है। पहले छोटी फ़ाइल और कार्य द्वारा उपयोग किए जाने वाले ठीक उसी खाते से गंतव्य सिद्ध करें, और उस परीक्षण कमांड को कार्य की परिभाषा के पास रखें। यदि परीक्षण को अलग खाता या अलग निर्देशिका चाहिए, तो कार्य को भी चाहिए होगा।
सर्वर पक्ष भी जाँचें। grep -i subsystem /etc/ssh/sshd_config दिखाता है कि SFTP सबसिस्टम कॉन्फ़िगर है या नहीं, और sftp -b /dev/null [email protected] केवल तभी सफलतापूर्वक बाहर निकलता है जब वह सबसिस्टम उत्तर देता है। जो होस्ट SSH लॉगिन स्वीकार करता है पर सबसिस्टम नहीं रखता, वह हर आधुनिक स्थानांतरण में विफल होता है, जबकि लॉगिन परीक्षण में पूरी तरह स्वस्थ दिखता है।
क्लाइंट संस्करण, उपयोग में प्रोटोकॉल और पूर्ण रिमोट पाथ को कार्य नोट्स में दर्ज करें। जब अगला अपग्रेड कोई डिफ़ॉल्ट बदलेगा, तब वही नोट पाँच मिनट के सुधार और अनुमानों से भरी दोपहर के बीच का अंतर है।