डायनामिक रूप से बाउंड ओपनशेयर रिवर्स सुरंग के लिए सर्वर पर आवंटित पोर्ट का निर्धारण कैसे करें?


16

ओपनएसएसएच के हाल के संस्करणों पर रिवर्स सुरंग बनाते समय किसी भी उपलब्ध पोर्ट को बांधने के लिए 0 का रिमोट पोर्ट दिया जा सकता है:

-R [bind_address:] port: host: hostport

...

यदि पोर्ट तर्क `0 'है, तो सुनने का पोर्ट गतिशील रूप से सर्वर पर आवंटित किया जाएगा और क्लाइंट को रन टाइम पर रिपोर्ट किया जाएगा।

Opensh ssh क्लाइंट मैनपेज

मेरा सवाल है कि मैं (स्वचालित तरीके से) सर्वर पर इस पोर्ट आवंटन का निर्धारण कैसे कर सकता हूं। यह बल्कि ऐसा प्रतीत नहीं होता है कि यह ssh क्लाइंट को चलाने वाले होस्ट को सूचित किया गया है - लेकिन लक्ष्य के लिए नहीं, जो क्लाइंट पर सेवाओं तक पहुंचने के लिए इस पोर्ट से कनेक्शन बनाना चाहेगा।

दो समान विकल्प मैं सोच सकता हूं कि या तो चल रहे हैं

# netstat -ntlp

सर्वर पर और sshd द्वारा या के आउटपुट को देखकर 127.0.0.1 पर बाध्य संदिग्ध बंदरगाहों की तलाश करें

# lsof -p $PPID | grep TCP | grep LISTEN

लेकिन इनमें से कोई भी स्वचालन के दृष्टिकोण से सुखद नहीं है, और यदि इस तरह की एक से अधिक सुरंग बनाई जाती है, तो डायनेमिक पोर्ट को मूल सेवा पोर्ट पर वापस बांधने का कोई तरीका नहीं है।

क्या कुछ ऐसा है जो मैं SSH_CONNECTION पर्यावरण चर के बराबर, लेकिन सक्रिय सुरंगों के लिए, समान रूप से sshd सर्वर साइड पर सक्रिय सुरंगों (स्थानीय और दूरस्थ पोर्ट नंबर दोनों) की सूची प्राप्त करने के लिए याद कर रहा हूँ?

कुछ संदर्भ के लिए, मैं एक मेजबान के लिए संभावित रूप से बहुत से एक साथ रिवर्स सुरंगों को बनाने की कोशिश कर रहा हूं, अलग-अलग मेजबानों पर उसी पोर्ट नंबर पर वापस सुरंग बना रहा हूं। टीसीपी स्टैक होने से पोर्ट पूल को स्वचालित रूप से प्रबंधित करना ऐसा करने का सबसे प्रभावी तरीका लगता है।


जब "-R 0: xxxx: y" सिंटैक्स का उपयोग किया जाता है, तो xxxx के लिए रिमोट फॉरवर्ड के लिए आवंटित पोर्ट 49488 का उत्पादन होगा: y stderr पर।
ब्लेकबैट

हाँ, मुद्दा यह है कि उस जानकारी को सर्वर साइड में कैसे
लाया

जवाबों:


1

यदि आप sshd_config कॉन्फ़िगरेशन फ़ाइल में 'LogLevel' को DEBUG1 (या किसी DEBUG स्तर) पर सेट करते हैं, तो sshd /var/log/auth.log में पोर्ट नंबर लॉग करेगा।

याद रखें, कि DEBUG या उससे अधिक के LogLevel का उपयोग करना एक गोपनीयता जोखिम हो सकता है, क्योंकि बहुत कुछ लॉग होता है।

(संबंधित जानकारी दिखाने के लिए /var/log/auth.log से, कुछ पंक्तियों को हटा दिया गया)

Jun 24 06:18:24 radon sshd[9334]: Connection from 192.168.13.10 port 39193
Jun 24 06:18:24 radon sshd[9334]: Accepted publickey for lornix from 192.168.13.10 port 39193 ssh2
Jun 24 06:18:24 radon sshd[9334]: pam_unix(sshd:session): session opened for user lornix by (uid=0)
Jun 24 06:18:24 radon sshd[9334]: User child is on pid 9339
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on 0.0.0.0 port 0.
Jun 24 06:18:24 radon sshd[9339]: debug1: Allocated listen port 39813
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 0: new [port listener]
Jun 24 06:18:24 radon sshd[9339]: debug1: Local forwarding listening on :: port 39813.
Jun 24 06:18:24 radon sshd[9339]: debug1: channel 1: new [port listener]
Jun 24 06:18:27 radon sshd[9339]: Received disconnect from 192.168.13.10: 11: disconnected by user

यदि आप इसका अनुसरण करते हैं, तो आप देख सकते हैं कि आप कनेक्शन जानकारी को पार्स कर सकते हैं, और फिर अग्रेषित पोर्ट (इस मामले में 39813)

मैंने अपनी दो मशीनों के बीच इस कमांड लाइन का उपयोग किया है, मेरे पास ssh-key लॉगिन सेट अप है, इसलिए कोई पासवर्ड संकेत या देरी नहीं करता है

-xenon- lornix:~> ssh -R "*:0:radon:22" -N -T radon
Allocated port 39813 for remote forward to radon:22

-नहीं निर्दिष्ट करता है कि कोई आदेश नहीं दिया गया है, और -इस कनेक्शन के लिए ट्टी का आवंटन रोक दिया गया है।

पोर्ट कनेक्शन की जानकारी को प्रसारित करने का एक अन्य तरीका यह होगा कि इसे ग्राहक की ओर से पार्स किया जाए और पोर्ट को ले जाने के लिए एक ईमेल, जैबर, टेक्स्ट मेसेंजर, स्मोक सिग्नल या कबूतर भेजे जाएं।


0

आप sshएक प्रोग्राम के स्टाडर को पाइप कर सकते हैं जो लक्ष्य मशीन पर एक सर्वर से कनेक्शन खोलता है और इसके मशीन का नाम / आईपी पता / सीरियल नंबर / पोर्ट नंबर के साथ जो भी हो, रिपोर्ट करता है। इस तरह की तरह:

% ssh -R "*:0:radon:22" -N -T radon 2>&1 | sed "s/^/`uname -n` /" | netcat radon 3743
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.