इस ssh सुरंग को कैसे बंद करें? [बन्द है]


94

मैंने इस पोस्ट में वर्णित के रूप में एक ssh सुरंग खोली: Zend_Db: SSH सुरंग पर एक MySQL डेटाबेस से कैसे जुड़ें?

लेकिन अब मुझे नहीं पता कि मैंने वास्तव में क्या किया है। क्या यह कमांड सर्वर पर कुछ भी प्रभावित करता है? और मैं इस सुरंग को कैसे बंद कर सकता हूं, क्योंकि अब मैं अपने स्थानीय mysql का उपयोग ठीक से नहीं कर सकता।

मैं OSX शेर का उपयोग करता हूं और सर्वर Ubuntu 11.10 पर चलता है।

जवाबों:


239

यह मानते हुए कि आपने यह आदेश चलाया है: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -Nजैसा कि आपके द्वारा लिंक किए गए पोस्ट में वर्णित है।

कमांड का टूटना:

  1. ssh: यह बहुत आत्म व्याख्यात्मक है। आह्वान करता है ssh
  2. -f: ( man sshपृष्ठ से)

    कमांड निष्पादन से ठीक पहले पृष्ठभूमि पर जाने के लिए अनुरोध ssh। यह उपयोगी है यदि ssh पासवर्ड या पासफ़्रेज़ माँगने जा रहा है, लेकिन उपयोगकर्ता इसे पृष्ठभूमि में चाहता है।

    अनिवार्य रूप से, sshकनेक्शन स्थापित करने के लिए किसी भी पासवर्ड को दर्ज करने के बाद पृष्ठभूमि पर भेजें ; यह आपको localhostलॉग इन करने के बजाए शेल को तुरंत वापस भेज देता है remote-host

  3. user@mysql-server.com: वह दूरस्थ सर्वर जिसे आप लॉग इन करना चाहते हैं।
  4. -L 3306:mysql-server.com:3306: यह दिलचस्प बिट है। -L( man sshपेज से):

    [bind_address:] पोर्ट: होस्ट: होस्टपोर्ट निर्दिष्ट करता है कि स्थानीय (क्लाइंट) होस्ट पर दिए गए पोर्ट को दिए गए होस्ट और पोर्ट पर पोर्ट को अग्रेषित किया जाना है।

    इसलिए स्थानीय पोर्ट को होस्ट पर दूरस्थ पोर्ट से -L 3306:mysql-server.com:3306बांधता है ।3306 3306mysql-server.com

    जब आप स्थानीय पोर्ट से कनेक्ट करते हैं 3306, तो कनेक्शन को सुरक्षित चैनल पर अग्रेषित किया जाता है mysql-server.comदूरस्थ होस्ट , mysql-server.comतो को जोड़ता mysql-server.comपोर्ट पर 3306

  5. -N: एक कमांड निष्पादित नहीं करते। यह "सिर्फ फॉरवर्डिंग पोर्ट्स" (मैन पेज को उद्धृत करते हुए) के लिए उपयोगी है।

क्या यह कमांड सर्वर पर कुछ भी प्रभावित करता है?

हां, यह लोकलहोस्ट और mysql-server.com के बीच पोर्ट 3306 पर एक कनेक्शन स्थापित करता है ।

और मैं इस सुरंग को कैसे बंद करूं ...

यदि आपने उपयोग किया है -f, तो आप देखेंगे कि sshआपने पृष्ठभूमि में सिर खोला है। बंद करने इसे चलाने के लिए है की अच्छे विधि ps aux | grep 3306, लगता है pidकी ssh -f ... -L 3306:mysql-server.com:3306 -N, और kill <pid>। (या हो सकता है kill -9 <pid>; मैं भूल जाता हूं अगर सिर्फ killकाम करता है)। यह आपके अन्य सभी कनेक्शनों को मारने का सुंदर लाभ है ssh; यदि आप एक से अधिक हो गए हैं, तो उन्हें फिर से स्थापित करना एक मामूली ... दर्द हो सकता है।

... क्योंकि अब मैं अपने स्थानीय mysql का उपयोग ठीक से नहीं कर सकता।

ऐसा इसलिए है क्योंकि आपने स्थानीय mysql प्रक्रिया को प्रभावी रूप से "कैप्चर" कर लिया है और किसी भी ट्रैफ़िक को अग्रेषित कर दिया है, जो इसे कनेक्ट करने का प्रयास करता है, दूरस्थ mysql प्रक्रिया से। एक बहुत अच्छा समाधान होगा कि पोर्ट-फॉरवर्ड में स्थानीय पोर्ट 3306 का उपयोग न करें । ऐसी किसी चीज़ का उपयोग करें जिसका उपयोग नहीं किया गया है, जैसे 33060. (उच्च संख्या आमतौर पर कम उपयोग की जाती है; यह इस तरह के संयोजन को पोर्ट-फॉरवर्ड करने के लिए बहुत आम है: "2525-> 25", "8080-> 80", "33060-> 3306" या इसी तरह। थोड़ा आसान याद करता है)।

इसलिए, यदि आप उपयोग करते हैं, तो आप पोर्ट पर ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -Nअपने Zend कनेक्ट-टू-mysql फ़ंक्शन को इंगित करेंगे, जो पोर्ट पर कनेक्ट होगा । आप स्पष्ट रूप से अभी भी पोर्ट पर कनेक्ट कर सकते हैं, इसलिए आप अभी भी स्थानीय सर्वर का उपयोग कर सकते हैं ।localhost33060mysql-server.com3306localhost3306mysql


4
सबसे अच्छी व्याख्या मैं थोड़ी देर में पढ़ता हूं। उदाहरण के लिए R जैसे स्थानीय रूप से स्थापित वातावरण से दूरस्थ डेटाबेस तक पहुँचते समय यह बहुत उपयोगी है। सार्वजनिक / निजी कुंजी प्रमाणीकरण के साथ अच्छी तरह से काम करता है। पासवर्ड के साथ नहीं क्योंकि मुझे पासवर्ड पास करने का कोई तरीका नहीं मिला।
मैट बन्नर्ट सेप

पूरी तरह से स्पष्टीकरण के कारण इस उत्तर को सबसे अच्छा स्वीकार करना।
जैकब

अच्छा उत्तर! वैसे, के -9लिए आवश्यक नहीं है kill, इस प्रक्रिया को देखते हुए अभी भी ठीक काम कर रहा है;;
Lucio Paiva

46

यह उन सभी सत्रों को मार देगा जो आपके पास टर्मिनल से खुले हैं।

sudo killall ssh

'कोई मिलान प्रक्रिया नहीं मिली।'
याकूब

ऐसा लगता है जैसे यह है। मैसिकल ने ठीक काम किया, लेकिन फिर अपाचे ने शिकायत करना शुरू कर दिया। मैंने रिबूट किया और सब कुछ उम्मीद के मुताबिक काम करता है। मुद्दा सुलझाया मुझे लगता है :)
याकूब

5
वैसे आप ऐसा नहीं करना चाहते हैं यदि यह एक
ठंढा

12
रनिंग killall sshबल्कि लापरवाह कमांड है। मैं ps aux | grep sshआपकी ssh सुरंग प्रक्रिया की विशिष्ट प्रक्रिया आईडी की खोज करने के लिए आपकी प्रक्रिया सूची ( जैसा कि ऊपर @simont द्वारा सुझाया गया है) खोज करने की सलाह देता हूं । फिर आप पीआईडी ​​को मार सकते हैं विशेष रूप से।
बेन

एक अच्छा मौका है कि आप उन सभी को मारना नहीं चाहेंगे।
wobbily_col

21

नोट: टिप्पणी के रूप में जवाब जोड़ने के बाद से कोड ब्लॉक का समर्थन नहीं करते।

मेरी राय में इसका उपयोग न करना बेहतर है -fऔर इसके बजाय प्रक्रिया को सामान्य रूप से पृष्ठभूमि दें &। यही कारण है कि आप दे देंगे सटीक पीआईडी आप को मारने के लिए की जरूरत है:

ssh -N -L1234:other:1234 server &
pid=$!
echo "waiting a few seconds to establish tunnel..."
sleep 5
... do yer stuff... launch mysql workbench whatever
echo "killing ssh tunnel $pid"
kill $pid

या बेहतर अभी तक, इसे एक आवरण स्क्रिप्ट के रूप में बनाएं:

# backend-tunnel <your cmd line, possibly 'bash'>
ssh -N -L1234:other:1234 server &
pid=$!
echo "waiting a few seconds to establish tunnel..."
sleep 5
"$@"
echo "killing ssh tunnel $pid"
kill $pid

backend-tunnel mysql-workbench

backend-tunnel bash


12
का उपयोग -fकी अनुमति देता है sshजब टर्मिनल सत्र पृष्ठभूमि करने के लिए जोर दे के विपरीत, बंद कर दिया है सत्र भी जारी रखने के लिए। का pidउपयोग कर हथियाने ps aux | grep ssh | grep <LOCAL-PORT>बहुत तुच्छ है।
simont

1
बैकग्राउंड जॉब से लौटाए गए स्पष्ट पीआईडी ​​का उपयोग करके @simont सुरक्षित है चाहे आप इसे कैसे भी देखें। यदि आपके पास एक से अधिक ssh प्रक्रिया चल रही है तो आपके पास एक बुरा समय है
aaron

-fजरूरत पड़ने पर लॉगिन पासवर्ड के लिए स्थानीय उपयोगकर्ता को संकेत देने का उपयोग करने का भी फायदा है। यदि आप उपयोग करते हैं &, तो उस प्रॉम्प्ट को उपयोगकर्ता द्वारा तब तक नहीं देखा जाता है जब तक कि वे प्रक्रिया को अग्रभूमि में नहीं लाते हैं (जैसे कि उपयोग करके fg)।
Bdoserror


3
पहली बार आपका <LOCAL-PORT> एक ऐसी प्रक्रिया के पृष्ठ में होता है जिसमें पाठ 'ssh' भी होता है (जैसे किसी अन्य ssh या sshd प्रक्रिया या नाम में 'ssh' के साथ किसी फ़ाइल को संपादित करना) आपको पता चलेगा कि यह दृष्टिकोण, जबकि सरल परिदृश्यों में सुविधाजनक है, बुलेटप्रूफ नहीं है
ऐरॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.