मैं एक मध्यवर्ती सर्वर के माध्यम से एक फ़ाइल को कैसे एससीपी कर सकता हूं?


15

मैं WinXP पर बैश शेल के साथ Ccygwin का उपयोग कर रहा हूं। मैं अपनी लोकलहोस्ट से एक रिमोट मशीन - host2 की एक फ़ाइल को SCP करना चाहता हूँ। हालाँकि, मैं केवल SSH को एक इंटरमीडिएट मशीन - host1, और फिर वहाँ SSH से host2 तक ले जा सकता हूँ। (ध्यान दें, मैं अपने स्थानीय होस्ट से host2 तक नहीं पहुंच सकता)।

मुझे लगा कि सुरंग बनाना मेरा जवाब है, लेकिन जब मैं सुरंग स्थापित करने की कोशिश करता हूं

ssh -L 9999:localhost:9998 dalvarado@host1 'ssh -L 9998:localhost:1234 -N dalvarado@host2'

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

धन्यवाद, -


2
का डुप्लीकेट superuser.com/questions/174160/... - सारांश नीचे मेरा उत्तर देखें।
20

उपयोगकर्ता से मीर डी : यह भी देखें serverfault.com/questions/337274/…
fixer1234

जवाबों:


17

इसका उत्तर पहले ही यहाँ दिया जा चुका है

संक्षेप में: निम्नलिखित में डालें ~/.ssh/config

Host target.machine
User          targetuser
HostName      target.machine
ProxyCommand  ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

और फिर scpकिसी भी समय आप किसी भी समय अपने लक्ष्य को निर्धारित कर सकते हैं।

इसके अलावा के लिए काम करता है ssh, तो आप समय ssh-ing को लक्ष्य मशीन को भी बचाएगा।

क्रेडिट को उपयोगकर्ता 24925 पर जाना चाहिए जिन्होंने 2011 में इसका उत्तर दिया।


13

SSH सुरंग स्थापित करने के लिए, निम्नलिखित प्रारूप का उपयोग करें:

ssh -L 9999:host2:22 user@host1

यह कमांड कंप्यूटर पर 22999 पोर्ट को कमांड जारी करने वाले पोर्ट 9999 के host1रूप में userऔर सुरंगों से जुड़ता है host2-Nवैकल्पिक है, या आप की तरह कुछ का उपयोग कर सकते topया watchसत्र जीवित रखने के लिए यदि आवश्यक हो तो।

फिर, scpलोकलहोस्ट पर केवल 2 होस्ट करें: 9999।


1
जब मैं यह कमांड चलाता हूं, तो क्या मुझे होस्ट 1 में लॉग इन करना है? इसके अलावा, इस कमांड को चलाने के बाद, मैंने एक और बैश शेल खोला, और "scp hello.txt localhost: 9999" चलाया, लेकिन एक "ssh: होस्ट होस्टहोस्ट करने के लिए कनेक्ट हुआ पोर्ट 22: कनेक्शन ने मना कर दिया" त्रुटि। मुझसे यहां क्या गलत हो रहा है?
डेव

3
जब आप यह कमांड चलाते हैं, तो आप host1 से जुड़ जाएंगे, हां। आपका scpकमांड सिंटैक्स हालांकि गलत है। यह कोशिश करें कि उपयोगकर्ता उस पर scp -P 9999 hello.txt user@localhost:/path/to/destination/fileकहां userहै, host2जिसे आप लॉगिन करना चाहते हैं।
21

1
@Rain, आप इस उदाहरण को मुख्य उत्तर में रख सकते हैं;)
dmeu

5

OpenSSH 7.3 के बाद से , आप उपयोग कर सकते हैं -Jया -o ProxyJumpगढ़ / कूद मेजबान निर्दिष्ट कर सकते हैं । इसलिए, SSH के node2माध्यम से node1:

ssh -J you@node1 you@node2

एससीपी के पास -Jतर्क नहीं है , लेकिन यह अनुमति देता है -o, इसलिए यह काम करता है:

scp -o ProxyJump=you@node1 file.txt you@node2:~

3

आप पहले फ़ाइल को host1 पर भेज सकते हैं, जैसे:

scp file dalvarado@host1:.

फिर इसे host2 पर लाने के लिए करें:

ssh -t dalvarado@host1 'scp file dalvarado@host2:.'

इसे एक छद्म टर्मिनल आवंटित करने के -tलिए sshमजबूर करने का विकल्प , जो scpहोस्ट 1 पर आपको पासफ़्रेज़ / पासवर्ड के लिए संकेत देने के लिए आसान बना सकता है । यदि आपके पास सब-एजेंट चल रहा है और हर जगह कॉन्फ़िगर किया गया है, तो आपको पासफ़्रेज़ / पासवर्ड के लिए संकेत नहीं दिया जाना चाहिए।

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


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