स्थानीय निर्देशिका X से दूरस्थ निर्देशिका Y में फ़ाइल स्थानांतरित करने के लिए scp का उपयोग करें


99

मैंने इंटरनेट पर यहां और विभिन्न "scp उपयोग" ट्यूटोरियल के अन्य प्रश्नों पर एक नज़र डाली, लेकिन मैं गलत क्या कर सकता हूं।

मैं लिनक्स मिंट का उपयोग कर रहा हूं और मैं यह पता लगाने की कोशिश कर रहा हूं कि scp कैसे काम करता है।

मैंने डायरेक्टरी / होम / नाम / डीआईआर / में एक फ़ाइल file.ext (अपने कंप्यूटर पर) की है

मैं ssh का उपयोग कर एक दूरस्थ मशीन से जुड़ता हूं , जैसे:

ssh -p 2222 username@domain

यह मुझसे पासवर्ड और शेल प्रदर्शित करने के लिए कहता है:

username@domain ~ $

अब, यदि मैं कमांड जारी करता हूं (इससे पहले कि मैं एसएसएच चलाता हूं तो मैं स्थानीय निर्देशिका / घर / नाम / डीआईआर में था ):

scp -r -P 2222 file.ext username@domain 

आउटपुट है:

cp: cannot stat ‘file.ext’: No such file or directory

एक ही परिणाम अगर file.ext के बजाय मैं पूरा रास्ता लिखता हूं

scp -r -P 2222 /home/name/dir/file.ext username@domain 

इसके अलावा, सर्वर व्यवस्थापक ने मुझे बताया कि मैं फ़ाइल को अपने दूरस्थ होम निर्देशिका (रूट के बजाय) पर अपलोड करूंगा, जैसे:

scp -r -P 2222 file.ext username@domain:~/

लेकिन जब मैं इसे करता हूं और "एंटर" दबाता हूं तो कुछ भी नहीं होता है, जैसे कि शेल आगे इनपुट के लिए इंतजार कर रहा था।

मेरी समस्याओं का सारांश:

  • cp: ऐसी कोई फ़ाइल या निर्देशिका नहीं
  • खोल ~ पर "अटक"

कोई सुझाव?


यह थोड़ा अस्पष्ट है कि क्या आपकी समस्या केवल गलत मशीन पर होने से संबंधित है ... क्या आप उस होस्ट के साथ प्रत्येक कमांड को उपसर्ग कर सकते हैं जिस पर आप चल रहे हैं? उदाहरण के लिए localuser@machineA: ssh -p 2222 username@domain(यह इंगित करने के लिए कि आप मशीन पर स्थानीय कमांडर के रूप में ssh कमांड चला रहे हैं)
umläute

1
उपयोग करते समय scp, रिमोट साइड में हमेशा कोलन (जैसे remotehost:/tmp) होता है, अन्यथा यह सिर्फ एक साधारण कॉपी scp /tmp/foo.txt example.comकरेगा ( /tmp/foo.txtस्थानीय फ़ाइल में कॉपी करेगा example.com)
umläute

हटाने -r, ध्वज के रूप में यह (यह करने के लिए प्रयोग किया जाता है एकल फ़ाइलों की प्रतिलिपि बनाने के लिए की जरूरत नहीं है रिकर्सिवली निर्देशिका कॉपी)
umläute

क्या आप sshe सत्र के अंदर scp कमांड जारी कर रहे हैं ? यदि आप स्थानीय मशीन पर हैं तो यह समझ में आएगा।
एलेक्सिस

जवाबों:


119

आपको scpस्थानीय मशीन से कमांड को चलाने की आवश्यकता है , रिमोट पर नहीं। आपको इसकी बिल्कुल आवश्यकता नहीं है ssh:

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 

आपको इसकी भी आवश्यकता नहीं है -r:

 -r      Recursively copy entire directories.  

यदि आप पहले से ही दूरस्थ मशीन में लॉग इन हैं और अपने स्थानीय से कॉपी करना चाहते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आपकी स्थानीय मशीन इंटरनेट के माध्यम से सुलभ है और sshसेट की गई है। मुझे नहीं लगता कि यह वही है जो आप हैं, लेकिन अगर यह है, तो इसे रिमोट से चलाएं:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/

1
धन्यवाद। समस्या यह थी कि मैं ssh सत्र के अंदर scp चलाने की कोशिश कर रहा था। अब यह काम कर रहा है!
ड्रैगनमनल

28

मैं दूरस्थ और स्थानीय मशीन के बीच अप / डाउन लोड फ़ाइल के दो तरीके प्रदान करता हूं (मैं मैक एयर का उपयोग करता हूं):

इस मामले में, मैं स्थानीय और दूरस्थ के बीच "11.jpeg" को ऊपर / नीचे करना चाहता हूं:

1।

स्थानीय डीआईआर के लिए सेवा पर फ़ाइलों की प्रतिलिपि बनाएँ: आपको इस कमांड का संचालन करने के लिए स्थानीय बैश टर्मिनल में होना चाहिए, न कि जब आप ssh में हों!

scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/  

दूरस्थ सेवा में स्थानीय dir में फ़ाइलों की प्रतिलिपि बनाएँ: आपको स्थानीय bash टर्मिनल में भी होना चाहिए

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. जब आप SSH में लॉग इन कर रहे हों तो इसी इरादे को प्राप्त करने के लिए , आपको पहले "सिस्टम प्राथमिकताएँ> साझाकरण> दूरस्थ लॉग इन> सभी उपयोगकर्ताओं को सेट करना होगा (मुझे यकीन नहीं है कि आपको" सभी उपयोगकर्ताओं "के लिए सेट करना होगा, लेकिन यह इस स्थिति में काम करता है ) "मैक आपको बताएगा" दूर से इस कंप्यूटर में लॉग इन करने के लिए, टाइप करें: ssh username @ xxxxxx, फिर नीचे दिए गए कमांड में टाइप करें:

    scp उपयोगकर्ता नाम @ डोमेन: /home/xxx/xxx/11.jpeg उपयोगकर्ता नाम @ xxxxxx: / उपयोगकर्ता / उपयोगकर्ता नाम / डेस्कटॉप /

ऊपर यह कमांड दूरस्थ से स्थानीय में फ़ाइल डाउनलोड करने के लिए है, जब आप ssh में लॉग इन कर रहे हैं, तो जब आप फ़ाइल अपलोड करना चाहते हैं, तो दो मार्ग बदलें।


अंत में, मुझे लगता है कि
फ़ाइलज़िला

5

यदि आप रिमोट मशीन पर इस scp कमांड को चला रहे हैं, तो यह file.ext"लोकल" फ़ाइल के रूप में लग रही है, यानी रिमोट मशीन पर।

रिमोट मशीन से स्थानीय एक के लिए एक फ़ाइल की प्रतिलिपि करने के लिए, का उपयोग करें scp -P 2222 username@domain:dir/file.ext localdir(यह मानते हुए कि file.extमें है ~/dirदूरस्थ कंप्यूटर पर, अपने उदाहरण के रूप में)। यदि आप scpरिमोट मशीन पर चलते हैं, तो "स्थानीय" और "रिमोट" को उल्टा कर दें।


1
ओपी स्थानीय से लेकर दूरदराज तक कॉपी करना चाहता है, ओपी का शीर्षक देखें।
terdon

ओह, मुझे लगता है कि तुम सही हो। लेकिन वह स्पष्ट रूप से इसे पीछे की ओर कर रहा है ...
एलेक्सिस

3

scpकमांड का उपयोग करें

यदि आप किसी फ़ोल्डर को स्थानांतरित करना चाहते हैं, तो बस zipपहले, हम unzipइसे बाद में कर सकते हैं ।

अपने कंप्यूटर से, इसे चलाएं:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

यहां, rootआपका खाता है, और 10.145.198.100दूरस्थ सर्वर का IP पता है। हम कॉपी करने के लिए जा रहे हैं the_fileकरने के लिए ~/दूरदराज के फ़ोल्डर।

अनज़िप फ़ाइल:

$ unzip the_zip_file.zip -d destination_folder

rootरिमोट मशीन पर भी SSH की पहुंच क्यों होगी ? यह बहुत असुरक्षित है। एक साधारण उपयोग करने के लिए बेहतर है और फिर sudoउस मशीन पर जो भी रूट करना है।
कुसलानंद

1

बस एक छोटा सा योगदान, शायद यह मेरे जैसे शुरुआती लोगों की मदद कर सकता है: दूरस्थ निर्देशिका का मार्ग इस तरह लिखा जाना चाहिए: username@domain:~/remote_directory

मैं यहाँ जो बात उजागर करना चाहता हूँ वह यह है कि हमें हमेशा इसे जोड़ना चाहिए :~/


0

समाधान से फ़ाइलों की प्रतिलिपि बनाने Linux clientके लिएLinux Server

  1. जाँच करें कि sshdक्या आपके सर्वर पर चल रहा है: ps aux | grep sshd

  2. यदि https://www.tecmint.com/install-openssh-server-in-linux/OpenSSH का उपयोग करके इंस्टॉल नहीं किया गया हैsudo apt-get install openssh-server openssh-client

  3. अपने सर्वर को पुनरारंभ करें और सत्यापित करें कि sshdउपयोग कर रहा है ps aux | grep sshd

  4. यदि आपको आवश्यकता है तो आप अपनी /etc/ssh/sshd_configफ़ाइल को कॉन्फ़िगर कर सकते हैं , लेकिन इसके लिए आवश्यक नहीं है सरल कॉन्फ़िगरेशन

  5. सत्यापित करें कि पोर्ट खुले हैं netcat nc -v -z 127.0.0.1 22

  6. Linuxक्लाइंट से क्लाइंट की फ़ाइलों को कॉपी करने के लिए Linuxनिम्नानुसार scp का उपयोग करें scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. यह सत्यापित करने के लिए कि फ़ाइल का उपयोग कॉपी किया गया है ssh username@10.22.33.45और अपना पासवर्ड प्रदान करें।

Linux client`विंडोज से फ़ाइलों को कॉपी करने का समाधान

  1. विंडोज पर SSH सर्वर चलाने के लिए कई क्लाइंट हैं जैसे कि MS से OpenSSH

    MobaSSH

    Bitvise SSH सर्वर

  2. उपरोक्त सर्वरों में से एक को स्थापित करें और सुनिश्चित करें कि पोर्ट 22 का उपयोग करके खुला है

    netsh advfirewall फ़ायरवॉल नियम का नाम जोड़ें = "SSH पोर्ट 22" dir = एक्शन में = प्रोटोकॉल की अनुमति दें = UDP + / 22

    netsh advfirewall फ़ायरवॉल नियम का नाम जोड़ें = "SSH पोर्ट 22" dir = आउट एक्शन = प्रोटोकॉल की अनुमति दें = UDP + 3

    netsh advfirewall फ़ायरवॉल नियम नाम जोड़ें = "SSH पोर्ट 22" dir = एक्शन में = प्रोटोकॉल की अनुमति दें = टीसीपी लोकल = 22

    netsh advfirewall फ़ायरवॉल नियम नाम जोड़ें = "SSH पोर्ट 22" dir = आउट एक्शन = प्रोटोकॉल की अनुमति दें = टीसीपी लोकल = 22

    netsh advfirewall ने allprofiles स्टेट ऑफ को सेट किया

  3. इन सर्वरों की तुलना:

    Bitvise SSH सर्वर

    1. देशी cmdप्रांप्ट के लगभग करीब , powershellशीघ्र, स्वत: पूर्णता प्रदान करता है

    2. यदि आपको उन्नत उपयोग की आवश्यकता है, तो अनुकूलन के लिए अतिरिक्त क्षमताएं प्रदान करता है

    3. साधारण आवश्यकताओं के लिए उपयोगकर्ता अनुकूलन 0. मैं 2 मिनट के भीतर उस पर शुरू हो गया, बहुत समय बिताने MobaSSHऔर OpenSSHकाम करने की कोशिश करने के बाद ।

    4. स्‍कैप के उपयोग से फाइलों को कॉपी करने के लिए: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. व्यक्तिगत उपयोग के लिए नि: शुल्क, पेशेवर उपयोग के लिए $ 99। इतने सारे फीचर्स और बेहतरीन इंटीग्रेशन की वजह से इसकी कीमत अच्छी है

    MobaSSH:

    1. खिड़कियों पर एक linux खोल जहां साधारण linux जैसे आदेश प्रदान करता है ls, cp, findआदि काम करते हैं, के समानMINGW64

    2. आप उपयोग कर सकते हैं cmdऔर powershellटाइपिंग द्वारा सीधे cmdया powershell

    3. यूनिकोड समर्थन खराब है। एनकोडिंग सही नहीं है। उदाहरण के लिए यदि आप Pythonव्याख्याकार को शुरू करने की कोशिश करते हैं, तो यह दुर्घटनाग्रस्त हो जाएगा। आपको मैन्युअल रूप से एन्कोडिंग को बदलने की आवश्यकता होगी ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 और फिर स्टार्टअप पायथन प्रॉम्प्ट

    4. MobaSSH के बारे में महान बात यह है कि इसमें एक बहुत ही सरल उपयोगकर्ता-इंटरफ़ेस है, और scpऔर sshअच्छी तरह से एकीकृत है। तो सरल उपयोग के मामलों के लिए काम करेंगे

    5. Linuxक्लाइंट से फ़ाइलों को Windowsचलाने वाले सर्वर में कॉपी करने के लिए MobaSSH: इसका उपयोग करें scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md क्योंकि MobaSSHयह आधारित है cygwinऔर इसके ड्राइव को उसी तरह मैप किया जाता है जैसे cygwin-एस ड्राइव को मैप किया जाता है।

    Https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ से स्थापित OpenSSHv6.7 के साथ Microsoft से VMs का उपयोग करें , OpenSSHv6.7 पहले से स्थापित है।

    1. इसकी बहुत छोटी गाड़ी है, और आपको इसे भारी अनुकूलित करने की आवश्यकता होगी।

    2. कमांड काम पूरा नहीं करता है

    3. जब आप टर्मिनल पर कर्सर ले जा रहे हों तो यह खाली स्थान छोड़ देगा

    4. अजगर काम नहीं करता है

    5. OpenSSH के बाद के संस्करण, इस पर सुधार कर सकते हैं। इसके अलावा एमएस ओपनएसएसएच को https://developer.microsoft.com/en-us/microsoft-edge/tools/vs/ के माध्यम से उपलब्ध कराता है।Optional Features


-1

यदि आप OSX पर होते हैं ...

जब मैंने इसे यूजरनेम @ लोकल / / file_directory के साथ चलाने की कोशिश की ...

मुझे निम्नलिखित त्रुटि मिली:

ssh: local: node name or service name not known

उपाय

मेरे मैक पर मुझे स्थानीय सेटअप करने के लिए निम्न कार्य करना था ssh:

'सिस्टम वरीयताएँ' -> 'इंटरनेट और नेटवर्किंग' -> 'साझाकरण' -> सक्षम 'रिमोट लॉगिन'

इसके बाद यूजरनेम @ आईपी एड्रेस दिया गया।


-1

मैक पर आज मुझे यही समस्या थी।

निम्न कमांड टाइप करें:

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