मैं एक होस्ट से एक फ़ाइल कैसे डाउनलोड कर सकता हूं मैं केवल एसएसएच दूसरे होस्ट के माध्यम से कर सकता हूं?


30

मैं अपने कार्यालय के कंप्यूटर से अपने लैपटॉप पर फाइलें डाउनलोड करना चाहता हूं।

मैं SSH द्वारा अपनी ऑफिस मशीन को संगठन सर्वर से और फिर SSH को सर्वर से मेरे कार्यालय मशीन से जोड़ सकता हूं।

केवल आदेश सर्वर संगठन स्वीकार करता है ssh, ssh1 और ssh2 हैं।

मैं अपने लैपटॉप (स्थानीय) मशीन में सर्वर के माध्यम से अपने कार्यालय (रिमोट) मशीन से एक फ़ाइल कैसे डाउनलोड कर सकता हूं?


2
रिवर्स SSH सुरंगों का उपयोग करें? मेरा उत्तर यहां देखें और इसे आवश्यक रूप से अनुकूलित करें: superuser.com/questions/1186905/…
डैरेन

1
मल्टी-हॉप SSH?
mckenzm

जवाबों:


37

पिछले उत्तरों में उल्लेख किया गया है कि एक मध्यवर्ती सर्वर (जिसे आमतौर पर गढ़ मेजबान के रूप में संदर्भित किया जाता है) के माध्यम से कनेक्ट करने के लिए ProxyJump निर्देश (OpenSSH 7.3 में जोड़ा गया) का उपयोग कैसे करें, लेकिन इसे केवल कमांड लाइन तर्क के रूप में उल्लेख करें।

जब तक यह एक ऐसी मशीन है जिसे आप भविष्य में नहीं जोड़ेंगे, सबसे अच्छी बात यह है कि आप इसे कॉन्फ़िगर करते हैं ~/.ssh/config

मैं एक फाइल डालूँगा जैसे:

Host office-machine
Hostname yochay-machine.internal.company.local
ProxyJump bastion-machine

Host bastion-machine
Hostname organization-server.company.com
...

यदि आप OpenSSH के पुराने संस्करण का उपयोग कर रहे हैं जो ProxyJump का समर्थन नहीं करता है, तो आप इसे समकक्ष से बदल देंगे:

ProxyCommand ssh -W %h:%p bastion-machine

और अगर आपका स्थानीय ssh संस्करण वास्तव में प्राचीन था जो समर्थन नहीं करता था -W:

ssh bastion-machine nc %h %p

हालांकि इस अंतिम के लिए आवश्यक है कि गढ़ मशीन ncस्थापित हो।

Ssh की सुंदरता यह है कि आप फ़ाइल पर प्रत्येक गंतव्य को कॉन्फ़िगर कर सकते हैं, और वे बहुत अच्छी तरह से ढेर हो जाएंगे। इस प्रकार आप office-machineसभी टूल (ssh, scp, sftp ...) पर होस्टनाम के रूप में काम कर रहे हैं क्योंकि वे सीधे कनेक्ट थे, और वे यह पता लगाएंगे कि ssh_config के आधार पर कैसे कनेक्ट किया जाए। आपके पास वाइल्डकार्ड्स भी हो सकते हैं, जो Host *.internal.company.localसभी मेजबानों को समाप्त करने की तरह बनाते हैं, जो एक विशिष्ट गढ़ से गुजर रहा है, और यह उन सभी पर लागू होगा। एक बार सही ढंग से कॉन्फ़िगर करने के बाद, एक हॉप कनेक्शन या बीस करने के बीच एकमात्र अंतर धीमी कनेक्शन समय होगा।


36

यदि आपके पास हाल ही में ओपनएसएसएच (8.0) है, तो आप -J(जंप) स्विच का उपयोग कर सकते हैं :

scp -J user@intermediate user@target:/path

पुराने संस्करणों के साथ (लेकिन कम से कम 7.3), आप ProxyJumpनिर्देश का उपयोग कर सकते हैं , या तो कमांड-लाइन पर:

scp -o ProxyJump=user@intermediate user@target:/path

या ssh_configफ़ाइल में, Ángel शो द्वारा जवाब के रूप में।


ProxyCommandपोर्ट फॉरवर्डिंग जैसे अन्य विकल्प हैं , जिन्हें आप ओपनएसएसएच के पुराने संस्करणों पर भी उपयोग कर सकते हैं। क्या ये OpenSSH मल्टीशॉप लॉगिन का समर्थन करता है?


2
@yochaymaganssh -J userA@orgserv userB@officecomp cat remote/path > local/path
22

4
Scp के लिए, इसे 7.10
Augngel

4
यहां तक ​​कि अगर scpसमर्थन नहीं करता है -J, तब भी ProxyJumpविकल्प का समर्थन करने के लिए यह नया पर्याप्त हो सकता है; स्पष्ट रूप से इस विकल्प का उपयोग करने वाले अन्य उत्तरों में से एक का प्रयास करें।
गॉर्डन डेविसन

2
यह स्वीकृत उत्तर होना चाहिए। मैं उन सवालों के सभी जवाबों से घृणा करता हूं sshजो configविशिष्ट मेजबानों के लिए आपके संशोधन का सुझाव देते हैं जब एक साधारण कमांड लाइन विकल्प काम करने के लिए पर्याप्त होता है।
Clemisch 16

2
"निराशा" एक चरम प्रतिक्रिया की तरह लगता है। निश्चित रूप से, ऐसे मामले हैं जहां कमांड लाइन का एक त्वरित संशोधन पहले कॉन्फ़िगरेशन फ़ाइल को संशोधित करने की तुलना में आसान है। लेकिन अगर आप एक ही मेजबान से कई बार जुड़ने की योजना बना रहे हैं, तो मैं निश्चित रूप से -J user@intermediateहर बार उपयोग करने की अपेक्षा एक बार अपनी कॉन्फ़िगरेशन फ़ाइल को अपडेट करूंगा ।
चेपनर

10

कभी-कभी हम सिर्फ पाइपलाइन का उपयोग कर सकते हैं। वह समय आज है।

ssh -A user@host1 ssh user@host2 cat filename > filename

आप भी अपलोड कर सकते हैं

ssh -A user@host1 ssh user@host2 cat \\\> filename < filename

हाँ, प्रॉक्सिमिंग से जुड़े अन्य उपाय हैं, लेकिन यह जानना कि यह कैसे करना उपयोगी है।


का उपयोगी उपयोग cat!
पिस्कवर

ध्यान दें कि यह आपके ssh एजेंट और कुंजियों के लिए मध्यवर्ती होस्ट के किसी भी पर्याप्त विशेषाधिकार प्राप्त उपयोगकर्ता को देता है। आपके मेजबान और host2 के बीच बहने वाला डेटा भी host1 पर अनएन्क्रिप्टेड मौजूद रहेगा। प्रॉक्सी का उपयोग करने के तरीके, और ऊपर कूद इन दोनों समस्याओं से बचते हैं।
जेम्स

@ जेम्स: मैं अनजान नहीं हूं। बस्तियन मेजबान इस तरह के आमतौर पर बहुत भरोसेमंद होते हैं।
जोशुआ

7

उपयोग ProxyJumpकॉन्फ़िगरेशन का करें:

ProxyJump
एक या एक से अधिक जंप प्रॉक्सी को या तो [उपयोगकर्ता @] होस्ट [: port] या ssh URI के रूप में निर्दिष्ट करता है। एकाधिक परदे के पीछे कोमा पात्रों द्वारा अलग किया जा सकता है और क्रमिक रूप से दौरा किया जाएगा। इस विकल्प को सेट करने से ssh (1) को पहले से निर्धारित ProxyJump होस्ट के लिए ssh (1) कनेक्शन बनाकर टारगेट होस्ट से कनेक्ट करना होगा और फिर वहां से अंतिम लक्ष्य के लिए एक TCP अग्रेषण स्थापित करना होगा।

scp -o ProxyJump=user@intermediate user@target:/path

2

एक प्राचीन प्रोटोकॉल है जिसे ZMODEM कहा जाता है : कुछ प्रोग्राम इन दिनों इसका समर्थन करते हैं, लेकिन जब यह काम करता है, तो यह बहुत सुविधाजनक हो सकता है।

पहले जांचें कि क्या आपके लैपटॉप का टर्मिनल प्रोग्राम ZMODEM का समर्थन करता है। (उदाहरण के लिए, आप ZMODEM का समर्थन करने के लिए iTerm2 (मैक पर) को कॉन्फ़िगर कर सकते हैं। एक उदाहरण स्क्रिप्ट उपलब्ध है यहां है )।

अपने कार्यालय मशीन में, चलाएं: sudo apt install lrzsz

अब आपको बस इतना करना है कि आप अपने कार्यालय की मशीन पर जाएं, और चलाएं sz (filename)। फ़ाइल आपके टर्मिनल के माध्यम से डाउनलोड की जाएगी।


1

उपयोगकर्ता के ssh के तहत कॉन्फ़िगरेशन: ~/.ssh/config

Host *
    UserKnownHostsFile=/dev/null
    StrictHostKeyChecking=no
    ServerAliveInterval 300
    ServerAliveCountMax 2
    ForwardAgent yes


Host jump server
    HostName server.company.org
    User root

Host jump1 server1
    HostName server1.dmz.company.org
    User root
    ProxyJump jump

Host jump2 server2
    HostName server.dmz2.company.org
    User root
    ProxyJump jump1

Host *.intranet.company.org
    User user
    ProxyJump jump2

अब आप इंट्रानेट सर्वर से सीधे 3 जंप सर्वर पर कॉपी कर सकते हैं ।

scp user@server.intranet.company:/home/user/ ./*

मैं इस वजह से scp के साथ जंप सर्वर को निर्दिष्ट करने की आवश्यकता नहीं है


0

वाया एससीपी -3:

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

2
-3विकल्प के रूप में वर्णन किया गया है "दो दूरदराज के मेजबान के बीच प्रतियां स्थानीय होस्ट के माध्यम से स्थानांतरित कर रहे हैं।" जबकि मेरा मानना ​​है कि यह प्रश्न बताता है कि स्थानीय होस्ट "रिमोट 2" का उपयोग नहीं कर सकता है।
जेफ स्कालर

2
@JeffSchaller: आप बीच में मशीन से कनेक्ट करते हैं, फिर उपयोग करते हैं -3। लेकिन यह मानता है कि आप मध्य मशीन से पहले एक से जुड़ सकते हैं।
जो

मुझे इस ओवर का कोई लाभ नहीं दिखता -J/ JumpHost। इसके विपरीत काफी सीमित है क्योंकि इसमें @ जोए का उल्लेख है।
मार्टिन प्रिक्रील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.