সমস্যা সমাধান
এই পৃষ্ঠা Mobile SSH-এর সাধারণ সমস্যা এবং সার্ভার-সাইড SSH সেটিংস বদলানোর আগে চালানো প্রথম পরীক্ষাগুলো কভার করে।
সংযোগ করা যাচ্ছে না
পরীক্ষা করুন:
- ডিভাইসের নেটওয়ার্ক অ্যাক্সেস আছে।
- সার্ভারের হোস্টনাম বা IP ঠিকানা সঠিক।
- SSH পোর্ট সঠিক, সাধারণত
22। - কোনো ফায়ারওয়াল, VPN, ক্যারিয়ার নেটওয়ার্ক বা Wi-Fi নেটওয়ার্ক পোর্ট ব্লক করছে না।
- SSH সার্ভার চলছে এবং আপনার ব্যবহৃত নেটওয়ার্ক থেকে সংযোগ গ্রহণ করছে।
একই হোস্ট অন্য ডিভাইস থেকে কাজ করলে সঠিক হোস্ট, পোর্ট, ব্যবহারকারীর নাম, কী এবং নেটওয়ার্ক পথ তুলনা করুন।
সার্ভার পরিচয় যাচাই দরকার
দুই প্ল্যাটফর্ম পরিচয়তথ্য পাঠানোর আগে SSH সার্ভার যাচাই করে। iOS নতুন হোস্ট কীতে ফিঙ্গারপ্রিন্ট নিশ্চিত করে বিশ্বাস করে আবার যুক্ত হন চায়। Android-এর সেটিংস → সাধারণ → নিরাপত্তা → নতুন SSH পরিচয় স্বয়ংক্রিয়ভাবে গ্রহণ করুন ডিফল্ট চালু: প্রথম সাধারণ কী রাখে, পরেরগুলো মিলতে হয়। নতুন ফিঙ্গারপ্রিন্ট আগে দেখতে এটি বন্ধ করুন।
নতুন বা বদলানো কী-এর SHA-256 ফিঙ্গারপ্রিন্ট বিশ্বস্ত মাধ্যমে প্রশাসকের সঙ্গে মিলান। সার্ভার বদল বা অপ্রত্যাশিত সার্ভার হতে পারে; কারণ যাচাই না করে পুরোনো পরিচয় মুছবেন না। সেটিংসে পরিচয় দেখুন। বিকল্প ঠিকানা ও জাম্প হোস্ট যাচাই এড়ায় না।
Android সীমিত হোস্ট সার্টিফিকেট কর্তৃপক্ষ ও প্রত্যাহারও সমর্থন করে। অচেনা কর্তৃপক্ষ, মেয়াদোত্তীর্ণ/অবৈধ সার্টিফিকেট ও প্রত্যাহৃত কী স্বয়ংক্রিয় প্রথম গ্রহণেও আটকায়। iOS সেটিংস → সার্ভার পরিচয় → প্রত্যাহৃত কী আমদানি সীমিত OpenSSH @revoked Ed25519/ECDSA এন্ট্রি নেয়। অসমর্থিত এন্ট্রি মেশানো পেস্ট পুরো বাতিল হয়; CA এন্ট্রি, সার্টিফিকেট, RSA কী ও হ্যাশ করা হোস্টনাম অসমর্থিত। নতুন সংযোগ/পুনঃসংযোগে প্রত্যাহার পুরোনো বিশ্বাসকে ছাপিয়ে যায়, কিন্তু চলমান সংযোগ বন্ধ করে না। পরিচয় ও প্রত্যাহার ব্যাকআপের বাইরে। iOS Share Extension-এর আগে অচেনা সার্ভার মূল অ্যাপে যাচাই করুন।
জাম্প হোস্ট দিয়ে সংযোগ হচ্ছে না
প্রতি ব্যাস্টিয়নের ঠিকানা ও পরিচয়তথ্য দেখুন; ফোনকে প্রথম ধাপে পৌঁছাতে হবে। পরের হোস্ট আগের সার্ভার থেকে গম্য চাই। permitopen-সহ TCP ফরওয়ার্ড অনুমতি দরকার। রুট SSH হবে, লুপ থাকবে না এবং প্রসারিত ধাপ আটের বেশি নয়।
মুছে যাওয়া বা না-পাওয়া ব্যাস্টিয়ন সরাসরি সংযোগে ফেরে না। সংরক্ষিত রুট ঠিক করে আবার যুক্ত হন। Android অবস্থা ও লগইন লগ ব্যর্থ ধাপকে শেষ সার্ভার থেকে আলাদা দেখায়।
প্রমাণীকরণ ব্যর্থ
পরীক্ষা করুন:
- ব্যবহারকারীর নামের বানান।
- পাসওয়ার্ড বা কী পাসফ্রেজ।
- সার্ভার পাসওয়ার্ড লগইন, কী লগইন, না উভয় অনুমতি দেয়।
- প্রাইভেট কী সার্ভার ব্যবহারকারীর
authorized_keys-এর কোনো পাবলিক কী-এর সাথে মেলে কিনা। - কী ফাইল সম্পূর্ণভাবে আমদানি হয়েছে কিনা, হেডার ও ফুটার লাইনসহ।
এনক্রিপ্ট করা প্রাইভেট কী-এর জন্য পাসওয়ার্ড/পাসফ্রেজ ফিল্ডে পাসফ্রেজ লিখুন।
Android-এ রিমোট ssh বা git-এর জন্য সার্ভারের SSH এজেন্ট ফরওয়ার্ড করুন এবং সার্ভারের অনুমতি চাই। কেবল সংরক্ষিত ব্যবহারযোগ্য কী দেওয়া হয়। অপেক্ষমাণ অনুমোদন/প্রত্যাখ্যান বা নিরাপত্তা-কী প্রম্পট সেই সংযোগের টার্মিনাল, ফাইল ট্রান্সফার ও টানেল 30 সেকেন্ড পর্যন্ত থামাতে পারে; অ্যাপ বা বিজ্ঞপ্তিতে উত্তর দিন।
প্রাইভেট কী আমদানি ব্যর্থ
প্রাইভেট কী আমদানি সিস্টেম ফাইল পিকার ব্যবহার করে। আমদানি ব্যর্থ হলে:
- নিশ্চিত করুন নির্বাচিত ফাইলটি একটি প্রাইভেট কী, পাবলিক
.pubফাইল নয়। - ফাইলটি বিশ্বস্ত টেক্সট এডিটরে খুলুন এবং যাচাই করুন এতে সম্পূর্ণ কী ব্লক আছে।
- কী-টি প্রাইভেট কী ফিল্ডে হাতে পেস্ট করার চেষ্টা করুন।
- নিশ্চিত করুন কী টাইপ সমর্থিত: Android-এ Ed25519, ECDSA (P-256/384/521) বা RSA; iOS-এ Ed25519 বা ECDSA। DSA (
ssh-dss) কোনোটিতেই কাজ করে না, এবং iOS RSA সমর্থন করে না — এর বদলে একটি Ed25519 কী তৈরি করুন।
Android-এ নিরাপত্তা কী সাড়া দিচ্ছে না
Android USB/NFC দিয়ে CTAP2/FIDO2 ed25519-sk ও ecdsa-sk সমর্থন করে। আমদানি করা পরিচয় যে আসল কীতে তৈরি হয়েছে সেটিই ব্যবহার করুন। USB হোস্ট সমর্থন/অনুমতি চাই; NFC চালু রেখে কাজ শেষ হওয়া পর্যন্ত কী ফোনের কাছে রাখুন। চাইলে PIN দিয়ে কী স্পর্শ করুন।
সার্ভারে OpenSSH 8.2 বা নতুন এবং বাছা sk-* অ্যালগরিদম চাই। শুধু U2F কী ও রেসিডেন্ট পরিচয় খোঁজা অসমর্থিত। কী খুঁজতে লগইন মেয়াদ ফুরোতে পারে; আগে প্রস্তুত রাখুন। ব্যাকগ্রাউন্ড অনুরোধে কী-এর বিজ্ঞপ্তি খুলুন বা অ্যাপে ফিরুন। iOS হার্ডওয়্যার নিরাপত্তা-কী প্রমাণীকরণ দেয় না।
কীবোর্ড ইনপুট বিলম্বিত বা পরিবর্তিত
Android সরাসরি কীবোর্ড ইনপুট দেয়; স্বয়ংসংশোধন ও অনুমানভিত্তিক পরামর্শ বন্ধ। iOS-এ কণ্ঠলিখন ও পরামর্শ ডিফল্ট চালু, যা কণ্ঠ ও বর্তমান লাইনের সংশোধন দেয়। অপ্রত্যাশিত বদল হলে বন্ধ করুন, কীবোর্ড পরামর্শ দেখুন এবং নতুন পেন খুলুন।
ESC, TAB, CTRL, তীর, HOME, END, PGUP, PGDN-এর অতিরিক্ত কী সারি নিন। থেমে যাওয়া নেটওয়ার্কও দেরি করে। Android হেডার উত্তর নেই বা পাঠানো হয়নি দেখায়; পুনঃসংযোগে লেখা বাদ যায়, নতুন শেলে পুনরায় পাঠায় না। সংযোগ ও প্রম্পট দেখে দরকারি লেখাই আবার দিন।
tmux স্ক্রলিং প্রত্যাশিত নয়
Mobile SSH টার্মিনাল অবস্থার উপর ভিত্তি করে স্ক্রল আচরণ বদলায়। tmux বা অন্যান্য বিকল্প-স্ক্রিন প্রোগ্রামে স্ক্রল অঙ্গভঙ্গি লোকাল ইতিহাস স্ক্রল না করে tmux কপি-মোড কমান্ড পাঠাতে পারে। tmux মাউস মোড সক্ষম থাকলে অ্যাপ মাউস-হুইল এস্কেপ সিকোয়েন্স পাঠায়।
স্ক্রলিং ভুল মনে হলে:
- রিমোট সার্ভারে tmux মাউস মোড সক্ষম বা নিষ্ক্রিয় করার চেষ্টা করুন।
- অতিরিক্ত কী সারির
PGUPওPGDNব্যবহার করুন। - ঘন আউটপুট স্ক্রল করার আগে ফুলস্ক্রিনের জন্য প্যানে ডাবল-ট্যাপ করুন।
- রিমোট টার্মিনালের আকার পুরোনো মনে হলে tmux থেকে ডিটাচ ও পুনরায় অ্যাটাচ করুন।
Android-এ স্বাভাবিক কপি-মোড চিহ্ন থাকলে নিচে স্ক্রল করে অ্যাপের tmux কপি মোড ছাড়া যায়। চিহ্ন ছাড়া কাস্টম বা ভাগ করা বিন্যাসে নিজে বেরোতে হতে পারে। সেশন বদলালে নামের সঙ্গে ম্যানেজারের সার্ভার ও tmux সকেট দেখুন।
স্ক্রিন লক হওয়ার পর সেশন বিচ্ছিন্ন
Android-এ Mobile SSH বিচ্ছিন্নতা কমাতে keepalive, ফোরগ্রাউন্ড সার্ভিস, ওয়েক লক, Wi-Fi লক এবং পুনঃসংযোগ চেষ্টা ব্যবহার করে। Android ব্যাটারি নীতি তবু ব্যাকগ্রাউন্ড কাজ থামাতে পারে।
পরীক্ষা করুন:
- আপনার ডিভাইস ব্যাকগ্রাউন্ড অ্যাপ আক্রমণাত্মকভাবে থামালে Mobile SSH-এর জন্য ব্যাটারি অপ্টিমাইজেশন নিষ্ক্রিয় করুন।
- দীর্ঘ সেশনের সময় Wi-Fi বা মোবাইল ডেটা স্থিতিশীল রাখুন।
- আনলক করার পর Mobile SSH আবার খুলুন এবং Active Sessions ট্যাপ করুন।
- অ্যাপটি সোয়াইপ করে সরিয়ে দিলেও শেল টিকে থাকুক চাইলে Settings-এ Keep sessions running in background চালু আছে কিনা দেখুন।
- সার্ভার SSH সেশন বিচ্ছিন্ন করলে হোম স্ক্রিন থেকে পুনঃসংযোগ করুন — Continue কী কী এখনও সচল তা দেখায়, আর Tmux sessions সার্ভারে কী অপেক্ষা করছে তা দেখায়।
iOS ব্যাকগ্রাউন্ডে অ্যাপ স্থগিত করে; অন্য অ্যাপে বা লকস্ক্রিনে গেলে সাধারণ SSH অনির্দিষ্টকাল থাকে না। অল্প সময়ের ছাড় দ্রুত অ্যাপ বদল সামলায়। সংযোগে যুক্ত করুন-এ tmux, Herdr বা Zellij, অথবা Eternal Terminal নিন। সার্ভারে মাল্টিপ্লেক্সার চলতে হবে; Eternal Terminal জাম্প রুট নিতে পারে না।
ফাইল ট্রান্সফার ফোন ফাইল ব্রাউজ করতে পারছে না
Mobile SSH Android-এ কোনো স্টোরেজ অনুমতি চায় না। এর বদলে লোকাল প্যান সিস্টেমের ফোল্ডার পিকার দিয়ে আপনার দেওয়া একটিমাত্র ফোল্ডার দেখায় — ফাঁকা থাকলে Pick folder দিয়ে একটি ফোল্ডার বেছে নিন। অনুমতিটি টিকে থাকে, তাই এটি একবারের কাজ।
রিমোট ফাইল লোড হলেও লোকাল না হলে SSH সংযোগ ঠিকই আছে, আপনি কেবল এখনও কোনো ফোল্ডারের অনুমতি দেননি।
iOS স্থানীয় পেন অ্যাপের নথির জায়গায় শুরু হয়। আমার ফোন → স্থানীয় ফোল্ডার বাছুন অন্য Files ফোল্ডার মনে রাখে। প্রদানকারী/অনুমতি না পেলে আবার বাছুন বা অ্যাপ ফোল্ডারে যান। অ্যাপ ডাউনলোড আমার iPhone-এ, বাইরের ফাইল প্রদানকারীর জায়গায় থাকে। ব্যাকআপে ফোল্ডার অনুমতি যায় না।
আপলোড বা ডাউনলোড ব্যর্থ
পরীক্ষা করুন:
- SSH সেশন এখনও সংযুক্ত।
- রিমোট ডিরেক্টরি বিদ্যমান।
- রিমোট ব্যবহারকারীর পথ পড়া বা লেখার অনুমতি আছে।
- লোকাল গন্তব্য লেখযোগ্য।
- ডিভাইসে যথেষ্ট খালি জায়গা আছে।
- বড় ট্রান্সফারের জন্য নেটওয়ার্ক স্থিতিশীল।
পোর্ট ফরওয়ার্ড ব্যর্থ
পরীক্ষা করুন:
- লোকাল পোর্ট
1থেকে65535-এর মধ্যে। - লোকাল পোর্ট ইতিমধ্যে ব্যবহৃত নয়।
- টানেল স্ট্রিং
PORTবাLOCAL:REMOTEHOST:REMOTE। - রিমোট হোস্ট ও রিমোট পোর্ট SSH সার্ভার থেকে পৌঁছানো যায়।
- SSH সার্ভার TCP ফরওয়ার্ডিং অনুমতি দেয়।
Android-এ VPN বা প্রক্সি ট্র্যাফিক নিচ্ছে না
- VPN থেকে সঠিক প্রোফাইল চালিয়ে Android অনুমতি দিন। ডিভাইস VPN আগেরটি বদলায়; অন্য VPN রাখতে স্থানীয় SOCKS5 নিন।
- SSH VPN-এ সার্ভার, জাম্প হোস্ট, পরিচয়, TCP ফরওয়ার্ড ও অ্যাপ/ওয়েবসাইট নির্বাচন দেখুন। SSH TCP/DNS নেয়, সাধারণ UDP নয়।
- SOCKS5 ক্লায়েন্টে লুপব্যাক ঠিকানা, পোর্ট, পাসওয়ার্ড ও রিমোট DNS দিন। প্রক্সি চললে সব অ্যাপ নিজে থেকে ঘোরে না।
- WireGuard হ্যান্ডশেক, কী,
AllowedIPs, DNS দেখুন। Shadowsocks সাইফার/পাসওয়ার্ড মেলান এবং DNS-এর UDP রিলে দেখুন। - OpenVPN-এ সমর্থিত স্বয়ংসম্পূর্ণ প্রোফাইল, CA/সার্ভার পরিচয় ও পরিচয়তথ্য দেখুন; পূর্ণ টানেলে VPN DNS দিন। প্রমাণীকরণ/সার্টিফিকেট ঠিক করে প্রোফাইল থামিয়ে চালান।
SSH VPN, Shadowsocks ও OpenVPN পুনঃসংযোগে ধরা ট্র্যাফিক সরাসরি না পাঠিয়ে আটকাতে পারে। থামালে সুরক্ষা শেষ। সার্ভারের প্রদানকারী/প্রশাসকের ইন্টারনেট সীমা VPN কাটাতে পারে না।
ব্যাকআপে সব ফেরেনি
প্রিভিউ এবং মার্জ বা প্রতিস্থাপন দেখুন। পুরোনো/আংশিক ব্যাকআপের অনুপস্থিত অংশ বদলায় না। পূর্ণ ব্যাকআপে সমর্থিত অ্যাপ পছন্দ; Android-এ VPN/প্রক্সি প্রোফাইলও। সব প্ল্যাটফর্মের জিনিস iOS-এ যায় না; পুরোনো অ্যাপ নতুন পূর্ণ বিন্যাস প্রত্যাখ্যান করতে পারে।
হোস্ট পরিচয়, সিস্টেম অনুমতি ও নির্বাচিত ফোল্ডারের প্রবেশ ডিভাইসে থাকে। নতুন ডিভাইসে হোস্ট যাচাই ও ফোল্ডার/VPN অনুমতি দিন। হার্ডওয়্যার পরিচয়ে আসল কী চাই। প্রোফাইল আনলে VPN শুরু হয় না; আগে দেখুন।
রিমোট ডেস্কটপ নেই বা আকার বদলায় না
যুক্ত SSH সেশন থেকে ডেস্কটপ খুলুন। সার্ভারের স্থানীয় TCP ফরওয়ার্ড অনুমতি দেখুন। Linux-এ অনুপস্থিত প্যাকেজের বার্তা মেনে ডেস্কটপ/VNC বসান। Android Wayland কনসোল মিরর করে না; সমর্থিত ভার্চুয়াল ডেস্কটপ নিন।
Mac সেটিংসে Screen Sharing চালান। Android Mac অ্যাকাউন্ট দিয়ে প্রমাণীকরণ সমর্থন করে; iOS-এর জন্য Screen Sharing-এ প্রচলিত VNC পাসওয়ার্ড প্রবেশ চালু চাই এবং Mac অ্যাকাউন্ট পাসওয়ার্ডের বদলে স্ক্রিন-শেয়ারিং পাসওয়ার্ড ব্যবহার করতে হবে। বর্তমান Mac স্ক্রিন দেখায়; রেজোলিউশন Mac-এ বদলাতে হতে পারে। সার্ভার সমর্থন করলেই ভার্চুয়াল ডেস্কটপ সরাসরি মাপ বদলায়। অ্যাপের তৈরি ডেস্কটপ পুনরারম্ভ নিশ্চিত করতে বলে ও প্রোগ্রাম বন্ধ করে। ভিউয়ার ছাড়লেও রিমোট ডেস্কটপ চলে।
ডিবাগ লগ
দুই প্ল্যাটফর্ম আলাদা আলাদা জিনিস রেকর্ড করে, তাই আপনার সমস্যার সঙ্গে যেটি মেলে সেটিই বেছে নিন।
Android — টার্মিনাল ও রেন্ডারিং। Settings → Debugging → Show Debug and Logs buttons সক্ষম করুন, তারপর স্টার্ট স্ক্রিনে যে Debug বোতামটি দেখা যায় সেটি ব্যবহার করুন। এটি টার্মিনাল ইভেন্ট, SSH ডেটার আকার, টাচ ইনপুট, রিসাইজ আচরণ এবং টানেল জীবনচক্র রেকর্ড করে। রেকর্ডিং শুরু করার আগে এটি সতর্ক করে দেয় যে আপনার টাইপ করা প্রতিটি কী, পাসওয়ার্ডসহ, এতে ধরা পড়ে। থামালে এটি আপনার Downloads ফোল্ডারে একটি আর্কাইভ লেখে।
iOS — সংযোগ ও পুনঃসংযোগ। Settings → Diagnostics → Record debug log চালু করুন। এটি রেকর্ড করে কোন কোন ঠিকানায় সংযোগের চেষ্টা হয়েছিল ও কেন ব্যর্থ হলো, পুনঃসংযোগের চেষ্টা ও তাদের ব্যাকঅফ, বিচ্ছিন্ন হওয়া সংযোগ, “peer stopped answering keepalives”, নেটওয়ার্ক পরিবর্তন, এবং tmux কমান্ড ও তাদের ত্রুটি। Settings একটি লাইভ লাইন গণনা দেখায় যাতে আপনি নিশ্চিত হতে পারেন এটি রেকর্ড করছে, আর Export Debug Log এটিকে একটি টেক্সট ফাইল হিসেবে শেয়ার করে। এটি মেমরিতে রাখা হয় এবং কেবল বর্তমান অ্যাপ সেশনটুকুই ধরে রাখে।
শেয়ার করার আগে যেকোনো ডিবাগ লগ বা আর্কাইভ পর্যালোচনা করুন। এগুলো সমস্যা সমাধানের জন্য এবং সার্ভারের নাম, ঠিকানা, সময় বা অন্যান্য পরিবেশ বিবরণ — আর Android-এ আপনি যা কিছু টাইপ করেছেন তা-ও — প্রকাশ করতে পারে।