সম্পর্কিত প্রশ্ন: সার্ভার থেকে ক্লায়েন্টে ssh সংযোগ শুরু করুন
সেখান থেকে উত্তর আমাকে অনেক সাহায্য করেছে, এই আদেশটি আমার যা প্রয়োজন তা করে:
ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP
তাই আমি স্ক্রিপ্টটি সব সময় পুনরায় সংযোগ করতে লিখেছিলাম:
#!/bin/bash
while true; do
echo "try to connect..."
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
echo "restarting in 5 seconds.."
sleep 5
done
এবং এটি যোগ /etc/crontab
। তবে আমি খুঁজে পেয়েছি যে কেবল যদি আমি এটি শেল থেকে "হাতে" চালিত করি তবে এটি কাজ করে তবে যদি এটি ক্রোন দ্বারা ডাকা হয়, ssh সংযোগ করে এবং অবিলম্বে শেষ হয়। (সুতরাং, উপরের স্ক্রিপ্টটি সর্বদা পুনরুদ্ধার করে)
থেকে man ssh
, আমি খুঁজে পেয়েছি যে ব্যাকগ্রাউন্ড সংযোগের জন্য আমি এটিকে -n
কী দিয়ে কল করা উচিত , তবে এটি কোনও লাভ হয়নি। তারপরে, আমি কেবল একই স্ক্রিপ্টগুলির চারপাশে সন্ধান করলাম এবং আমি দেখতে পেলাম যে আমি কল করলে এটি কাজ করে tail -f something
, অর্থাত্ কিছু "নেভারেন্ডেন্ডিং" কমান্ড, সুতরাং আমি খালি ফাইল তৈরি করেছি /tmp/dummy_file
এবং এখন আমার এসএসএস কমান্ডটি এরকম দেখাচ্ছে:
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file
এটা এখন কাজ করে! তবে, এই সমাধানটি খানিকটা কুৎসিত বলে মনে হচ্ছে, তবুও আমি সত্যিই সেই আচরণের প্রকৃত কারণগুলি বুঝতে পারি না। কেবল সুযোগেই , আমি bash
পরিবর্তে কল করার চেষ্টা করেছি tail -f
( bash
আমার কাছে "নেভারেন্ডেন্ডিং" কমান্ডও মনে হয়), তবে এটি কার্যকর হয় না।
সুতরাং, কেউ দয়া করে এই আচরণটি ব্যাখ্যা করতে পারেন, এবং বিপরীত এসএসএস টানেলটি ধরে রাখার জন্য ব্যাকগ্রাউন্ড এসএসএস সংযোগ তৈরি করার সঠিক উপায় কী?
while
লুপটি বার বার চলবে, ssh
প্রতি 5 সেকেন্ডে নতুন ব্যাকগ্রাউন্ড সংযোগ শুরু করে, তাই না? এটি আমার যা প্রয়োজন তা নয়।
&
আপনার ssh কমান্ডের শেষে কী ব্যবহার করবেন :ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &