स्थानीय मशीन से शेल स्क्रिप्ट रिमोट मशीन में कमांड निष्पादित करने के लिए, फिर स्थानीय मशीन पर जारी रखें


10

समस्या यह है: मैं एक दूरस्थ मशीन से फ़ाइलों को कॉपी करना चाहता हूं।

मैं एक शेल स्क्रिप्ट लिखने का तरीका ढूंढ रहा हूं जो दूरस्थ मशीन से कनेक्ट हो, संग्रहीत फ़ाइल का स्थान प्राप्त करें, एक बार जब मुझे दूरस्थ सर्वर से डिस्कनेक्ट हो जाएगा और प्राप्त स्थान के साथ स्थानीय मशीन के भीतर से scp का उपयोग करना होगा फ़ाइल की प्रतिलिपि बनाएँ।

विशेष रूप से, मैं जानना चाहता हूं कि स्क्रिप्ट से कैसे, मैं एक रिमोट मशीन से जुड़ूंगा, उस मशीन पर कार्य करूंगा। डिस्कनेक्ट करें, और स्थानीय रूप से निष्पादन जारी रखें।

जवाबों:


15

समाधान 1:

remote_output="$(ssh user@host "remote command")"
scp "user@$host:$remote_output" /local/path

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

समाधान 2:

ssh user@host "determine_path; cat filename" >local_filename

यह फ़ाइल को रिमोट से सीधे खोजने और आउटपुट करने और स्थानीय स्तर पर फ़ाइल में रीडायरेक्ट करने से काम करता है। यह स्केप एस.पी. इसके लिए आवश्यक है कि "बिल्ली" से पहले के चरणों में आउटपुट न हो (जिसे आप & & / dev / null के साथ हल कर सकते हैं)।


1
+1 अलग ssh + scp के बजाय, एक कनेक्शन के साथ पूरी समस्या को हल करने के तरीके को दिखाने के लिए।
पीटर कॉर्ड्स

सभी उत्तर उपयोगी हैं, लेकिन यह मेरी समस्या को सबसे विशेष रूप से संबोधित करता है
gnsr

20

आप निम्न प्रारूप में एक स्क्रिप्ट लिख सकते हैं:

command1
command2
...
ssh user@machine command3
...
command4
command5

आपको command3पासवर्ड के लिए संकेत दिए बिना निष्पादित करने के लिए SSH कुंजियों को सेटअप करने की आवश्यकता है ।


2
यह ध्यान दिया जाना चाहिए कि यह तुल्यकालिक द्वारा होगा। जबकि ssh user@remote command3चल रहा है, command4शुरू नहीं हो सकता
आहा कहते हैं मोनिका

3
@aaaaaa जब तक आपने नहीं कियाssh user@machine command3 &
आइजैक

3
@Isaac हां, मेरा कहना यह है कि या तो वांछित व्यवहार हो सकता है, लेकिन यह निर्णय होना चाहिए
आआआआना मोनिका

2

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

इसके अलावा मैं यह भी मान लूंगा कि वे कमांड मानक आउटपुट पर फाइल के लिए पूर्ण पथ, या फाइल के सापेक्ष पथ, SSH उपयोगकर्ता की होम निर्देशिका के सापेक्ष कॉपी के लिए उपयोग किए जा रहे हैं। मेरे उदाहरण में, स्क्रिप्ट का नाम "getfilepath.sh" है, हालांकि इसमें शेल स्क्रिप्ट नहीं है, यह कुछ अन्य निष्पादन योग्य या यहां तक ​​कि आदेशों की एक श्रृंखला भी हो सकती है।

# Script to be executed on local machine.

# put any leading local commands here.

FILE=$(ssh user@emote getfilepath.sh);
scp user@remotehost:"$FILE" .

# put any trailing local commands here.

उपरोक्त कोड में, "$ ()" संकेतन शेल चर के रूप में कमांड के मानक आउटपुट को कैप्चर करने का एक तरीका है। यह काफी मानक है, लेकिन यदि आप एक ऐसे शेल का उपयोग कर रहे हैं जो इसे नहीं समझता है, तो आप इसके बजाय "बैक-टिक्स" के साथ कमांड को घेर सकते हैं, जो कि अधिकांश यूएस कीबोर्ड पर 1 कुंजी के बाईं ओर उच्चारण चिह्न हैं।


0

हो सकता है कि रिमोट मशीन पर एक अनुसूचित टास्क को ट्रिगर करना संभव हो जो सभी काम करता है।

यह आपको दूरस्थ मशीन से जुड़ने से रोक सकता है जबकि आप उन फ़ाइलों का स्थान खोज रहे हैं जिन्हें आप कॉपी करना चाहते हैं।

मैं यह कर रही हूँ:

comand लाइन एक निर्धारित कार्य को चलाता है जो मेरे मामले में एक बैचस्क्रिप्ट निष्पादित करता है।

schtasks /run /s remoteserver /u %user% /p %password% /tn "scheduledtaskname"

सादर

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