डाउनलोड के लिए चयनित फ़ाइल और निर्देशिकाओं के साथ एससीपी कमांड प्रत्येक नई फ़ाइल या निर्देशिका के लिए पासवर्ड मांगता है


9

मेरे फेडोरा 20 सिस्टम पर मैं एससीपी का उपयोग करता हूं, और यह दूसरी बार है जब मैं इस कमांड को चलाता हूं:

scp -r -P PORT user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/

यह मुझसे प्रत्येक फ़ाइल / निर्देशिका के लिए पासवर्ड मांगता है जो इसे स्थानांतरित करता है।

user@host's password: "password here"

सवाल:

यहां क्या हो रहा है?

क्या यह सामान्य है, मुझे लगता है कि यह बहुत अजीब व्यवहार है?

जवाबों:


13

आपके स्थानीय शेल (शायद बैश) का विस्तार हो रहा है

user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4}

में:

user@host:/home/user/something/file1 user@host:/home/user/something/folder1 user@host:/home/user/something/folder2 user@host:/home/user/something/folder3 user@host:/home/user/something/folder4

इसके बजाय, आप कर सकते हैं:

scp -r -P PORT user@host:"/home/user/something/file1 /home/user/something/folder1 /home/user/something/folder2 /home/user/something/folder3 /home/user/something/folder4" folder/folder2/

या, यदि आपको पता है कि दूरस्थ छोर पर उपयोगकर्ता का लॉगिन शेल बैश है, तो आप ब्रेस विस्तार का भी उपयोग कर सकते हैं:

scp -r -P PORT user@host:"/home/user/something/{file1,folder1,folder2,folder3,folder4}" folder/folder2/

दूरस्थ शेल को स्थानीय शेल के बजाय तर्कों में विभाजित करने के लिए।


5

हां, यह सामान्य है। क्या होता है कि आपका शेल कमांड चलाने से पहले ब्रेसिज़ का विस्तार करता है ताकि आप वास्तव में जो चल रहे हैं वह है

scp -r -P PORT user@host:/home/user/something/file1 \ 
               user@host:/home/user/something/folder1 \ 
               user@host:/home/user/something/folder3 \ 
               user@host:/home/user/something/folder4 folder/folder2

मूल रूप से, scpकई कनेक्शन अनुरोधों को देखता है , इसलिए उनमें से प्रत्येक के लिए एक नया कनेक्शन खोलता है। एक रास्तासबसे सरल तरीका(एक-ऑफ-ऑपरेशन के लिए @geirha द्वारा सुझाए गए उद्धरणों का उपयोग करना) इसे हल करना पासवर्डलेस ssh/ सेट करना है scp:

$ ssh-keygen 
$ ssh-copy-id -p PORT user@host

उन दो आदेशों को एक बार चलाने के बाद (और आवश्यकतानुसार संकेतों का जवाब देते हुए), आप भविष्य के सभी कनेक्शनों के लिए पासवर्ड का उपयोग किए बिना ssh/ scpबिना कर सकेंगे । यह i) वास्तव में अधिक सुरक्षित है और ii) बहुत अधिक सुविधाजनक है।


+1, अच्छा तरीका (बेशक ssh-keygen और ssh-copy-id केवल एक बार बनाया जाना है)। मैं कहूंगा कि यह अधिक सुरक्षित है ... केवल अगर आप यह सुनिश्चित करते हैं कि निजी हिस्सा उस उपयोगकर्ता को छोड़कर किसी के द्वारा "पहुंच योग्य" है ... जो हमेशा आसान नहीं होता है।
ओलिवियर दुलैक

@OlivierDulac तुम्हारा क्या मतलब है? id.rsaहोगा 600डिफ़ॉल्ट रूप से अनुमति और sshयहां तक कि अगर ऐसा नहीं होता है काम नहीं करेगा। इसका मतलब यह है कि यह किसी से भी सुरक्षित है लेकिन rootकुछ भी वास्तव में सुरक्षित नहीं है root, निश्चित रूप से पासवर्ड से नहीं।
terdon

मेरा मतलब केवल इस टिप्पणी को जोड़ना था, ताकि पासवर्डलेस एक्सेस स्थापित करने वाले लोग इस तथ्य को ध्यान में रखें (और खांचे में) कि निजी कुंजी को एक सुरक्षित वातावरण में रहना है और अपठनीय / अनस्टर्ड / आदि है। (यानी, यह इसको इंगित करने का एक सौम्य तरीका है, क्योंकि पूछने वाले उन सभी निहितार्थों को नहीं जान सकते हैं जो साझा करने / निजी कुंजी को एक्सेस करने दे सकते हैं)
ओलिवियर दुलैक

@OlivierDulac आह, काफी निष्पक्ष। मुझे नहीं लगा कि यह ध्यान देने योग्य है क्योंकि 1) का उपयोग करते समय यह स्वचालित रूप से होता है ssh-keygenऔर 2) ssh / scp शिकायत करेगा और पासवर्ड के लिए पूछेगा यदि फ़ाइल किसी और द्वारा पठनीय है। वैसे भी कम से कम लिनक्स पर।
terdon

4

scp बहुत स्मार्ट नहीं है: जब एक ही रिमोट होस्ट से कई कमांड लाइन तर्क दिए जाते हैं, तो यह प्रत्येक तर्क के लिए एक नया कनेक्शन खोलता है।

आप rsyncइसके बजाय का उपयोग कर सकते हैं scp, यह इस तरह से (और अन्य तरीकों से) होशियार है।

rsync -r -e 'ssh -P PORT' user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/

एक अन्य दृष्टिकोण यह है कि एक से scpअधिक फ़ाइलों का वर्णन करने के लिए एक तर्क पारित किया जाए

एक अलग दृष्टिकोण आपके सिस्टम को सेट करना है ताकि आपको हर समय प्रमाणित न करना पड़े। अधिमानतः, कुंजी प्रमाणीकरण सेट करें , जो अधिकांश परिदृश्यों में अधिक सुविधाजनक और अधिक सुरक्षित दोनों है। वैकल्पिक रूप से, या इसके अलावा, कनेक्शन साझाकरण सेट करें , ताकि आपको केवल प्रति सत्र एक बार प्रमाणित करने की आवश्यकता हो। किसी भी स्थिति में, एक उपनाम सेट करें ताकि आपको हर बार उपयोगकर्ता नाम और पोर्ट निर्दिष्ट न करना पड़े। अपने में ~/.ssh/config:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Host nick
HostName real-host-name.example.com
User bob
Port 1234

ssh -Nf nickएक कनेक्शन खोलने के लिए चलाएँ , और फिर सभी बाद के कनेक्शन nickमौजूदा कनेक्शन पर गुल्लक करेंगे। अब आप बस चला सकते हैं

scp -r nick:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.