क्या SSH के माध्यम से एक दूरस्थ कंप्यूटर में मेरी उपनिर्देशिका में फ़ाइल को cp करने के लिए यूनिक्स कमांड का उपयोग करना संभव है?


17

मेरे पास ~/Downloadsमेरे व्यक्तिगत कंप्यूटर पर मेरे उपनिर्देशिका में डाउनलोड की गई सॉफ़्टवेयर फ़ाइलों की एक श्रृंखला है । मैं भी कंप्यूटर का उपयोग करके दूरस्थ रूप से कनेक्ट करने के लिए बैश का उपयोग कर रहा हूं ssh

क्या sshदूरस्थ कंप्यूटर के माध्यम से इस फ़ाइल को स्थानांतरित करना संभव है ?


प्रश्न एक विलक्षण फ़ाइल ( this file) और कई फ़ाइलों ( a series of software files) को संदर्भित करता है , सबसे अच्छा समाधान इस बात पर निर्भर करता है कि क्या आपके पास एकल फ़ाइल या एकाधिक फ़ाइलें हैं।
user2768

जवाबों:


42

आप scpइस उद्देश्य के लिए उपयोग करना चाह सकते हैं । यह SSH प्रोटोकॉल का उपयोग करके फ़ाइलों को स्थानांतरित करने का एक सुरक्षित साधन है।

उदाहरण के लिए, दूरस्थ कंप्यूटर yourfile.txtसे नामित फ़ाइल की प्रतिलिपि बनाने के ~/Downloadsलिए, उपयोग करें:

scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory

आप यहां और उदाहरण देख सकते हैं ।


5
मुझे लगता है rsyncकि अब मैं भी काम कर सकता हूं , इसके बारे में मैं सोचता हूं
ShanZhengYang

1
rsync केवल एक या फ़ाइलों से भरा हाथ के लिए जटिल है ...
पैबेल्स

14
@Pabbels इसके विपरीत, scpइसके साथ ऊपर प्रतिस्थापित करें rsyncऔर इसे ठीक काम करना चाहिए।
8 बिट्ट्री 21

मैं rsyncसब कुछ, यहां तक ​​कि एकल फ़ाइलों के लिए उपयोग करता हूं , क्योंकि यह सरल मामलों में "बस काम करता है" और अन्य मामलों में कहीं अधिक कुशल हो सकता है। या तो उपयोग कर रहे हैं scpया rsyncकुछ भी पहले से ही नहीं संकुचित और / या एन्क्रिप्टेड पर, पर (संपीड़न विकल्प को चालू करने के लिए याद -Cकरने के लिए scp, -zया --compressके लिए rsync)। वास्तव में मैं इसे आदत से चालू करता हूं - यह बहुत दुर्लभ है आप एक ऐसी परिस्थिति पाएंगे जहां यह कभी भी चीजों को धीमा कर देती है (शायद अगर आप एक धीमी गति वाले कम बिजली के उपकरण का उपयोग कर रहे हैं जैसे कि आरपीआई की तरह सीमित सीपीआई शक्ति)।
डेविड स्पिललेट

37

हालांकि इसके scpलिए स्पष्ट रूप से सही उपकरण है, अगर किसी कारण से आप इसका उपयोग नहीं कर सकते हैं तो आप अपने स्थानीय मशीन से कॉपी करने के लिए निम्न की तरह कुछ कर सकते हैं, कहते हैं, दूरस्थ मशीन के लिए एक निर्देशिका संरचना:

tar -c . | ssh <remote> tar -x

यह होगा tarस्थानीय मशीन पर वर्तमान निर्देशिका, और लिखने कि tarकरने के लिए stdoutजो तब एक को पहुंचाया हो जाएगा sshआदेश जहां यह एक दूरस्थ कमांड निष्पादित करेंगे फ़ाइल से पढ़ता untar कोstdin

-f -निर्माण और निष्कर्षण दोनों पर डिफ़ॉल्ट होने के बारे में डिट्रिच एप की टिप्पणी को प्रतिबिंबित करने के लिए संपादित किया गया है, इसलिए स्पष्ट रूप से निर्दिष्ट करने के लिए आवश्यक नहीं है।


7
यदि आप ऐसा कर रहे हैं, तो संभवतः आप अपने होम डायरेक्टरी के अलावा कहीं और निकालने के -C basedirलिए एक तर्क जोड़ना चाहेंगे tar
डगल

17

यदि आप इसे दुर्लभ अवसर से अधिक पर करना चाहते हैं, तो मैं सुझाव दूंगा कि sshfsयदि आप एक यूनिक्स की तरह उपयोग कर रहे हैं तो दूरस्थ फाइल सिस्टम को बढ़ाएं जो FUSE (लिनक्स, * बीएसडी, मैक ओएस एक्स) का समर्थन करता है। अपने घर निर्देशिका के तहत एक निर्देशिका बनाओ, कहते हैं, ~ / रिमोट-सर्वर:

    $ mkdir ~/remote-server

फिर दूरस्थ फाइल सिस्टम को माउंट करें sshfs। अपने दूरस्थ मशीन के होस्ट नाम के साथ "yourserver.com" बदलें, और "दूरस्थ निर्देशिका का नाम" उस निर्देशिका के साथ जिसे आप दूरस्थ प्रणाली पर उपयोग कर रहे हैं।

    $ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/

एक बार यह हो जाने के बाद, दूरस्थ निर्देशिका आपके फ़ाइल सिस्टम का हिस्सा है और आप इस पर अपने सभी सामान्य टूल का उपयोग कर सकते हैं, जिसमें शामिल हैं cp:

    $ cp ~/Downloads/your-files ~/remote-server

यदि आपने पहले से sshfsइंस्टॉल नहीं किया है, तो आपको अपने पैकेज मैनेजर का उपयोग करके अपने कंप्यूटर पर इसे स्थापित करने में सक्षम होना चाहिए (नाम sshfsया पैकेज के लिए देखो fuse-sshfs)। अधिक जानकारी के लिए, आप ऑनलाइन एक ट्यूटोरियल पढ़ सकते हैं ।

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


और फिर जांचें कि कौन से sshfs विकल्प आपके काम को बेहतरीन तरीके से पूरा करने में मदद करेंगे। उदाहरण के लिए यूजर / ग्रुप आईडी मैपिंग -o idmap={none,user,file},gid=<remote_user_group_ID>,allow_otherऔर -Cकंप्रेशन के लिए यदि खराब बैंडविथ। जैसे ही यह अच्छा काम करता है, मैं व्यक्तिगत रूप से आदेशों के लिए उपनामों को जल्दी से एसटीएस पर दूर के फाइल सिस्टम को माउंट करने के लिए जोड़ देता हूं। @Benjamin_Staton मैं यहाँ sudo या root का उपयोग नहीं करूँगा, न कि एक उचित उपयोगकर्ता / समूह मैपिंग के बिना।
tuk0z

9

पहली बार, scp(कॉपी ओवर ssh) और के बीच कोई वास्तविक अंतर नहीं है rsync

इसके बाद के रन rsync द्वारा उन फ़ाइलों को कॉपी न करने से लाभान्वित होंगे जो पहले से मौजूद हैं।

rsync -avH ~/Downloads  username@remotehost:Downloads
  • -a सभी फाइलों के लिए
  • -v क्रिया के लिए
  • -H "बस सहानुभूति का पता लगाने और सही काम करने के लिए"
  • फिर स्रोत और गंतव्य पथ। आप स्रोत में वाइल्डकार्ड का उपयोग कर सकते हैं या पूरी निर्देशिका को सिंक कर सकते हैं।

अन्य उपयोगी झंडों में शामिल हैं:

  • --delete गंतव्य पर मौजूद फ़ाइलों को हटाने के लिए जो अब स्रोत पर मौजूद नहीं हैं।
  • --dry-run परीक्षण के लिए - जब संयुक्त के साथ बहुत काम --delete

यह sshपासवर्ड रहित लॉगिन करने के लिए कुंजियों का उपयोग करेगा , यदि आपने उन्हें सेट किया है।

रन के अंत में, rsyncआपको बताएगा कि यह कितनी बार तेजी से फिर से सादे कॉपी करने पर खत्म हो गया।


1
-Hवास्तव में हार्ड लिंक के लिए है, यह उसी सामग्री को दो बार या उससे अधिक भेजे जाने पर रोकता है जब इसे स्रोत निर्देशिका संरचना में एक से अधिक स्थानों से जोड़ा जाता है (लेकिन बड़ी निर्देशिका संरचनाओं के लिए प्रक्रिया को कम कुशल बना सकता है)। यह प्रतीकात्मक लिंक पर कोई प्रभाव नहीं है, लेकिन कुछ विकल्प शामिल -a/ --archiveप्रभावित करते हैं कि कैसे सहानुभूति संसाधित होती है।
डेविड स्पिललेट

4

उपरोक्त उत्तरों को जोड़ने के लिए। कभी-कभी मैं सुदूर पथ के बारे में निश्चित नहीं हूं। इन मामलों में, मैं sftpपहले आवश्यक स्थान पर नेविगेट करने के लिए उपयोग करता हूं , फिर फ़ाइल को डाउनलोड या अपलोड करने के लिए उपयोग करें या प्राप्त करें।

अगर आप भी कुछ हमेशा सिंक करना चाहते हैं और यहां तक ​​कि स्थानीय रूप से कुछ फाइल को निष्पादित करना चाहते हैं जो रिमोट मशीन पर स्थित है, तो sshfsबहुत अच्छा काम करता है।


-1

मैं ssh के साथ बहुत कुछ कर रहा हूँ। मैंने विजुअल स्टूडियो के लिए एक कस्टम बिल्ड टूल बनाया और मूल रूप से वीएस एक ssh कमांड चला रहा है जो मेरे कोड को लक्ष्य कंप्यूटर पर कॉपी करता है और फिर उस लक्ष्य कंप्यूटर पर संकलित करता है।

ssh userB @ hostB 'cp /network/path/of/source/file.ext/path/of/final/file.ext; ./runCustomCommand '

एकल उद्धरण चिह्न और अर्ध-बृहदान्त्र के उपयोग पर ध्यान दें। पूर्व ssh के माध्यम से hostb के लिए आपकी कमांड्स को एनकैप्सुलेट करता है और बाद वाला आपको hostA के लिए एक ssh कमांड में कई hostB सिस्टम कमांड चलाने की अनुमति देता है।

इस काम को करने के लिए, आपको अपनी स्टार्ट मशीन पर ssh कीज़ सेट करनी होंगी ताकि आप userA @ hostA हो सकें और userb के रूप में hostB में लॉगिन कर सकें। UserA @ hostA के लिए सार्वजनिक ssh कुंजी बनाने की प्रक्रिया अच्छी तरह से प्रलेखित है। यदि आप userA के लिए hosta पर सार्वजनिक कुंजी नहीं बनाते हैं, और उस कुंजी को hostB को userB के रूप में कॉपी करते हैं, तो आपको हर बार अपना पासवर्ड दर्ज करने के लिए मजबूर किया जाएगा - जो स्वचालन की खुशी को बर्बाद कर देता है।


क्या जो किसी ने भी अपमानित किया है वह टिप्पणी छोड़ सकता है कि उन्होंने क्यों उतारा? सूचनात्मक प्रतिक्रिया के बिना डाउन वोट अर्थहीन हैं। धन्यवाद मैंने ओपी के विशिष्ट प्रश्न को एक उत्तर के साथ संबोधित किया है जो सीधे संबंधित है। मैं नई तकनीक शुरू नहीं कर रहा हूं या वैकल्पिक मार्ग सुझा रहा हूं। क्यों? शायद ओपी वैकल्पिक मार्गों का उपयोग नहीं करना चाहता।
एंड्रयू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.