@ মম্পন্টস / @ জাভিরের উত্তরটির আরও একটি পরিবর্তন
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
'
অনুকূল
- Ss.7 এর আগে ওপেনশে কাজ করে (সেন্টস OS এর মতো)
- রিমোট সার্ভারে পুনরায় চাপ দেওয়ার পরিবর্তে এসএসটি সমাপ্তিতে সস্যাটকে হত্যা করে
- অ-পাবলিক ssh লগইনকে অনুমতি দেয় (আইজকের সমাধানের বিপরীতে)
বৈশিষ্ট্য
- যেহেতু
-f
বিকল্পটি ব্যবহার করা হয়নি, আপনি পাবলিক কী ব্যবহার করতে পারেন এবং পটভূমিতে চলতে &
পারেন বা ইন্টারেক্টিভভাবে লগ ইন করতে এবং Ctrl + Z ব্যবহার করতে পারেন $!
এবং পিড সংরক্ষণের জন্য এটি ব্যবহার করতে পারেন ।
CONS
-f
Ssh বিকল্পটি সহজেই ব্যবহার করতে পারবেন না , কারণ আপনি সেইভাবে ssh এর পিড হারাবেন। এই পদ্ধতিটি অগ্রভাগে দৌড়ানোর উপর নির্ভর করে এবং হত্যা করতে Ctrl + C।
- আরও জটিল
ব্যাখ্যা
socat ...&
- দূরবর্তী সার্ভারে ব্যাকগ্রাউন্ডে সোকাট চালান
pid=$!
- পিড সংরক্ষণ করুন
trap kill\ $pid 0
- kill $pid
বাশ অবসান চালানো
while :; sleep...
- অসীম লুপে বসুন
echo -ne \ \b
- ব্যাকস্পেসের পরে ইকো স্পেস। Ssh সংযোগ বিচ্ছিন্ন হওয়ার সাথে সাথে এটি ব্যর্থ হয়। একটি সহ sleep 5
, এর অর্থ এই যে socat
ssh এর পরে 5 সেকেন্ড পর্যন্ত চলতে পারে
নোট: আসলে Docker, পোর্ট ব্যবহার পরীক্ষিত 2375
, /var/run/docker.sock
এবং এনভায়রনমেন্ট ভেরিয়েবল DOCKER_HOST='tcp://localhost:2375'
কিন্তু মাইএসকিউএল সব একই জন্য কাজ করা উচিত
হালনাগাদ
এসএসএইচ নিয়ন্ত্রণগুলি ব্যবহার করে , আপনি -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
ফাইল, অথবা আপনি -S পরিবর্তে ব্যবহার করতে পারেন (কিন্তু আপনি এখনও প্রয়োজন হবে -o ControlMaster
)