SSH/SCP के साथ एक फ़ाइल डाउनलोड करें, इसे इनलाइन टार करें और इसे ओपनएसएल पर पाइप करें

image

मैं एक एसएसएच सर्वर से फ़ाइलों की एक सूची डाउनलोड करना चाहता हूं, फिर इसे किसी प्रकार के कंटेनर (जैसे टार फ़ाइल) में डालना चाहता हूं और अंत में इसे एन्क्रिप्ट करना चाहता हूं (उदाहरण के लिए ओपनएसएल के साथ)।

इसे एक में डालने का मुद्दा संग्रह का उद्देश्य मूल फ़ाइल नाम रखना है, जबकि अंतिम एन्क्रिप्टेड फ़ाइल का एक अलग नाम होगा।

इसलिए मैं कुछ इस तरह का प्रयास कर रहा हूं:

यह काम नहीं करता है; ऐसा प्रतीत होता है कि एससीपी अपेक्षा के अनुरूप फ़ाइल को टार में पाइप नहीं कर रहा है, और इसलिए टार संग्रह में डाउनलोड की गई फ़ाइल शामिल नहीं है।

क्या इसे काम पर लाने का कोई तरीका है?

एससीपी कमांड फ़ाइलों की प्रतिलिपि बनाता है, यह stdin या stdout की परवाह नहीं करता है। इसके बजाय, दूरस्थ होस्ट पर टार निष्पादित करें, और परिणामी स्ट्रीम को एन्क्रिप्ट करें:

यदि $filepath / से शुरू होता है तो सावधान रहें क्योंकि पूर्ण पथों के साथ एक संग्रह बनाने का प्रयास करना (अब) बुरा अभ्यास माना जाता है। यदि यह मामला है तो आपको निर्देशिका को / में बदलने के लिए -C ध्वज का उपयोग करने और फिर एक सापेक्ष पथ का उपयोग करने पर विचार करना चाहिए। उदाहरण के लिए, इसके बजाय:

इसका उपयोग करें:

या शायद

इसके अलावा, आम तौर पर किसी डेटा स्ट्रीम को एन्क्रिप्ट करने से पहले उसे संपीड़ित करना बेहतर माना जाता है। इस मामले में (gzip मानकर) आप z फ़्लैग को टार में इस तरह जोड़ सकते हैं:

यदि आपके पास एक मानक गैर-जीएनयू टार कमांड है, तो ये वेरिएंट काम करेंगे। लाइन gzip | को हटा दें यदि आप संपीड़न नहीं चाहते हैं:

"-O" विकल्प के साथ scp चलाने का प्रयास करें:

scp के आधुनिक संस्करण फ़ाइल स्थानांतरण करने के लिए हुड के नीचे SFTP प्रोटोकॉल का उपयोग करते हैं, और SFTP समर्थन स्पष्ट रूप से फ़ाइल संचालन करने का प्रयास करता है जो पाइप पर विफल हो जाता है। "-O" एससीपी को लीगेसी एससीपी प्रोटोकॉल का उपयोग करने के लिए कहता है, जिसे /dev/stdout पर लिखने का समर्थन करना चाहिए। मेरे सिस्टम पर एक त्वरित डेमो:

टार समर्थन करता है - संग्रह के लिए stdin/out को पढ़ने या लिखने के लिए, लेकिन किसी फ़ाइल को संग्रहीत/पुनर्स्थापित/सूचीबद्ध करने के लिए नहीं। मैं दूसरों के बारे में नहीं जानता, लेकिन मेरे उबंटू (जीएनयू टार के साथ) एससीपी ... /dev/stdout | tar c[v]h /dev/stdin | ... काम करता है - या क्रिस डेविस के अनुसार चेतावनी से बचने के लिए -C/dev/stdin, या यहां तक ​​कि -C/dev stdin। बेशक यह संग्रह में वास्तविक फ़ाइल नाम को रिकॉर्ड नहीं कर सकता है, इसलिए आपको निकालते समय सावधान रहने की आवश्यकता होगी, हालांकि -C/dev stdin इसे थोड़ा आसान/सुरक्षित बनाता है, और निश्चित रूप से यह मॉडटाइम जैसे अन्य मेटाडेटा को संरक्षित नहीं करता है , अनुमतियाँ, और स्वामी - तो वास्तव में इसे टार बनाने का क्या मतलब है?

Ask AI
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 #23 #24 #25 #26 #27 #28 #29 #30 #31 #32 #33 #34 #35 #36 #37 #38 #39 #40 #41 #42 #43 #44 #45 #46 #47 #48 #49 #50 #51 #52 #53 #54 #55 #56 #57 #58 #59 #60 #61 #62 #63 #64 #65 #66 #67 #68 #69 #70