@Mpontes '/ @ जेवियर के जवाब का एक और संशोधन
ssh user@remoteserver -L 9999:localhost:9999 'socat TCP-LISTEN:9999,fork,bind=localhost UNIX-CONNECT:/var/run/mysqld/mysql.sock& pid=$!; trap "kill $pid" 0; while echo -ne " \b"; do sleep 5; done'
सफाई वाला
ssh user@remoteserver -L 9999:localhost:9999 '
socat TCP-LISTEN:9999,fork,bind=localhost UNIX-CONNECT:/var/run/mysqld/mysql.sock&
pid=$!
trap "kill $pid" 0
while echo -ne " \b"; do
sleep 5
done
'
पेशेवरों
- खुलने का समय पहले की तुलना में 6.7 (सेंटोस 7 की तरह)
- दूरस्थ सर्वर में पुनः ssh करने के बजाय ssh समाप्ति पर सोसाइटी को मारता है
- गैर-सार्वजनिक ssh लॉगिन (ijk समाधान के विपरीत) की अनुमति देता है
फ़ीचर
- चूंकि
-f
विकल्प का उपयोग नहीं किया गया है, आप या तो एक सार्वजनिक कुंजी का उपयोग कर सकते हैं और पृष्ठभूमि के माध्यम से चला &
सकते हैं या आप अंतःक्रियात्मक रूप से लॉग इन कर सकते हैं और Ctrl + Z का उपयोग $!
कर सकते हैं और पीआईडी को स्टोर करने के लिए उसी का उपयोग कर सकते हैं ।
कान्स
- आप आसानी से
-f
ssh विकल्प का उपयोग नहीं कर सकते , क्योंकि आप ssh के रास्ते को खो देंगे। यह विधि अग्रभूमि में चलने और मारने के लिए Ctrl + C पर निर्भर करती है।
- अधिक जटिल
व्याख्या
socat ...&
- दूरस्थ सर्वर पर पृष्ठभूमि में समाज चलाएं
pid=$!
- पिड स्टोर करें
trap kill\ $pid 0
- kill $pid
बैश समाप्ति पर चलाएं
while :; sleep...
- एक अनंत लूप में बैठो
echo -ne \ \b
- इको स्पेस बैकस्पेस द्वारा पीछा किया। जैसे ही ssh डिस्कनेक्ट होता है, वह विफल हो जाता है। ए के साथ sleep 5
, इसका मतलब है कि socat
ssh के बाद 5 सेकंड तक चल सकता है
नोट: असल में डोकर, बंदरगाह का उपयोग कर परीक्षण किया 2375
, /var/run/docker.sock
और वातावरण चर DOCKER_HOST='tcp://localhost:2375'
, लेकिन mysql सभी एक ही के लिए काम करना चाहिए
अद्यतन करें
SSH नियंत्रणों का उपयोग करते हुए , आप -f
मेरे तरीके का उपयोग करके ध्वज का उपयोग कर सकते हैं , बस निम्नलिखित झंडे जोड़ें
-f -o ControlPath=~/.ssh/%C -o ControlMaster=auto
और आपको मिलेगा
ssh -f -o ControlPath=~/.ssh/%C -o ControlMaster=auto user@remoteserver -L 9999:localhost:9999 'set -m; socat TCP-LISTEN:9999,fork,bind=localhost UNIX-CONNECT:/var/run/mysqld/mysql.sock& pid=$!; trap "kill $pid" 0; while echo -ne " \b"; do sleep 5; done'
अब आप सभी नियंत्रित सत्रों का उपयोग करके समाप्त कर सकते हैं
ssh -o ControlPath=~/.ssh/%C -O exit remoteserver
-o
विकल्प आपके में बचाया जा सकता है .ssh/config
फ़ाइल, या आप एस के बजाय का उपयोग कर सकते हैं (लेकिन आप अभी भी आवश्यकता होगी -o ControlMaster
)