SSH-এ vim আটকে যায়? VPN-কে দোষ দেওয়ার আগে stty দেখুন
SSH-এ আটকে যাওয়া এডিটর সাধারণত টার্মিনালের অবস্থার সমস্যা, ছিঁড়ে যাওয়া টানেল নয়। সঠিক সিউডো-টার্মিনালে stty পড়ুন, তারপর শুধু সেটিই সারান।
এমন সেশন এডিটর শুরু হওয়ার সময় সংযুক্ত থাকে, তারপর SSH প্রক্রিয়া স্পষ্টভাবে জীবিত থাকলেও স্ক্রিন হালনাগাদ হওয়া বন্ধ করে দেয়। টাইপ করলে কিছু আসে না, Ctrl-C কিছুই করছে না বলে মনে হয়, আর সুস্পষ্ট সিদ্ধান্ত হলো VPN কিছু ফেলে দিয়েছে। বেশিরভাগ সময় টানেল ঠিক থাকে এবং দূরের সিউডো-টার্মিনাল এমন অবস্থায় থাকে যা কেউ চায়নি, কারণ echo, ক্যানোনিক্যাল ইনপুট ও ফ্লো নিয়ন্ত্রণ নেটওয়ার্কে নয়, টার্মিনালে বাস করে। ওই তিনটির মধ্যে কোনটি সরে গেছে তা বের করা দুটি কমান্ডের কাজ।
আটকে যাওয়াটা টানেলে নয়, টার্মিনালে বাস করে
একটি সিউডো-টার্মিনাল বাইটের চেয়ে বেশি বহন করে। এটি লাইন-ডিসিপ্লিন ফ্ল্যাগ ধরে রাখে যা ঠিক করে ইনপুট echo হয় কি না, পড়া নতুন লাইনের জন্য অপেক্ষা করে কি না, নির্দিষ্ট অক্ষর সিগন্যাল তৈরি করে কি না, এবং নিয়ন্ত্রণ অক্ষর দিয়ে আউটপুট থামানো যায় কি না। ইন্টারঅ্যাকটিভ এডিটর সেই টার্মিনালটিকে পুরো সময়ের জন্য raw মোডে নেয় এবং বেরোনোর সময় আগের সেটিংস ফিরিয়ে আনার কথা। ফিরিয়ে আনা না হলে, আপনি যে শেলে ফিরে আসেন সেটি আপনি যে শেল ছেড়েছিলেন তা নয়, যদিও সংযোগ কখনো ছিন্ন হয়নি।
কোনো সিদ্ধান্তে পৌঁছানোর আগে টার্মিনালগুলো তুলনা করুন। একই এডিটর চালানো দ্বিতীয় সেশন প্রমাণ করে ক্লায়েন্ট ও পথ কাজটি করতে পারে; এটি সেই টার্মিনাল সম্পর্কে কিছুই বলে না যার ফ্ল্যাগ নষ্ট।
যে টার্মিনাল আটকে গেছে তার সেটিংস পড়ুন
আগে ডিভাইসটি শনাক্ত করুন, তারপর তার অবস্থার দুই রূপই পড়ুন। পাঠযোগ্য রূপ দেখায় কী সেট আছে, আর মেশিন রূপ হলো সেটি যা আপনি পরে ফিরিয়ে দিতে পারেন।
tty
stty -a
stty -g
তিনটি ফ্ল্যাগ গ্রুপ এই রিপোর্টগুলোর বেশিরভাগ ব্যাখ্যা করে। echo সেটিংস ঠিক করে কীস্ট্রোক আদৌ দেখা যায় কি না, তাই echo বন্ধ টার্মিনাল মৃত দেখায় অথচ শেল প্রতিটি অক্ষর পাচ্ছে। ক্যানোনিক্যাল মোড ঠিক করে একটি প্রোগ্রাম ইনপুট একবারে এক লাইন দেখে কি না, তাই ক্যানোনিক্যাল মোডে ফেলে রাখা টার্মিনাল raw মোডের অ্যাপ্লিকেশনকে Enter পর্যন্ত কী উপেক্ষা করছে বলে দেখায়। ফ্লো-নিয়ন্ত্রণ সেটিংস ঠিক করে টার্মিনাল XON ও XOFF অক্ষর মানে কি না, এবং এই গ্রুপটিই তিনটির মধ্যে সবচেয়ে বিশ্বাসযোগ্য নকল জমাট তৈরি করে।
কিছু বদলানোর আগে আউটপুট লিখে রাখুন, বিশেষত যখন সেশনে কারও নির্ভর করা কাস্টম কী বাইন্ডিং থাকে। মেশিন রূপই সবচেয়ে নিরাপদ রেকর্ড, এই শর্তে যে এটি বাস্তবায়ন-নির্ভর এবং যে ধরনের সিস্টেম এটি তৈরি করেছে সেই ধরনের সিস্টেমই এটি ফিরিয়ে আনবে।
ওই একটি টার্মিনাল সারান, আপনি যে সেশনে টাইপ করছেন সেটি নয়
স্ট্যান্ডার্ড মেরামত ম্যান পেজে তালিকাভুক্ত sane প্রোফাইল ফিরিয়ে আনে, এবং এটি কেবল একটি টার্মিনালে প্রভাব ফেলে। এডিটর যদি সেই টার্মিনালে এখনো অসংরক্ষিত কাজ ধরে রাখে, কাজ সংরক্ষণ না হওয়া পর্যন্ত এটি ছেড়ে দিন।
অন্য শেল থেকে জমে যাওয়া ডিভাইসটিকে স্পষ্টভাবে লক্ষ্য করুন যাতে আপনি যে টার্মিনালে কাজ করছেন সেটি অক্ষত থাকে।
stty -F /dev/pts/7 -a
stty -F /dev/pts/7 sane
নষ্ট ডিসপ্লেসহ ফাঁকা স্ক্রিন ভাঙা লাইন-ডিসিপ্লিন থেকে আলাদা সমস্যা, এবং reset প্রোগ্রাম টার্মিনাল ইনিশিয়ালাইজেশন সিকোয়েন্স পাঠিয়ে তা সমাধান করে। আগে অবস্থা মেরামত চেষ্টা করুন, কারণ এটি এমন সেটিংস বদলায় যা আপনি পরিদর্শন করতে পারেন, অন্যদিকে reset সিকোয়েন্স স্ক্রিন পুনর্লিখন করে এবং এটি কীভাবে ভেঙেছে সে সম্পর্কে কিছুই বলে না।
বিশ্বাসযোগ্য জমাটের পেছনে Ctrl-S ফাঁদ
যখন সফটওয়্যার ফ্লো নিয়ন্ত্রণ সক্রিয় থাকে এবং স্বাভাবিক অক্ষরগুলো বরাদ্দ থাকে, Ctrl-S টার্মিনালকে আউটপুট পাঠানো বন্ধ করতে বলে এবং Ctrl-Q পুনরায় শুরু করতে বলে। সেশনটি সর্বত্র জীবিত থাকে, একটি Ctrl-Q-ই প্রায়ই পুরো মেরামত, এবং কোনো লগে কিছুই দেখা যায় না, এভাবেই এটি এত এস্কেলেশন থেকে বেঁচে যায়।
ধরে নেওয়ার বদলে প্রকৃত সেটিংস পরিদর্শন করুন। শুরু ও থামার অক্ষর পুনর্বিন্যাস বা নিষ্ক্রিয় করা যায়, এবং ফ্লো নিয়ন্ত্রণ বন্ধ টার্মিনাল কোনোটিতেই সাড়া দেবে না।
যদি অবস্থা ফিরে আসে, বা SSH নিজেই আটকে যায়
বারবার খারাপ অবস্থা এমন কিছুকে নির্দেশ করে যা ফ্ল্যাগ বদলায় কিন্তু ফিরিয়ে আনে না: একটি স্টার্টআপ ফাইল, একটি র্যাপার স্ক্রিপ্ট, ভুল উইন্ডো রিসেট করা একটি মাল্টিপ্লেক্সার, বা raw মোড ধরে রেখে মরে যাওয়া একটি অ্যাপ্লিকেশন। নিঃশর্ত রিসেটের বদলে অবস্থা জানায় এমন একটি শর্তসাপেক্ষ পরীক্ষা যোগ করুন, কারণ সামগ্রিক রিসেট কারণ লুকায় এবং ইচ্ছাকৃত সেটিংস উপেক্ষা করতে পারে।
যখন সাধারণ SSH ট্রাফিকও আটকে যায়, বা মেরামত কিছুই বদলায় না, টার্মিনাল আর সন্দেহভাজন থাকে না।
ssh -vvv [email protected]
ping -M do -s 1400 -c 3 host.example.com
শুধু বড় ট্রান্সফারের সময় দেখা যাওয়া আটকে যাওয়া পথের MTU সমস্যা নির্দেশ করে, আর যা একক কীস্ট্রোকও গিলে ফেলে তা প্যাকেটের আকার নয়, পথ বা সার্ভারকে নির্দেশ করে। টার্মিনালের প্রমাণ নেটওয়ার্কের প্রমাণ থেকে আলাদা রাখুন, কারণ দ্বিতীয় সেশনে কাজ করা এডিটর প্রমাণ নয় যে প্রথম টার্মিনাল কখনো সুস্থ ছিল।