यह मानते हुए कि आपने यह आदेश चलाया है: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -N
जैसा कि आपके द्वारा लिंक किए गए पोस्ट में वर्णित है।
कमांड का टूटना:
ssh
: यह बहुत आत्म व्याख्यात्मक है। आह्वान करता है ssh
।
-f
: ( man ssh
पृष्ठ से)
कमांड निष्पादन से ठीक पहले पृष्ठभूमि पर जाने के लिए अनुरोध ssh। यह उपयोगी है यदि ssh पासवर्ड या पासफ़्रेज़ माँगने जा रहा है, लेकिन उपयोगकर्ता इसे पृष्ठभूमि में चाहता है।
अनिवार्य रूप से, ssh
कनेक्शन स्थापित करने के लिए किसी भी पासवर्ड को दर्ज करने के बाद पृष्ठभूमि पर भेजें ; यह आपको localhost
लॉग इन करने के बजाए शेल को तुरंत वापस भेज देता है remote-host
।
user@mysql-server.com
: वह दूरस्थ सर्वर जिसे आप लॉग इन करना चाहते हैं।
-L 3306:mysql-server.com:3306
: यह दिलचस्प बिट है। -L
( man ssh
पेज से):
[bind_address:] पोर्ट: होस्ट: होस्टपोर्ट निर्दिष्ट करता है कि स्थानीय (क्लाइंट) होस्ट पर दिए गए पोर्ट को दिए गए होस्ट और पोर्ट पर पोर्ट को अग्रेषित किया जाना है।
इसलिए स्थानीय पोर्ट को होस्ट पर दूरस्थ पोर्ट से -L 3306:mysql-server.com:3306
बांधता है ।3306
3306
mysql-server.com
जब आप स्थानीय पोर्ट से कनेक्ट करते हैं 3306
, तो कनेक्शन को सुरक्षित चैनल पर अग्रेषित किया जाता है mysql-server.com
। दूरस्थ होस्ट , mysql-server.com
तो को जोड़ता mysql-server.com
पोर्ट पर 3306
।
-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 फ़ंक्शन को इंगित करेंगे, जो पोर्ट पर कनेक्ट होगा । आप स्पष्ट रूप से अभी भी पोर्ट पर कनेक्ट कर सकते हैं, इसलिए आप अभी भी स्थानीय सर्वर का उपयोग कर सकते हैं ।localhost
33060
mysql-server.com
3306
localhost
3306
mysql