SSH सुरंग के माध्यम से कई हॉप्स पर डेटा कॉपी करें


14

हमारे पास दो मुख्य वातावरण हैं:

विकास और क्यूए

प्रत्येक वातावरण में दो सर्वर होते हैं:

  • जंप बॉक्स
  • अनुप्रयोग सर्वर

एप्लिकेशन सर्वर से कनेक्ट करने के लिए, आपको पहले जंप बॉक्स से कनेक्ट करना होगा, और फिर एप्लिकेशन सर्वर पर एसएसएच।

फ़ायरवॉल के सौजन्य से कुछ नियम हैं:

  • आप जंप बॉक्स के माध्यम से एप्लिकेशन सर्वर से कनेक्ट होना चाहिए
  • एप्लिकेशन सर्वर या तो जंप बॉक्स से कनेक्ट नहीं हो सकता
  • जंप बॉक्स एक ही सबनेट पर होते हैं, और एक दूसरे से बात कर सकते हैं।

हमारी समस्या

हमारे पास बहुत सी सामग्री (670 GB) है DEVELOPMENT APPLICATION SERVER, और हमें इसे प्राप्त करने की आवश्यकता है QA APPLICATION SERVER

इस डेटा को जंप बॉक्स में कॉपी करना एक विकल्प नहीं है क्योंकि उनके पास आवश्यक मात्रा में जगह की कमी है।

मैंने कुछ शोध किए, और सीखा कि हम इन सर्वरों के माध्यम से संभवतः सुरंगों की एक श्रृंखला कर सकते हैं ताकि हम डेटा को एक ऐप सर्वर से दूसरे में सुरंगों के माध्यम से सीधे स्ट्रीम कर सकें। हालाँकि, समस्या है कि हम अनुप्रयोग सर्वर से कूद बॉक्स से कनेक्ट नहीं कर सकते।

क्या हमारे पास कोई विकल्प है? यह एक हताश स्थिति हो रही है, और समय सार है। हमारे पास डेटा डाउनलोड करने और इसे फिर से अपलोड करने का समय नहीं है। सर्वर पर नेटवर्क को कॉपी करना जल्दी से जाएगा, क्योंकि यह एक गीगाबिट कनेक्शन है।


2
एक बार कनेक्शन स्थापित हो जाने के बाद, आप किसी भी तरह से कॉपी कर सकते हैं: $ devel_host $ tar -cf - | ssh -t jumbox 'ssh app_serv "tar -xf -"' या अन्य तरीका टार के आसपास।
एलेक्स_डब्लू

इसलिए हम देव कूद बॉक्स से देव ऐप सर्वर से जुड़ सकते हैं, लेकिन दूसरे तरीके से नहीं। यदि हमारे पास वह कनेक्शन स्थापित है, तो हम किसी भी तरह से कॉपी कर सकते हैं? इस सामग्री को दूसरे एप सर्वर पर ले जाने का सबसे अच्छा तरीका है कि पहले इसे जंप बॉक्स पर सहेजे बिना?
बैरी चैपमैन

वास्तव में, "पाइपिंग" "टार" एक सरलतम समाधान है।
एलेक्स_डब्लू

जवाबों:


15

अब तक, सबसे आसान तरीका यह है कि इसे केवल स्कैप के माध्यम से कॉपी किया जाए। साथ ही, यह सिंटैक्स वास्तव में कुछ अन्य सुझावों के विपरीत काम करता है।

आप इस वाक्य रचना को आसानी से नहीं हरा सकते हैं। यह आपको संभावित रूप से जटिल पाइपों पर विचार करने की परेशानी के बिना पुनरावर्ती, rsync या कभी भी आपको क्या चाहिए, की अनुमति देता है। यह वाक्यविन्यास सहज रूप से स्पष्ट है, Sys Admins द्वारा अधिक आसानी से सहायक होगा जो आपका अनुसरण करता है और बिल्ली का बेकार उपयोग नहीं करता है ।

scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to

से SCP आदमी पेज : -3दो दूरदराज के मेजबान के बीच प्रतियां स्थानीय होस्ट के माध्यम से स्थानांतरित कर रहे हैं। इस विकल्प के बिना डेटा को सीधे दो दूरस्थ होस्ट के बीच कॉपी किया जाता है। ध्यान दें कि यह विकल्प प्रगति मीटर को अक्षम करता है।

नीचे दिए गए उदाहरण में

  • आपके वर्कस्टेशन का नाम मैकबुक-प्रो है।
  • Dev Jump Box का नाम devjumpserver है
  • Dev Application Server का नाम devapplicationserver है
    • LAN DNS ज़ोन पर है जिसका नाम .local है
  • QA जंप बॉक्स का नाम qajumpserver है
  • QA अनुप्रयोग सर्वर का नाम qaapplicationserver है
    • LAN DNZ ज़ोन पर है जिसका नाम .local है
  • हम 670GB / etc / होस्ट फ़ाइल की एक परीक्षण प्रतिलिपि बनाएँ ;-)
  • मान लिया जाता है कि आपके पास SSH सार्वजनिक कुंजी प्रमाणीकरण कॉन्फ़िगर है।



यहां एक ~ / .ssh / config फाइल है जो आपके वर्कस्टेशन से एप्लिकेशन सर्वर तक सीधे पहुंच को उचित जंप (उर्फ बस्टियन सर्वर) के माध्यम से सेट करती है।

मैकबुक-प्रो: ~ barrychapman $ cat ~ / .ssh / config
मेज़बान *
  ServerAliveInterval 60
यजमान भक्तिनाशक
  HostName devapplicationserver.local
  ProxyCommand ssh -i ~ / .ssh / id_rsa barrychapman@devjumpserver.example.com -W% ​​h:% p
  उपयोगकर्ता बैरीकैपमैन
मेजबान qaapplicationserver
  HostName qaapplicationserver.local
  ProxyCommand ssh -i ~ / .ssh / id_rsa barrychapman@qajumpserver.example.com -W% ​​h:% p
  उपयोगकर्ता बैरीकैपमैन

मैकबुक-प्रो: ~ बैरीचैपमैन $



लक्ष्य सर्वर पर फ़ाइल की उपस्थिति के लिए परीक्षण, यह वहाँ नहीं होगा।

मैकबुक-प्रो: ~ barrychapman $ ssh qaapplicationserver ls / tmp / मेजबान
ls: एक्सेस / tmp / मेजबान नहीं कर सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं
संकेत द्वारा मारे गए 1।
मैकबुक-प्रो: ~ बैरीचैपमैन $



अब अपने वर्कस्टेशन के माध्यम से देव एप्लीकेशन सर्वर से क्यूए एप्लीकेशन की फाइल कॉपी करें।

मैकबुक-प्रो: ~ बैरीचैपमैन $ एसपी -3 डेप्लिकेशंसरवर: / etc / होस्ट्स qaapplicationserver: / tmp /
संकेत द्वारा मारे गए 1।
संकेत द्वारा मारे गए 1।
मैकबुक-प्रो: ~ बैरीचैपमैन $



अब QA एप्लिकेशन सर्वर पर कॉपी की गई फ़ाइल की उपस्थिति की जांच करें। यह इस समय वहाँ होगा।

मैकबुक-प्रो: ~ barrychapman $ ssh qaapplicationserver ls / tmp / मेजबान
/ Tmp / hosts
संकेत द्वारा मारे गए 1।
मैकबुक-प्रो: ~ बैरीचैपमैन $ 

ध्यान दें

ProxyCommand कनेक्शन बंद करते समय, आपको चेतावनी संदेश "सिग्नल 1 से मार दिया" दिखाई देगा। यह SSH ProxyCommand कनेक्शन को फाड़ रहा है और इसके बारे में चिंतित होने के लिए कुछ भी नहीं है। आप LogLevel Quietअपने गढ़ होस्ट कॉन्फ़िगर श्लोक में जोड़कर इससे छुटकारा पा सकते हैं ।


चीयर्स, इससे हमारी समस्या हल हो गई। क्रिसमस की बधाई!
बैरी चैपमैन

"बस्तियन मेजबान विन्यास श्लोक" से आपका क्या मतलब है ?? @BraveNewCurrency?
एंड्रयू वोल्फ

मैं प्रत्येक "होस्ट" लाइन पर विचार करता हूं और इसके तहत विन्यास एक श्लोक (जैसे कविता में।) यदि आप अपने गढ़ "होस्ट" लाइन के तहत "लॉजवेल क्विट" जोड़ते हैं, तो यह केवल उस होस्ट पर लागू होगा।
BraveNewCurrency

8

पाइप!

यदि इंटरनेट ट्यूबों की एक श्रृंखला है , तो यूनिक्स पाइप की एक श्रृंखला है - कुछ इस तरह:

cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "

कार्य करना चाहिए।

यदि आपको अधिक मेजबानों को पार करने की आवश्यकता है, तो आवश्यकतानुसार अधिक पाइप (और-नेस्टेड \कोटेशन की अधिक नेस्टेड परतें ) जोड़ें। (ध्यान दें कि यदि पाइपलाइन / बच निकलना इतना जटिल हो जाता है कि आपको अपनी उंगलियों पर गिनने के लिए आरेख या सहारा लेना पड़ता है, तो यह निर्धारित करने के लिए कि आपको कितनी बार बचना है, यह संभवतः हार को स्वीकार करने और उचित वीपीएन सेट करने का समय है। !)


1
जैसा कि एलेक्स_डब्ल्यू ने अपनी टिप्पणी में कहा है कि अगर आपको किसी भी चीज के लिए मध्यवर्ती फ़ाइल की आवश्यकता नहीं है , तो आप बस के tarआसपास के आउटपुट को भी पाइप कर सकते हैं । (इसके अलावा में आप नहीं की जरूरत हैcat पाइप लाइन के मध्यवर्ती चरणों में - sshstdin खाते हैं और यह रिले खुश है। catबस मुझे बेहतर महसूस करता है और एक प्लेसहोल्डर अन्य उपयोगी आदेश के लिए आप उपयोग करना चाह सकते हैं, की तरह है tee।)
voretaq7

मुझे लगता है कि ओपी की समस्या ऐसी कोई मशीन नहीं है, जिसमें दोनों के पास डेटा हो और वे कनेक्शन बना सकें, न ही कोई ऐसी मशीन है जो सब कुछ और सभी को देख सके (सभी पाइपों के लिए कनेक्टर के रूप में कार्य कर सके)।
मध्याह्न

1
@MadHatter अगर ऐसा है तो हमारे दो उत्तरों का संयोजन काम करेगा (देव सर्वर से कनेक्ट करें, जंप सर्वर के SSH पोर्ट पर वापस पोर्ट को अग्रेषित करें, फिर उस पोर्ट पर SSH पाइपलाइन चलाएं)। यह निश्चित रूप से समाधान को तेजी से घृणित बना रहा है जहां लोग आपके कार्यालय के बाहर VPN! NOW!उन बड़े संकेतों के साथ विरोध करना शुरू कर देंगे जो उन पर कहते हैं ...
voretaq7

क्यों हां। हाँ, वे करेंगे। उम्मीद है कि!
मध्याह्न

क्या इसका मतलब यह होगा कि मध्यवर्ती सर्वर (इस मामले में user@host1) cat ginormous-fileकिसी बिंदु पर किसी भी बिंदु पर पूर्ण संग्रहण में होगा? या डेटा सिर्फ सीधे भेजा जाता है user@host2? या यह किसी भी तरह से धारा है? यह कैसे tarप्रासंगिक है? मुझे लगता है कि यह मेरे द्वारा पूछे गए दूसरे से अंतिम प्रश्न के लिए प्रासंगिक है। इन सवालों में से कोई भी बयानबाजी नहीं है ...
hello_there_andy

1

अगर मैं सही तरीके से समझूं, तो आपके पास दो ऐप सर्वर (ऐप-क्यूए और ऐप-देव) की रक्षा करने वाले दो जंप सर्वर (जंप-क्यूए और जंप-देव) हैं; जंप सर्वर एक दूसरे को ssh कर सकते हैं; संबंधित जंप सर्वर के अलावा कोई बॉक्स संबंधित एप्लिकेशन सर्वर पर ssh नहीं कर सकता है। ऐप सर्वर दोपहर के लिए ssh कर सकते हैं। एक फ़ाइल को ऐप-देव से ऐप-क्यूए में स्थानांतरित किया जाना है। दोनों जंप सर्वर में डेटा की अंतरिम प्रतिलिपि के लिए जगह की कमी होती है।

आप इसे ssh टनलिंग के साथ हल कर सकते हैं। हम एक दूरस्थ ऐप सर्वर से एक कनेक्शन सेट करते हैं, एक दूरस्थ सुरंग ले जाते हैं जो अपने जंप सर्वर पर अप्रयुक्त पोर्ट से जुड़ता है। हम एक जंप सर्वर से दूसरे जंप सर्वर पर एक दूसरे कनेक्शन को सेट करते हैं, एक सुरंग ले जाते हैं, जो एक सुरंग से दूर से अग्रेषित पोर्ट के झूलते हुए छोर को उठाता है और दूसरे ऐप सर्वर के ssh पोर्ट पर भेजता है।

सुरंगों को स्थापित करें (इनमें से प्रत्येक कमंड को एक अलग विंडो में चलाने की आवश्यकता होगी jump-qa):

jump-qa% ssh app-qa -R 2345:localhost:2346
jump-qa% ssh jump-dev -L 2346:app-dev:22

अब आपको पता लगाना चाहिए कि ऐप-क्यूए पर, आप telnet localhost 2345ऐप-देव के ssh बैनर प्राप्त कर सकते हैं और कर सकते हैं । तब आप डेटाफ़ाइल की प्रतिलिपि बना सकते हैं:

app-qa% scp -P 2345 localhost:/path/on/app-dev/data.dat data.dat

दो जंप बॉक्स हैं - एक QA ऐप सर्वर के सामने, और एक DEV ऐप सर्वर के सामने। जम्प बॉक्स प्रत्येक अभिभावक के साथ संवाद कर सकते हैं
बैरी चैपमैन

क्या ग्राहक के पास अंतरिम कॉपी के लिए जगह है?
मध्याह्न

नहीं, पर्याप्त जगह नहीं है
बैरी चैपमैन

जब आप क्लाइंट कहते हैं, तो आप किस सर्वर का जिक्र कर रहे हैं?
बैरी चैपमैन

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