scp काम नहीं करता है, लेकिन ssh करता है


56

अगर मैं सर्वर के माध्यम से कुछ भेजना चाहता हूं:

$ scp file server:
                   _____  _____  _____
$

, तो तीन लाइनें मुद्रित होती हैं और फ़ाइल की प्रतिलिपि नहीं बनाई जाती है। हालांकि मैं बिना किसी समस्या के सर्वर के माध्यम से कनेक्ट कर सकता हूं:

$ ssh server

Scp काम कैसे करे?


अधिक जानकारी प्रदान करें जैसे कि ऑपरेटिंग सिस्टम, ssh config फाइल, आदि
qroberts

और ये तीन रेखाएँ क्या हैं जो मुद्रित हैं?
jjlin

सामान्य स्थिति में, जब आप चलाते हैं scp file server:("सर्वर" एक मान्य होस्टनाम है), फ़ाइल आपके खाता निर्देशिका में कॉपी की जाती है।
dan_linder 19

3
क्या आप आउटपुट प्रदान कर सकते हैं जब आप "scp -v फ़ाइल सर्वर:" चलाते हैं।
dan_linder 19

आप scpसर्वर पर एक अलग स्थान पर प्रयास कर सकते हैं , फिर cpया mvउसके बादssh
जेसी डब्ल्यू कॉलिन्स

जवाबों:


68

इस प्रकार के व्यवहार का एक संभावित कारण सर्वर पर लॉगिन प्रक्रिया के दौरान कोई संदेश प्रिंट आउट होना है। एसपीपी क्लाइंट और सर्वर के बीच पूरी तरह से पारदर्शी एन्क्रिप्टेड सुरंग प्रदान करने के लिए ssh पर निर्भर करता है।

सर्वर पर सभी लॉगिन स्क्रिप्ट की जाँच करें, और एक अलग उपयोगकर्ता का उपयोग करने का भी प्रयास करें। त्रुटि के स्रोत की पहचान करने का एक अन्य तरीका यह है कि आदेश में -v का उपयोग करें, लेनदेन की प्रगति का पता लगाने के लिए, और देखें कि वह कहाँ विफल हो गया है। यदि आवश्यक हो, तो आप वर्बोसिटी बढ़ाने के लिए -vvv तक का उपयोग कर सकते हैं। InChargeOfIT द्वारा पोस्ट में सूचीबद्ध के रूप में scp के विभिन्न रूपों की जाँच भी शिक्षाप्रद हो सकती है।

एससीपी के तहत एससीपी, एसएन का उपयोग करके एक सुरंग स्थापित करता है, और फिर उस सुरंग के ऊपर फ़ाइल को स्थानांतरित करता है, फ़ाइल को पकड़ने के लिए दूर के छोर पर एक ssh कमांड के साथ जैसे वह आता है। यह निम्नलिखित आदेशों के साथ स्वामित्व और निर्माण समय को संरक्षित करने वाली निर्देशिका संरचना की प्रतिलिपि बनाने के लिए टार और ssh के उपयोग द्वारा चित्रित किया गया है:

  tar czf - ./* | ssh jf@otherserver.com tar xzf - -C ~/saved_tree

इसे भेजने के लिए, और

ssh jf@otherserver.com "tar czf - ~/saved_tree" | tar xzvf - -C ./

इसे वापस पाने के लिए।


यह वास्तव में मददगार है
मेपल

क्या .bashrc के भीतर scp का पता लगाना संभव है? ताकि आप जांच कर सकें और केवल आउटपुट प्रिंट कर सकें जब शेल एक स्कैप एक नहीं है?
अलेक्जेंड्रोस

उपयोगकर्ता को विशेषाधिकार स्तर 15 भी होना चाहिए। यदि उपयोगकर्ता विशेषाधिकार स्तर 15 नहीं है, तो एएसए प्रमाणीकरण के बाद कनेक्शन को बंद कर देगा, जिसमें कोई त्रुटि संदेश नहीं होगा, जो विशेषाधिकार का मुद्दा होगा। इसके अलावा, सिर्फ इसलिए कि आपका उपयोगकर्ता टाइप कर सकता है enableऔर एक पासवर्ड दर्ज कर सकता है इसका मतलब यह नहीं है कि वे निजी हैं। यदि आपको "विशेषाधिकार 15" कहीं दिखाई नहीं देता है, show run | inc USERNAMEतो वे स्केप नहीं कर पाएंगे।
टायलर अबीर

मैंने मूल रूप से अपने .bashrc को रिमोट सर्वर पर "zsh" हटा दिया और scp ने काम करना शुरू कर दिया!
गीक

यदि आप शेल चर (जैसे export SHELL=/bin/zsh) में परिवर्तन करते हैं तो यह भी टूट जाता है ~/.bashrc। इसका उपयोग कभी-कभी अनुपस्थिति में किया जा रहा है chsh
सूयूहेगी

57

लक्षित उपयोगकर्ता .bashrc या समकक्ष फ़ाइल की जाँच करें। ~ / .bashrc गैर-संवादात्मक लॉगिन के लिए sourced है। यदि कोई इको या कमांड है जो कुछ भी आउटपुट करता है, तो यह एससीपी प्रोटोकॉल को तोड़ देगा।


10
यूरेका! यह मेरी समस्या थी क्योंकि मेरे पास एक भाग्य था | मेरे रिमोट .bashrc में प्रत्येक लॉगिन पर गाय। अब पूरी तरह से काम कर रहा है।
थॉमस ब्राउन

3
यू सर, एक लाइफसेवर हैं। :)
गौरव मंचन

4
यदि आप अभी भी अपना चाहते हैं fortune | cowsay, तो बस इसे .bash_profile में डालें। यह केवल इंटरेक्टिव लॉगिन के लिए है और SCP सत्र के दौरान इसे चालू नहीं किया जाना चाहिए।
स्पूल्सन

मेरी समस्या यह थी कि मैं अपनी एक और फाइल सोर्स कर रहा था .bashrc, जो दूसरी मशीन पर मौजूद नहीं होगी। गैर-संवादात्मक (जो कि मामला है ) को छोड़ने के लिए आप इस उत्तर में तर्क का उपयोग कर सकते हैं । ~/.bashrcscp
वारबकी

15

संपादित करें: क्या आप सकारात्मक हैं जो आप scp कमांड में मान्य पथ में प्रवेश कर रहे हैं? उदाहरण के लिए:

scp test.txt username@remoteserver.com

विफल हो जाएगा (वास्तव में, यह सिर्फ कमांड को प्रिंट करेगा जैसे आप देख रहे हैं)। इस स्थिति में, आपको दूरस्थ सर्वर को एक वैध मार्ग प्रदान करना होगा .. जैसे,scp test.txt username@remoteserver.com:~/

उदाहरण usages:

एक फ़ाइल भेजें:

scp /path/to/local/file yourremoteusername@servername.com:/path/to/remote/directory

एक फ़ाइल प्राप्त करें:

scp yourremoteusername@servername.com:/path/to/remote/file /path/to/local/directory

उदाहरण:

किसी दूरस्थ सर्वर पर मेरे डेस्कटॉप से ​​मेरे होम फ़ोल्डर में एक फ़ाइल भेजें:

scp ~/Desktop/myfile.txt john_doe@10.1.1.10:~/

याद रखें ~अपने घर निर्देशिका के लिए एक शॉर्टकट है ... उदाहरण के लिए, / घर /

वेबरोट में एक फ़ाइल भेजें:

scp ~/Documents/working/index.html john_doe@johndoe.com:/var/www/index.html

इस उदाहरण में, उपयोगकर्ता john_doe को दूरस्थ / var / www निर्देशिका पर विशेषाधिकार लिखने की आवश्यकता होगी।


2
आप सवाल का जवाब नहीं दे रहे हैं। ओपी द्वारा दी गई कमांडलाइन काफी हद तक ठीक लगती है, दिलचस्प हिस्सा यह है ------... आपका कोई भी उदाहरण इससे संबंधित नहीं है।
अकीरा

@किरा शायद, शायद नहीं। मान्य पथ प्रदान नहीं करने से scp कमांड विफल हो जाएगी .. जैसे, scp somefile user@host.com:इसके अलावा, दूरस्थ निर्देशिका पर सही अनुमतियाँ नहीं होने से भी समस्याएँ उत्पन्न होंगी। इसे थोड़ा स्पष्ट करने के लिए मेरे जवाब का
संपादन किया

1
आपका कोई भी उदाहरण "फ़ाइल मौजूद नहीं है", आपका कोई भी उदाहरण कवर नहीं करता "सर्वर साइड पर अनुमतियाँ गलत हैं" ...
akira

4

कुछ मेजबानों पर वे गलत तरीके .bash_profileसे गैर-संवादात्मक लॉगिन जैसे एसपीपी के लिए स्रोत होते हैं । टर्मिनल पर मुद्रित होने वाले संदेश संभवतः scpसही ढंग से कार्य नहीं कर सकते हैं । यदि आप में संदेश हैं तो .bash_profileयह कारण हो सकता है।

अभी भी आपके लॉगिन संदेश, बैनर, आदि इंटरएक्टिव लॉगिन पर प्रदर्शित होते हैं और फिर भी scpआपकी .bash_profileफ़ाइल में प्रिंट होने वाले किसी भी संदेश से पहले एक गैर-इंटरैक्टिव लॉगिन के माध्यम से उपयोग करने में सक्षम हो सकते हैं ।

# ********** If not running interactively, don't do anything more! ***********

[ -z "$PS1" ] && return

वैकल्पिक कोड है:

[[ $- == *i* ]] || return

और दूसरा वैकल्पिक कोड:

case $- in
    *i*) ;;
      *) return;;
esac

मेरा मानना ​​है कि पहले वैकल्पिक कोड का लंबा संस्करण है। मैंने कुछ मेजबानों पर पाया है कि पहला कोड सही तरीके से काम नहीं करता है लेकिन दूसरा करता है।

एक गैर-संवादात्मक scp लॉगिन के दौरान यह .bash_profile के आगे निष्पादन को समाप्त कर देगा और scp को काम करने की अनुमति देगा, लेकिन जब आप ssh के माध्यम से लॉगिन करते हैं तो आपके लॉगिन संदेश प्रदर्शित होंगे।

नोट: इसका उपयोग आपकी .bashrcफ़ाइल में भी किया जा सकता है यदि आप इसे .bash_profile($ PATH से) स्रोत करते हैं, तो इसका केवल एक हिस्सा गैर-संवादात्मक लॉगिन के दौरान खट्टा है।


धन्यवाद एक आकर्षण की तरह ........ काम करता है
somethingSomething

0

यह सीधे सवाल का जवाब नहीं देता है, लेकिन मेरे जैसे लोगों के लिए मददगार हो सकता है, जब 2 दूरस्थ मेजबानों के बीच फ़ाइलों को स्थानांतरित करने के लिए एक फ्रीजिंग स्कैप के साथ समाधान की तलाश की जाती है।

अगर scpssh के संदेशों की वजह से हैंग हो जाता है, तो यह उन्हें सर्पोट करने में मदद कर सकता है:

scp -o "StrictHostKeyChecking no"

और / या

scp -B

Scp आदमी से:

-B बैच मोड का चयन करता है (पासवर्ड या पासफ़्रेज़ के लिए पूछना रोकता है)।

-o ssh_option प्रारूप में ssh के विकल्पों को पास करने के लिए इस्तेमाल किया जा सकता है, कोई अलग से कमांड-लाइन ध्वज नहीं है। नीचे सूचीबद्ध विकल्पों और उनके संभावित मूल्यों के पूर्ण विवरण के लिए, ssh_config (5) देखें।

मेरे मामले में मदद करने के लिए लग रहा था, लेकिन पूरे मामले को हल नहीं किया। रिमोट से रिमोट में ट्रांसफर होने पर हमें यह पता नहीं चल पाता कि scp हैंग क्यों होता है। यह फ़ाइल के बीच में लटका हुआ है। 9 बार काम किया, प्रयास संख्या 10 नहीं किया। हमें संदेह था कि यह तब लटक सकता है जब हमारे वीपीएन कनेक्शन को एक पल के लिए ट्रैफ़िक स्पाइक मिलता है और फिर स्केप ठीक नहीं होता है। यह वास्तव में हमेशा के लिए लटका रहता है और त्रुटि संदेश भी नहीं देता है।

हालाँकि, मैंने हार मान ली और sftp पर आ गया। यह यथोचित रूप से तेज़ है, क्योंकि यह दूरस्थ मेजबानों के बीच एक सीधा संबंध का उपयोग करता है। आपको सक्षम करना है

Host example.com
    AgentForward yes

मशीन की ~ / .shh / config फाइल जो स्क्रिप्ट चला रही है। बेशक यह केवल एक समाधान है यदि दूरस्थ मशीनें आपके विश्वसनीय नेटवर्क के भीतर हैं।


0

मैं बुला रहा था exec /bin/bashमें .cshrc

इसे हटाने से मेरे लिए समस्या हल हो गई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.