सवाल मेरे (तीसरे) पीसी से दो दूरस्थ मेजबानों के बीच एसपीपी


मेरे पास दो दूरस्थ मेजबान हैं।
होस्ट 1-> 10.3.0.1
होस्ट 2-> 10.3.0.2
दोनों एक एसएसएच सर्वर चलाते हैं।

एसएसएच सर्वर मेजबान 1 में पोर्ट 22 और मेजबान 2 में पोर्ट 6 9 6 पर सुनता है। अब, मेरी स्थानीय मशीन का उपयोग करके, मुझे मेजबान 1 से मेजबान 2 में मेजबान 1 या मेजबान 2 में लॉग इन किए बिना कुछ कॉपी करने की आवश्यकता है। कुछ इस तरह,

scp user@10.3.0.1:/path/to/file user@10.3.0.2/path/to/file

मैं यह कैसे कर सकता हूं, कृपया ध्यान दें कि दो मेजबान एसएसएच के लिए विभिन्न बंदरगाहों का उपयोग करते हैं।


112
2017-12-10 13:49


मूल


क्या आप पूछ रहे हैं कि क्या आप रिमोट होस्ट से रिमोट होस्ट में स्थानांतरित कर सकते हैं, या आप पूछ रहे हैं कि पासवर्ड देने के बिना इसे कैसे किया जाए? - glenn jackman
जबकि -P रिमोट-टू-रिमोट ट्रांसफर के मामले में बंदरगाह निर्दिष्ट करने के लिए ध्वज मौजूद है, एसएसएच प्रति होस्ट पोर्ट निर्दिष्ट करने के तरीके पर कोई परिभाषित व्यवहार नहीं है ... - mveroone


जवाब:


अतीत में, जिस तरह से scp काम किया, जब बुलाया (भोलेपन से) रिमोट सिस्टम के बीच फ़ाइलों की प्रतिलिपि बनाने के लिए, बहुत असुविधाजनक था: उदाहरण के लिए, यदि आपने लिखा था

    scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

scp पहले एक खोलेंगे ssh रिमोट 1 पर सत्र, और फिर यह चला जाएगा scp वहां से रिमोट 2 तक। इसके लिए काम करने के लिए, आपको दूरस्थ 1 पर दूरस्थ 2 के लिए प्राधिकरण प्रमाण-पत्र स्थापित करना होगा।

इसे करने का आधुनिक तरीका, इसके बजाय, ("आधुनिक" क्योंकि इसे केवल कुछ साल पहले लागू किया गया था, और शायद सभी के पास कोई नहीं है -3-capable scp) दो चरणों की आवश्यकता है। पहला आवश्यक कदम उपयोग करना है ~/.ssh/config निम्नानुसार दूरस्थ 1 और दूरस्थ 2 के कनेक्शन के लिए सभी विकल्पों को सेट अप करने के लिए:

    Host remote1.example.org
    Port 2222
    IdentityFile /path/to/host1-id_rsa

    Host remote2.example.org
    Port 6969
    IdentityFile /path/to/host2-id_rsa

इस तरह आदेश के लिए सभी आवश्यक विकल्पों को पारित करना संभव हो जाता है अस्पष्टता के बिना: उदाहरण के लिए, अगर हमने सीएलआई पर कहा था बंदरगाह 2222 का उपयोग करें उपर्युक्त विन्यास के बिना, यह अस्पष्ट होगा कि हम इसका जिक्र कर रहे थे या नहीं remote1 या इसमें remote2, और इसी तरह क्रिप्टोग्राफिक कुंजी वाली फ़ाइल के लिए। इस तरह सीएलआई साफ और सरल रहता है।

दूसरा, उपयोग करें -3 विकल्प, निम्नानुसार है:

    scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

-3 विकल्प निर्देश scp पीसी के माध्यम से यातायात को रूट करने के लिए जिस पर आदेश जारी किया जाता है, भले ही यह स्थानांतरण के लिए तीसरी पार्टी है। इस तरह, प्रमाणीकरण प्रमाण-पत्र केवल जारी करने वाले पीसी, तीसरे पक्ष के पास होना चाहिए।


185
2017-12-10 18:32



भविष्य के संदर्भ के लिए: यदि आप दो होस्ट्स के बीच एक फ़ाइल कॉपी करते हैं जो पहचान फ़ाइल साझा करते हैं (जैसे EC2 इंस्टेंस), तो आपको कॉन्फ़िगरेशन फ़ाइल की आवश्यकता नहीं है। एक मेजबान दोनों मेजबान से जुड़ने के लिए पर्याप्त है। - Artur Czajka
Google Compute Engine के लिए, ध्यान देने योग्य भी है, आपके लिए जोड़ने का समर्थन है ~/.ssh/config फ़ाइल: cloud.google.com/compute/docs/gcloud-compute लेकिन मुझे नहीं लगता कि एडब्ल्यूएस का एक ही समर्थन है - modulitos


पिछली बार मैंने कोशिश की, एसपीपी ऐसा करने में सक्षम नहीं था। आपकी कमांड लाइन ठीक दिखती है। यह कामकाज काम करेगा:

ssh -p port_on_machine1 user@machine1 "cat /path/to/file/one"|ssh -p port_on_machine2 user@machine2 "cat >/path/to/file/two"

5
2017-12-10 14:17



मेरा एसपीपी मैन पेज कहता है "दो दूरस्थ मेजबानों के बीच प्रतियों की भी अनुमति है।" - glenn jackman
धन्यवाद, यह सुनना अच्छा है। एसपीपी करने के लिए आप ए-पी ध्वज दे सकते हैं (यह कुछ बीएसडी लोगों द्वारा लिखा गया था, क्योंकि इसकी तर्क हैंडलिंग इतनी दुखद है :-(), लेकिन ऐसा लगता है कि आप रिमोट होस्ट पर विभिन्न बंदरगाह निर्दिष्ट नहीं कर सकते हैं। मुझे खेद है, लेकिन मुझे लगता है, केवल यह कामकाज lefts (या एसएसएच का उपयोग कर बहुत सारे ट्रिकियर समाधान हैं, लेकिन एसपीपी से बचने के लिए - उदाहरण के लिए, sftpfs, लेकिन वे सबसे सरल नहीं हैं)। मैंने बंदरगाह सेटिंग्स के साथ अपना कामकाज बढ़ाया। - peterh


मेरे मामले में, मैं रिमोट कॉपी के साथ रिमोट कर रहा था, साथ ही साथ -3 तर्क। '-P' पैरामीटर के साथ दिया गया पोर्ट पहले सर्वर के साथ काम करता है, लेकिन पोर्ट 22 का उपयोग दूसरे के साथ किया जाता है।

ssh -P 1234 user@server1.mydomain.com user@server2.otherdomain.com

समाधान को संपादित करना है /etc/ssh/ssh_config में फाइल server1 और इन पंक्तियों को जोड़ें:

Host *.otherdomain.com
   Port  1234

इस तरह, पोर्ट 1234 दोनों के लिए उपयोग किया जाता है। यह भी अलग हो सकता है।

पिछले समाधान की तुलना में इस समाधान में बेहतर थ्रूपुट है, क्योंकि संचार सीधे है।


4
2018-01-26 14:18



Perez कमान लाइन से दो अलग रिमोट मशीनों के लिए दो अलग बंदरगाहों के माध्यम से एसपीपी हासिल करने का एक तरीका है? - Red Bottle