youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc
बाद में:
you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc
you@homepc$ ssh youatwork@localhost -p 23456
आप यह क्या कर सकते हैं: चरण 1 में कार्यालय पीसी से सर्वर तक एक दूरस्थ बंदरगाह को आगे बढ़ाया 12345
जाता है ( इसका उपयोग एक उदाहरण के रूप में किया जाता है, किसी भी बंदरगाह> 1024 को करना चाहिए)। अब सर्वर पर 12345 से कनेक्ट होकर आपको ऑफिसपैक पर पोर्ट 22 से कनेक्ट करना चाहिए।
चरण 2 में, अपने होम मशीन से 12345 पोर्ट को सर्वर पर 12345 (जहां यह चरण 1 में सेट अप किया गया है, कार्यालय -22 पर अग्रेषित किया जाता है)
चरण 3 में, आप अपने कार्यालय पीसी लॉगिन के साथ स्थानीय पोर्ट 23456 से कनेक्ट होते हैं । यह आपके सर्वर पर चरण 2 से 12345 पोर्ट करने के लिए, और चरण 1 से आपके कार्यालय पीसी के लिए भेजा जाता है।
ध्यान दें कि मैं फॉरवर्डिंग के लिए ऑटोसह का उपयोग कर रहा हूं, क्योंकि यह एक एसश रैपर है जो स्वचालित रूप से सुरंग को फिर से जोड़ता है इसे काट दिया जाना चाहिए; हालांकि सामान्य ssh भी काम करेगा, जब तक कि कनेक्शन ड्रॉप नहीं होता।
एक संभावित भेद्यता है: जो कोई भी लोकलहोस्ट से जुड़ सकता है: 12345 सर्वरपैक पर अब ऑफिसपैक से जुड़ सकता है: 22, और इसमें हैक करने की कोशिश करें। (ध्यान दें कि यदि आप एक SSH सर्वर चला रहे हैं, तो आपको वैसे भी इसे मूलभूत सुरक्षा के ऊपर सुरक्षित रखना चाहिए, जो डिफ़ॉल्ट रूप से चालू हैं। मैं कम से कम रूट लॉगिन को अक्षम करने और पासवर्ड प्रमाणीकरण को अक्षम करने की सलाह देता हूं - यह देखें जैसे )
संपादित करें : मैंने इसे उसी कॉन्फ़िगरेशन से सत्यापित किया है, और यह काम करता है। GatewayPorts no
केवल उन बंदरगाहों को प्रभावित करता है जो बड़े पैमाने पर दुनिया के लिए खुले हैं, स्थानीय सुरंगों में नहीं। यह वही है जो अग्रेषित पोर्ट हैं:
homepc:
outgoing ssh to serverpc:22
listening localhost:23456 forwarded through ssh tunnel
serverpc:
listening ssh at *:22
incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
outgoing ssh to serverpc:22
incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22
तो, जहाँ तक नेटवर्क स्टैक का संबंध है, यह संबंधित लूपबैक इंटरफेस (प्लस ssh कनेक्शन पर सभी स्थानीय यातायात है करने के लिए serverpc); इसलिए, GatewayPorts
बिल्कुल जाँच नहीं की जाती है।
हालाँकि, निर्देश है AllowTcpForwarding
: यदि वह है no
, तो यह सेटअप विफल हो जाएगा क्योंकि किसी भी अग्रेषण की अनुमति नहीं है, लूप इंटरफ़ेस के पार भी नहीं।
कैविट्स :
अगर ऑटोस और हाल के ssh का उपयोग कर रहे हैं, तो आप ssh का उपयोग करना चाहते हैं ServerAliveInterval
और ServerAliveCountMax
सुरंग को बनाए रखने के लिए। ऑटोशो में एक अंतर्निर्मित चेक है, लेकिन जाहिर तौर पर फेडोरा पर इसके कुछ मुद्दे हैं। -M0
अक्षम करता है कि, और -oServerAliveInterval=20 -oServerAliveCountMax=3
जाँचता है कि क्या कनेक्शन है - प्रत्येक 20 सेकंड की कोशिश करता है, अगर यह एक पंक्ति में 3x विफल रहता है, तो ssh बंद हो जाता है (और ऑटो एक नया बनाता है):
autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
ssh सुरंग को पुनः आरंभ करने के लिए उपयोगी हो सकता है अगर आगे विफल हो जाता है, का उपयोग करते हुए -oExitOnForwardFailure=yes
- यदि बंदरगाह पहले से ही बाध्य है, तो आपको एक काम करने वाला SSH कनेक्शन मिल सकता है, लेकिन कोई अग्रेषित सुरंग नहीं।
~/.ssh/config
विकल्प (और पोर्ट) के लिए उपयोग करना उचित है, अन्यथा कमांड लाइन बहुत अधिक क्रियाशील हो जाती है। उदाहरण के लिए:
Host fwdserverpc
Hostname serverpc
User notroot
ServerAliveInterval 20
ServerAliveCountMax 3
ExitOnForwardFailure yes
LocalForward 23456 localhost:12345
तो आप बस सर्वर उपनाम का उपयोग कर सकते हैं:
autossh -M0 fwdserverpc