ssh टनलिंग केवल एक्सेस


31

क्या केवल सुरंग बनाने की अनुमति देने के लिए ssh (linux पर) को कॉन्फ़िगर करना संभव है? यानी उपयोगकर्ता सुरंगों को सेटअप कर सकता है, लेकिन शेल / एक्सेस फ़ाइलों को प्राप्त नहीं कर सकता है?

जवाबों:


42

हां, केवल /bin/falseशेल के रूप में उपयोग करें और उपयोगकर्ता को किसी भी दूरस्थ कमांड (यानी -Nओपनएसएसएच के लिए ध्वज) को निष्पादित किए बिना सुरंग एसएसएच प्रक्रिया शुरू करने का निर्देश दें :

ssh -N -L 1234:target-host:5678 ssh-host

उम, यदि उपयोगकर्ता उपयोग नहीं करता है, तो -Nउनके पास शेल एक्सेस है। यह वास्तव में समस्या को हल नहीं करता है और खतरनाक है।
mlissner

12
@mlissner: नहीं, यदि आपके पास /bin/falseशेल है, तो आपके पास शेल एक्सेस नहीं होगा, क्योंकि प्रत्येक लॉगिन सत्र तुरंत समाप्त हो जाएगा।
स्वेन

10

उपयोगकर्ता की .sh / अधिकृत_की फ़ाइल में, कुछ इस तरह से डालें:

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

तो, मूल रूप से, आप नियंत्रण एक स्थान द्वारा अलग किए गए उपयोगकर्ता की ssh सार्वजनिक कुंजी के सामने होंगे। उदाहरण में, विशिष्ट सार्वजनिक कुंजी का उपयोग करने वाले कनेक्शनों को केवल 192.168.1.10 के MySQL सर्वर और 10.0.0.16 के वेब सर्वर को अग्रेषित करने के लिए SSH पोर्ट करने की अनुमति होगी, और एक शेल (नहीं-पीटीआई) सौंपा नहीं जाएगा। आप विशेष रूप से "नो-पीटीआई" विकल्प के बारे में पूछ रहे हैं, लेकिन अन्य भी उपयोगी हो सकते हैं यदि उपयोगकर्ता केवल विशिष्ट सर्वरों को टनल के लिए माना जाता है।

अधिकृत_की फ़ाइल के लिए अधिक विकल्पों के लिए sshd के लिए मैन पेज देखें ।

ध्यान दें कि उपयोगकर्ता का अनुभव थोड़ा अजीब लग सकता है: जब वे अंदर जाएंगे, तो ऐसा लगेगा कि सत्र लटका हुआ है (जैसा कि उन्हें एक पैसा नहीं मिल रहा है)। ठीक है। यदि उपयोगकर्ता ने पोर्ट फॉरवर्डिंग निर्दिष्ट किया है, उदाहरण के लिए, "-L3306: 192.168.1.10: 3306", तो पोर्ट अग्रेषण अभी भी प्रभावी होगा।

किसी भी मामले में, यह एक कोशिश दे।


6
यह खतरनाक सलाह है ; no-ptyशेल एक्सेस को रोकना नहीं है, यह शेल को केवल एक पेंटी नहीं देता है। यह प्रॉम्प्ट प्रदर्शित नहीं करता है (यानी "हैंग होने के लिए प्रकट होता है"), लेकिन आप अभी भी कमांड को ठीक दे सकते हैं। यदि आपको शेल एक्सेस को वहां से प्रतिबंधित करना है तो आपको command="..."विकल्प की आवश्यकता है .ssh/authorized_keys
१०:

@AleksiTorhamo सही है, लेकिन यह एक शुरुआत है; आपको शेल को पूरी तरह से प्रतिबंधित करने के लिए शेल / usr / sbin / nologin या / bin / false / in / etc / passwd पर सेट करना होगा। मैंने उपरोक्त प्रविष्टि को संपादित करने के लिए, साथ ही एलेक्सी की सलाह के साथ संपादित किया।
जेमिसन बेकर

4

उपयोगकर्ता को एक शेल दें जो केवल उन्हें लॉग आउट करने की अनुमति देता है जैसे /bin/press_to_exit.sh

#! / Bin / bash
read -n 1 -p "बाहर निकलने के लिए कोई भी कुंजी दबाएं" कुंजी

इस तरह से वह जब तक चाहे तब लॉग इन रह सकता है, सुरंगों के साथ सक्रिय, लेकिन कोई कमांड नहीं चला सकता। Ctrl-cकनेक्शन बंद कर देता है।


3
मुझे लगता है कि कम से कम सिद्धांत रूप में, उपयोगकर्ता CTRL + C को सही समय पर (लाइनों 1 और 2 के बीच) और एक पूर्ण बैश शेल के साथ समाप्त करने में सक्षम होगा।
andreas-h

2

एक शेल असाइन करें जो उपयोगकर्ता को लॉग इन करने की अनुमति नहीं देता है।

जैसे

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

उन्हें शेल प्रॉम्प्ट प्राप्त करने से रोका जाएगा, और उन्हें 60 सेकंड का समय दिया जाएगा - यदि 60 सेकंड के लिए कोई कनेक्शन सक्रिय नहीं है, तो यह बाहर निकल जाएगा और इस तरह उन्हें पूरी तरह से डिस्कनेक्ट कर देगा (आवश्यकताओं के अनुसार संख्या में वृद्धि)।

वे रिमोट कमांड को निष्पादित नहीं कर सकते, या तो, क्योंकि वह शेल उन्हें नहीं होने देगा।


4
अधिकांश लिनक्स इंस्टॉल पहले से ही उसके लिए कुछ के साथ आते हैं। / sbin / nologin, या / bin / false या समान।
रोरी

1
उपरोक्त उदाहरण में Ctrl-C क्या करेगा?
अर्जन

अर्जन: चूंकि स्क्रिप्ट का उपयोग शेल के रूप में किया जाता है, इसलिए Ctrl-C का प्रभाव logoutसामान्य के समान होगा ।
ग्रैविटी

2
मुझे वास्तव में "-एन" विकल्प के साथ इयरल की प्रतिक्रिया पसंद है, लेकिन अगर आप अपने उपयोगकर्ता को एक सहायक, मैत्रीपूर्ण, सूचनात्मक संदेश देना चाहते हैं - और उन्हें एसएसएच कनेक्शन को पूरे स्थान पर छोड़ना बंद कर दें - तो एक कस्टम स्क्रिप्ट अच्छी और स्पष्ट है यह क्या कर रहा है।
jrg

2
@jrg यह चर्चा पुरानी है और आपने अपना विचार बदल दिया होगा :) लेकिन IMHO यह हस्तनिर्मित शैल लिपियों के साथ बाहर आना खतरनाक है। पहले से ही है /sbin/nologin, जिसे आप उपयोगकर्ता के अनुकूल संदेश के साथ अनुकूलित कर सकते हैं /etc/nologin.txt
dr01

0

मेरा समाधान उस उपयोगकर्ता को प्रदान करना है जो केवल एक इंटरैक्टिव शेल के बिना सुरंग बना सकता है, उस शेल को / etc / passwd में / usr / bin / tunnel_shell पर सेट करने के लिए

बस एक अनंत लूप के साथ निष्पादन योग्य फ़ाइल / usr / bin / tunnel_shell बनाएं

इसके अतिरिक्त AllowGroupsऔर Match Groupविकल्प का उपयोग करें ।

यहाँ पूरी तरह से समझाया गया है: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/


2
उपयोगकर्ता किसी भी तरह निष्पादन योग्य से बाहर निकलने और शेल से बचने में सक्षम हो सकता है। क्या आप पूरी तरह आश्वस्त हैं कि आपका निष्पादन योग्य ऐसा करने की अनुमति नहीं देगा?
dr01

2
@ dr01 ईमानदार होने के लिए, मुझे यकीन नहीं है कि यह 100% सुरक्षित है। मुझे लगता है कि जब आप निष्पादन योग्य से बाहर निकलते हैं, तो SSH सत्र छोड़ दिया जाता है। मैं इस पर और शोध करूंगा और यहां फिर से टिप्पणी कर सकता हूं।
डैनियल डब्ल्यू।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.