मुझे कैसे पता चलेगा कि मेरी ssh सुरंग सफलतापूर्वक बनाई गई है?


21

मैं tunnel.shएक ssh सुरंग को जीवित रखने के लिए दूसरों द्वारा लिखी गई निम्न स्क्रिप्ट पर भरोसा करता हूं :

#!/bin/bash
export SSH_HOST=tim@server 

if [ ! -f /tmp/.tunnel ] 
then
echo "Creat SSH tunnel"
ssh -f -D 9999 $SSH_HOST "if [ -f ~/.tunnel ]; then rm ~/.tunnel; fi; while [ ! -f ~/.tunnel ]; do echo > /dev/null; done" & 
touch /tmp/.tunnel 
else
echo "Close SSH tunnel"
ssh $SSH_HOST "touch ~/.tunnel" 
rm /tmp/.tunnel 
fi
exit

लगातार ssh सुरंग बनाने के लिए, मैं अभी जारी करता हूं tunnel.sh। जब तक मैं tunnel.shफिर से जारी नहीं करता तब तक सुरंग को बंद नहीं किया जाएगा ।

मैं सोच रहा था कि अगर ssh सुरंग वास्तव में सफलतापूर्वक बनाई गई है तो मैं कैसे सत्यापित कर सकता हूं?

सुरंग का मेरा मुख्य उपयोग सर्वर के समान LAN में कुछ प्रिंटर पर दस्तावेज़ प्रिंट करना है, और प्रिंटर केवल LAN के भीतर से ही एक्सेस किया जा सकता है। एक सुरंग बनाने के बाद, अब मुद्रण किसी भी समस्या की रिपोर्ट नहीं करता है, लेकिन चूंकि मैं शारीरिक रूप से वहां नहीं हूं, इसलिए मैं यह नहीं जांच सकता कि क्या दस्तावेज वास्तव में मुद्रित किए गए हैं।

मैंने सोचा कि चूंकि मैं अब सुरंग के लिए लैन धन्यवाद में हूं, मेरा बाहरी आईपी सर्वर के समान होना चाहिए। लेकिन वास्तव में वे समान नहीं हैं (मैंने उन्हें बाहर पाया wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//')। मुझे आश्चर्य है क्योंकि? जब मैं सुरंग के साथ इंटरनेट पर किसी वेबसाइट से जुड़ता हूं, तो क्या मेरे और सर्वर के बीच सुरंग के कारण सर्वर मेरे और कनेक्शन में इंटरनेट वेबसाइट के बीच का मध्य बिंदु नहीं है?

जवाबों:


25

यह एक बहुत अधिक जटिल है की तुलना में यह होना चाहिए :-)

सुरंग शुरू करें:

ssh -f -N -D 9999 -M -S /tmp/ssh_tunnel_%h.sock -o ExitOnForwardFailure=yes $SSH_HOST && \
echo "ssh tunnel started successfully" || \
echo "ssh tunnel failed to start"

सुरंग बंद करो:

ssh -S /tmp/ssh_tunnel_%h.sock -O exit $SSH_HOST

बस आपको इतना ही करना है। यदि आप विवरण चाहते हैं, तो नीचे छोड़ें।

आपके दूसरे प्रश्न के लिए, आईपी एक। नहीं, आपका आईपी नहीं बदलता है। आप सभी को दूरस्थ मेजबान के माध्यम से एक SOCKS प्रॉक्सी बनाना था। जब तक आप इसे नहीं बताते आपका सिस्टम इस प्रॉक्सी का स्वचालित रूप से उपयोग नहीं करता है।

एसएसएच स्पष्टीकरण
सुरंग शुरू करने के लिए कहता है
-f:: खुद को पृष्ठभूमि के लिए ssh बताओ। यदि यह सफलतापूर्वक शुरू हो जाता है तो यह केवल खुद को पृष्ठभूमि देगा ( -oनीचे दिए गए तर्क के साथ सहयोग करता है)।
-o ExitOnForwardFailure=yes: यदि यह SOCKS प्रॉक्सी सेट नहीं कर सकता है तो यह बाहर निकलने के लिए ssh को बताता है।
-N: एक कमांड निष्पादित न करें। हम सिर्फ सुरंग बनाना चाहते हैं, रिमोट होस्ट पर कुछ नहीं करना चाहते।
-D 9999: आपका SOCKS प्रॉक्सी।
-M: -S तर्क के लिए यहां काम करना आवश्यक है।
-S /tmp/ssh_tunnel_%h.sock: यह इसे अपने नियंत्रण सॉकेट के लिए /tmp/ssh_tunnel_HOSTNAME.sock का उपयोग करने के लिए कहता है। -Mविकल्प यह बताता है ssh जरूरतों एक और ssh पहले से ही सॉकेट पर सुनने को यह सॉकेट की स्थापना की और नहीं करने के लिए कि इस मुद्दे आदेशों। Ssh पहले से चल रहा है के बाद अतिरिक्त टनल स्थापित करने के लिए आप इस सॉकेट का उपयोग कर सकते हैं। %h फ़ाइलनाम के भाग के रूप में दूरस्थ होस्ट के होस्टनाम का उपयोग करता है।

सुरंग को रोकने के लिए तर्क
-S /tmp/ssh_tunnel_%h.sock: यह स्पष्ट होना चाहिए। हालाँकि जब से हमने -M जारी नहीं किया, इसका मतलब है कि ssh को उस सॉकेट से कनेक्ट करना चाहिए जो पहले से ही वहां मौजूद है और उसे बताएं कि उसे क्या करना है, बल्कि कुछ भी नहीं करना चाहिए।
-O exit: यह का हिस्सा है -S। हम ssh को सॉकेट से बाहर निकलने के बारे में सुनते हैं। अभी भी यहाँ की आवश्यकता है। यहां तक ​​कि अगर आपको फ़ाइल नाम का उपयोग किए बिना एक पूर्ण सॉकेट पथ निर्दिष्ट करना था, तो भी ssh एक दूरस्थ होस्ट को निर्दिष्ट करना चाहेगा। यही कारण है कि मैं तर्कों में डाल दिया । हो सकता है कि इसका उपयोग अगर ssh होस्ट के लिए पूछने जा रहा है, और यह चीजों को व्यवस्थित रखता है।
$SSH_HOST%h%h


5

इस प्रकार की सुरंग आपके आईपी पते की जानकारी को नहीं बदलती है। यह सब आपके कंप्यूटर को पोर्ट 9999 को खोलने के लिए कहता है, और उस पोर्ट के आगे के कनेक्शन को आपके ssh कनेक्शन के माध्यम से रिमोट मशीन (टिम @ सर्वर) पर भेज देता है। यह जांचने का सबसे आसान तरीका है कि कनेक्शन ऊपर है, पोर्ट को टेलीनेट करना है जिसे आगे बनाया गया है (आपके उदाहरण 9999 में):

$ टेलनेट लोकलहोस्ट 9999
सर्वर की कोशिश ... सर्वर से
जुड़ा।
पलायन चरित्र '^] है।

यदि आप "सर्वर से कनेक्टेड" प्राप्त करते हैं। संदेश, इसका मतलब है कि आपकी सुरंग ऊपर है। यदि, इसके बजाय आपको मिलता है: "दूरस्थ होस्ट से कनेक्ट करने में असमर्थ: कनेक्शन ने इनकार कर दिया" आपकी सुरंग ऊपर नहीं है।

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


+1 धन्यवाद! (१) जब मैं लैन में एक प्रिंटर पर प्रिंट करता हूं, तो ९९९ पोर्ट पर जाने का पता कैसे चलता है अर्थात सुरंग का उपयोग करें? और कुछ नहीं? (२) क्या मेरे आईपी पते की जानकारी बदलने वाली सुरंगें हैं?
टिम

@ संभावना है, उस विशेष प्रिंटर को एक विशेष आईपी पते और पोर्ट पर प्रिंट करने के लिए कॉन्फ़िगर किया गया है। यह इस बात पर निर्भर करता है कि आपका प्रिंटर कैसे सेटअप है। आमतौर पर, आप दोनों को निर्दिष्ट कर सकते हैं जब आप एक प्रिंटर को परिभाषित करते हैं। हां, ऐसी प्रकार की सुरंगें हैं जिनके पास अपनी खुद की आईपी जानकारी होगी। आम तौर पर इन के लिए आप एक अलग ट्यून बनाते हैं / टैप करते हैं en.wikipedia.org/wiki/TUN/TAP इंटरफ़ेस जिसके पास खुद का आईपी एड्रेस होगा, और उस पते से बाहर जाने वाले सभी ट्रैफ़िक एक अलग नेटवर्क से आते दिखाई देंगे ।
गाबे

धन्यवाद! मेरे फ़ायरफ़ॉक्स की प्राथमिकताओं में, उन्नत -> कनेक्शन -> सेटिंग्स में, मैं मैनुअल प्रॉक्सी कॉन्फ़िगरेशन का चयन करता हूं, और इसके पोर्ट के लिए HTTP प्रॉक्सी के लिए "लोकलहोस्ट" और "9999" टाइप करता हूं। उसके बाद मैं फ़ायरफ़ॉक्स में किसी भी वेबसाइट से कनेक्ट नहीं कर सकता। मुझे आश्चर्य है क्योंकि?
टिम

@ यह थोड़ा भ्रमित करने वाला है ... सेट करने के लिए उचित चीज़ है: SOCKS होस्ट, और HTTP प्रॉक्सी नहीं। जब मैंने पहली बार यह कोशिश की थी तो मेरे पास यही मुद्दा था।
गाबे

1

मेरे मामले में (Ubuntu 14.10 पर Google Chrome), मेरा बाहरी पता परिवर्तित होता है, कम से कम ब्राउज़र के भीतर। बस Google "मेरा आईपी पता क्या है?" प्रॉक्सी कनेक्शन के साथ और उसके बिना।

इसके अलावा, यदि आप प्रॉक्सी सेट करते हैं, तो सुरंग को नष्ट करने का प्रयास करें और देखें कि क्या आप अभी भी ट्रैफ़िक प्राप्त कर सकते हैं। जब मैं ऐसा करता हूं, तो क्रोम "प्रॉक्सी सर्वर से कनेक्ट करने में असमर्थ" एक त्रुटि देता है।

दूसरा तरीका: रिमोट होस्ट के लिए सुरंग बनाने के बाद, एक नया ssh सत्र बनाएं और चलाएं tcpdump -A dst port 80। फिर किसी पृष्ठ पर ब्राउज़ करें और आपको टर्मिनल में संबंधित ट्रैफ़िक देखना चाहिए।

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