قطعی SSH یکی از اعصابخردکنترین مشکلاتی است که هنگام مدیریت سرور لینوکس با آن روبهرو میشوید؛ درست زمانی که وسط اجرای یک دستور مهم هستید، ارتباط بدون هشدار قبلی قطع میشود یا از همان ابتدا با ارورهایی مثل Connection refused و Timeout پشت درِ سرور میمانید.
براساس داکیومنت ساختار اتصال SSH (فایل پیکربندی ssh_config)، قطعی یا عدم اتصال معمولاً خارج از این چهار حالت نیست: متوقف شدن سرویس sshd در پسزمینه، مسدود شدن ترافیک توسط فایروال، وارد کردن پورت اشتباه (یا تغییر نیافتن تنظیمات پورت جدید)، و در نهایت ناپایداری و قطعیهای خود شبکه اینترنت.
در این مقاله قرار نیست با تئوریهای طولانی وقتتان را بگیریم؛ مستقیماً به سراغ ریشهیابی این مشکل میرویم و قدمبهقدم بررسی میکنیم که چطور با چککردن وضعیت سرویس، اصلاح تنظیمات فایروال و کانفیگ درست پورتها، مشکل قطع شدن SSH را برطرف کنید تا اتصالی پایدار و بدون قطعی به سرور خود داشته باشید.
فهرست مطالب
خطاهای رایج SSH

وقتی با قطعی SSH مواجه میشوید، سرور معمولاً با یک پیام خطای مشخص، سرنخِ اصلی را به شما میدهد. شناخت دقیق این ارورها، اولین و مهمترین قدم برای رفع مشکل SSH لینوکس است. اگر میپرسید چرا SSH وصل نمیشود، ابتدا باید ببینید با کدامیک از خطاهای زیر روبهرو هستید:
۱- ارور Connection timed out
این خطا نشان میدهد که کلاینت درخواست اتصال را ارسال کرده، اما سرور در زمان مقرر (Timeout) پاسخی نداده است. معمولاً این نوع مشکل اتصال SSH بهدلیل مسدود بودن پورت ۲۲ در فایروال یا مشکلات مسیریابی شبکه رخ میدهد. طبق بررسیهای توسعهدهندگان در StackOverflow، برای رفع مشکل timeout در SSH در گام اول باید بررسی کنید که آیا سرور اصلاً ترافیکِ ورودی روی پورت SSH را میپذیرد یا خیر.
۲- ارور Connection refused
برخلاف ارور قبلی، در اینجا ارتباط شما به سرور میرسد، اما سرور آن را پس میزند. این خطا غالباً زمانی رخ میدهد که سرویس sshd روی سرور (دان شده یا متوقف) باشد، یا اینکه سرور روی پورت دیگری تنظیم شده باشد و شما درحال تلاش برای اتصال به پورت پیشفرض هستید.
۳- ارور Connection closed
در این حالت، اتصال در ابتدا برقرار میشود اما بلافاصله یا پساز مدت کوتاهی سرور شما را بیرون میاندازد. برای حل مشکل SSH connection closed معمولاً باید بهسراغ بررسی فایل لاگ سرور بروید؛ چرا که مسائلی مانند عدم تطابق کلیدهای SSH (Authentication) یا کمبود منابع سرور باعث این نوع قطع شدن SSH میشوند.
۴- خطای Hostname resolution
اگر بهجای آدرس IP، از نام دامنه (مثل: ssh user@domain.com) برای اتصال استفاده میکنید و این ارور را میبینید، مشکل از سرویس DNS شماست. سیستم نمیتواند نام دامنه را به IP ترجمه کند. طبق بررسیهای انجامشده، برای رفع این مشکل SSH در سرور، کافی است وضعیت اتصال اینترنت خود را بررسی کنید و موقتاً از IP مستقیم سرور (بهجای نام دامنه) برای لاگین استفاده کنید.
علتهای قطعی SSH
قبلاز اینکه بهسراغ کدهای خط فرمان برویم، باید بدانیم اصلاً چه چیزی باعث قطع شدن SSH میشود. برای رفع مشکل SSH لینوکس، عیبیابی کورکورانه کمکی نمیکند؛ بلکه باید ریشه مشکل را پیدا کنید.
برای درک سریعتر، ۵ دلیل اصلی مشکل SSH در سرور را براساس اولویت بررسی در جدول زیر خلاصه کردهایم:
| اولویت بررسی | ریشه اصلی مشکل | ارور و نشانه رایج |
|---|---|---|
| ۱ | خاموش یا متوقف بودن سرویس sshd | Connection refused |
| ۲ | اشتباه در واردکردن پورت اتصالی | Connection refused / Timeout |
| ۳ | مسدود بودن پورت در فایروال سرور | Connection timed out |
| ۴ | مشکلات شبکه یا اینترنت ناپایدار | Timeout / Connection closed |
| ۵ | تنظیمات کلاینت یا کلیدهای نامعتبر | Connection closed / Auth failed |
اگر بخواهیم این موارد را کمی فنیتر باز کنیم:
- خاموش بودن سرویس sshd: سادهترین دلیل عدم اتصال، متوقف بودن (یا Crash کردن) سرویس SSH روی خود سرور لینوکس است. تا زمانی که این سرویس درحال اجرا نباشد، سرور هیچ درخواستی را نمیپذیرد.
- اشتباه در پورت اتصالی: کارشناسان تاکید میکنند که تغییر پورت پیشفرض (۲۲) یکی از اولین اقدامات امنیتی مدیران سرور است. اگر پورت سرور تغییر کرده باشد و شما همچنان به پورت ۲۲ درخواست بفرستید، قطعا با شکست مواجه میشوید.
- مسدودیت فایروال: بررسی فایروال SSH یک گام حیاتی است. اگر قوانین (Rules) فایروالِ سیستمعامل، ترافیک ورودی به پورت SSH را مسدود کرده باشد، ارتباط در نطفه خفه میشود.
- اینترنت ضعیف و اختلال شبکه: طبق مباحث و تجربیات توسعهدهندگان در StackOverflow، بروز مشکل SSH در اینترنت ضعیف بسیار شایع است. در این حالت، پکتهای شبکه در مسیر گم میشوند. در این شرایط باید مطمئن شوید که ارتباط اینترنتی شما استیبل است و مسیر شبکه تا سرور دچار اختلال (Packet Loss) نیست.
- کلاینت نامعتبر: در نهایت، گاهی مشکل اصلاً از سمت سرور نیست. نرمافزار کلاینت شما (مثل PuTTY یا ترمینال) مشکل دارد یا کلیدهای امنیتی بهدرستی در سیستم کلاینت تنظیم نشدهاند.
چکلیست رفع مشکل SSH

وقتی ارتباط با سرور قطع میشود و با خطاهایی مثل Connection refused یا Connection timed out مواجه میشوید، اولین غریزه شاید ریبوت کردن سرور باشد. اما یک ادمین باتجربه میداند که رفع مشکل SSH نیازی به حدسوگمان ندارد؛ بلکه باید یک مسیر عیبیابی خطی را طی کرد.
در ادامه چکلیستی که بارها در شرایط بحرانی سرورها ما را نجات داده است، باهم مرور میکنیم:
۱. تست پینگ (گام اول شبکه)
قبلاز درگیر شدن با پورتها، باید بدانیم آیا سرور اصلاً در شبکه زنده و فعال است؟
ping your_server_ip
اگر پاسخ Request timed out گرفتید، مشکل از لایهی شبکه، قطعی اینترنت شما یا مسدود شدن ترافیک در سطح دیتاسنتر است. اما اگر پینگ دارید و فقط SSH وصل نمیشود به مرحلهی بعد بروید.
۲. بررسی وضعیت سرویس SSH
ازطریق کنسول VNC (در پنل ابر فردوسی یا ارائهدهندهی سرور خود) وارد محیط سیستمعامل شوید. آیا سرویس sshd اصلاً درحال اجراست؟
sudo systemctl status ssh
اگر وضعیت inactive یا failed بود، با دستور sudo systemctl restart ssh آن را مجدداً راهاندازی کنید.
۳. اطمینان از صحّت پورت
گاهی مشکل سادهتر از این حرفها است. اگر برای امنیت بیشتر، پورت پیشفرض (۲۲) را تغییر دادهاید، حتماً هنگام اتصال آن را با سوئیچ -p در ترمینال یا در تنظیمات نرمافزارهایی مثل Putty وارد کنید.
۴. عبور از سد فایروال (UFW)
یکی از رایجترین دلایل مسدود شدن دسترسی، تنظیمات سختگیرانهی فایروال است. بهگفته DigitalOcean برای مدیریت UFW در سرورهای اوبونتو، ابتدا باید وضعیت فایروال را چک کنید:
sudo ufw status
اگر فایروال active است اما پورت شما در لیست ALLOW قرار ندارد، باید مسیر را باز کنید. برای پورت پیشفرض از دستور sudo ufw allow ssh و اگر پورت را تغییر دادهاید (مثلاً به ۲۲۲۲) از sudo ufw allow 2222/tcp استفاده کنید.
۵. بررسی لاگها
اگر شبکه، سرویس و فایروال مشکلی نداشتند اما هنوز با خطای Access Denied یا مشکلات کلید عمومی (Public Key) روبهرو هستید، لاگها واقعیت را به شما میگویند. برای پیدا کردن ردپای مشکل، لاگهای احراز هویت را بررسی کنید:
tail -n 50 /var/log/auth.log
(نکته: در توزیعهای دبیان/اوبونتو مسیر لاگ /var/log/auth.log و در توزیعهای مبتنی بر RedHat مثل راکی لینوکس مسیر /var/log/secure است).
طی کردن قدمبهقدم این ۵ مرحله، شما را از سردرگمی در لحظات قطعی نجات میدهد و مستقیماً به ریشهی مشکل میرساند.
رفع قطعی SSH در لینوکس

گاهی اوقات مشکل قطعی SSH از شبکه یا فایروال نیست؛ بلکه خود سرور لینوکسی شما آمادهی پذیرش مهمان نیست. وقتی با خطاهایی مثل Connection refused مواجه میشوید، قبلاز هر چیز باید مطمئن شویم که سرویس اصلی اصلاً روی سرور وجود دارد و بیدار است.
در بسیاری از توزیعهای سبک یا نسخههای مینیمال لینوکس، پکیج سرور SSH بهصورت پیشفرض نصب نیست. پس در قدم اول (ازطریق کنسول دیتاسنتر) بررسی کنید که آیا openssh-server نصب شده است یا خیر. در اوبونتو و دبیان میتوانید با اجرای sudo apt install openssh-server این پکیج را نصب کنید.
بعداز اطمینان از نصب بودن، نوبت به بررسی وضعیت Daemon یا همان سرویس پسزمینه میرسد:
sudo systemctl status ssh
(در سرورهای مبتنی بر RHEL مثل CentOS یا راکی لینوکس، نام سرویس sshd است).
اگر سرویس متوقف شده بود، با sudo systemctl start ssh آن را بیدار کنید و برای استارت خودکار بعداز ریبوت، sudo systemctl enable ssh را فراموش نکنید.
اما اگر سرویس درحال اجرا است و هنوز نمیتوانید وصل شوید، باید به سراغ جعبهسیاه سرور، یعنی لاگها بروید. سیستمعامل تمام تلاشهای موفق و ناموفق برای ورود را ثبت میکند. اگر درحال رفع مشکل SSH در لینوکس اوبونتو هستید، با دستور tail -f /var/log/auth.log و در توزیعهای ردت با tail -f /var/log/secure میتوانید بهصورت زنده ببینید که وقتی قصد ورود دارید، دقیقاً چه خطایی (مثلاً مسدود شدن آیپی توسط Fail2Ban یا خطای کلید رمزنگاری) رخ میدهد.
تنظیمات ضد قطعی SSH (جلوگیری از Timeout)
حتماً برایتان پیشآمده که بعداز لاگین به سرور، چند دقیقه برای نوشتن یک کامند یا خوردن قهوه از ترمینال فاصله گرفتهاید و وقتی برگشتید، با یک صفحهی فریز شده یا خطای اعصابخردکن Write failed: Broken pipe روبهرو شدهاید. این مشکل معمولاً بهدلیل مکانیزمهای ذخیرهی انرژی در روترها، NAT یا فایروالهای بین مسیر رخ میدهد که نشستهای (Sessions) بدون فعالیت را قطع میکنند.
برای جلوگیری از قطعی اساساچ یا همان Timeout، باید به سرور و کلاینت بفهمانیم که «ما هنوز اینجاییم، ارتباط را قطع نکن!». این کار با ارسال پکتهای خالی (تنظیم keepalive در SSH) انجام میشود.
تنظیمات سمت کلاینت (سیستم خودتان):
بهترین و امنترین راه این است که سیستم خودتان را موظف کنید هر چند ثانیه یک پالس برای سرور بفرستد. در لینوکس یا مک، فایل ~/.ssh/config را باز کنید (اگر نیست بسازید) و مقادیر زیر را به آن اضافه کنید:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
این کانفیگ به کلاینت SSH میگوید: «هر ۶۰ ثانیه یک پیام وضعیت برای سرور بفرست. اگر ۳ بار جواب نداد، آنوقت ارتباط را قطع کن».
تنظیمات سمت سرور:
اگر مدیر سرور هستید و میخواهید این پایداری را برای تمام کاربرانتان تضمین کنید، فایل /etc/ssh/sshd_config را در سرور باز کنید و بهدنبال این دو خط بگردید (یا اضافه کنید):
ClientAliveInterval 120
ClientAliveCountMax 2
این یعنی سرور هر ۱۲۰ ثانیه کلاینت را چک میکند. بعداز ذخیرهی فایل، حتماً سرویس SSH را با sudo systemctl restart ssh ریاستارت کنید تا تغییرات اعمال شوند. با همین دو ترفند ساده، نشستهای SSH شما مثل کوه پایدار خواهند ماند.
تغییر پورت SSH
پورت پیشفرض SSH یعنی ۲۲، اولین هدفی است که رباتها و اسکنرهای اینترنتی به سراغ آن میروند. شاید بپرسید این موضوع چه ربطی به قطعی SSH دارد؟ وقتی سرور شما در معرض حملات بروتفورس (Brute-force) قرار میگیرد، ترافیک ورودی به پورت ۲۲ بهشدت بالا میرود. این ترافیک مزاحم میتواند باعث تداخل، درگیری منابع سیستم و در نهایت افتادن کانکشن (همان Connection dropped) شود.
یکی از راهحلهای ساده برای کاهش قطعی SSH و افزایش پایداری، تغییر این پورت استاندارد است. با انتقال ترافیک به یک پورت غیرمعمول (مثلاً محدودهی بین ۱۰۰۰۰ تا ۶۵۰۰۰)، سرور خود را از دید بسیاری از اسکنرهای خودکار پنهان میکنید.
نکته حیاتی قبلاز تغییر:
- ابتدا پورت جدید را در فایروال سرور (مثل UFW یا فایروال دیتاسنتر) باز کنید.
- سپس در فایل /etc/ssh/sshd_config مقدار Port 22 را به پورت دلخواه تغییر دهید.
- در نهایت سرویس sshd را ریاستارت کنید.
فراموش کردن آپدیت فایروال مساوی است با قفل شدن دسترسی خودتان به سرور! برای مشاهدهی مراحل گامبهگام، کانفیگها و جلوگیری از بروز خطا، پیشنهاد میکنم آموزش تغییر پورت SSH ما را مطالعه کنید.
رفع مشکل SSH در اینترنت ضعیف (پروتکل Mosh)

کار با ترمینال لینوکس روی شبکههای ناپایدار -مخصوصا در شرایط اینترنت ملی- تجربهای عذابآور است. مشکل SSH در ایران یا اختلالات لحظهای اینترنت باعث میشود پروتکل TCP (که پایهی اتصال SSH است) گیج شود. در این شرایط، حتی اگر تنظیمات Keepalive را هم که پیشتر گفتیم بهدقت انجام داده باشید، با عوضکردن اینترنت از وایفای به دیتای موبایل یا درصورت قطع شدن SSH در اینترنت ملی، کانکشن شما از دست میرود و خطای Broken pipe یا Connection reset by peer روی صفحه نقش میبندد.
برای حل مشکل اتصال SSH در شبکههای پرنوسان، وقت آن است که ابزارهای سنتی را کنار بگذارید و بهسراغ Mosh (Mobile Shell) بروید.
چرا استفاده از Mosh به جای SSH راهکار بهتری است؟
برخلاف SSH، نرمافزار Mosh برای همگامسازی اطلاعات از پروتکل UDP استفاده میکند. این تغییر ساختاری، دو مزیت فوقالعاده برای شما بههمراه دارد:
- پایداری در جابهجایی (Roaming): اگر IP شما تغییر کند (مثلاً لپتاپ را ببندید و در کافهی دیگری باز کنید) یا اینترنت چند ثانیه قطع شود، سشن شما قطع نمیشود؛ Mosh منتظر میماند و دقیقاً از همانجا که بودید ادامه میدهد.
- واکنشگرایی محلی: Mosh تایپ کردن شما را در سمت کلاینت پیشبینی و پردازش میکند؛ یعنی حتی اگر پینگ شما بالا باشد، کاراکترها بلافاصله روی صفحه تایپ میشوند و ترمینال فریز نمیشود.
در جدول زیر یک مقایسه سریع بین این دو ابزار انجام دادهایم:
| ویژگی | SSH (سنتی) | Mosh (موبایل شل) |
|---|---|---|
| پروتکل ارتباطی | TCP | UDP |
| واکنش به قطعی لحظهای اینترنت | بسیار ضعیف (قطع نشست و نیاز به لاگین مجدد) | عالی (انتظار و بازیابی خودکار نشست) |
| تغییر IP کلاینت (سوییچ شبکه) | افتادن کانکشن (Disconnect) | حفظ اتصال بدون هیچگونه مشکل |
| تجربه تایپ در پینگ بالا | کند، با تاخیر کلافهکننده (Lag) | روان و بدون تاخیر |
برای رفع قطعی SSH در لینوکس، آنهم در شرایط ناپایدار، کافیست با دستوری مثل sudo apt install mosh آن را روی کلاینت و سرور خود نصب کنید. ازاینپس برای اتصال، بهجای عبارت ssh، از دستور mosh user@server_ip استفاده کنید تا دیگر نگران نوسانات شبکه نباشید.
وقتی مشکل از اینترنت نیست
گاهی تمام چکلیستهای عیبیابی را موبهمو اجرا میکنید، اینترنت هم کاملاً پایدار است، اما باز هم قطعی SSH کلافهتان میکند! در این شرایط، مشکل نه از شماست و نه از تنظیمات لینوکس؛ بلکه زیرساخت فرسوده و منابع ناپایدار سرور درحال دراپکردن کانکشنها هستند. استفاده از سرورهای بیکیفیت با منابع اشتراکی، قاتلِ ناشناس ارتباطات پایدار است.
برای داشتن اتصالی بدون قطعی، مهمترین چیزی که نیازی دارید سروری ابری است که منابع اختصاصی و سختافزار قدرتمند (نظیر سرورهای نسل جدید HPE، پردازندههای پرچمدار، رم DDR4 و هارد NVMe) را در محیطی کاملاً ایزوله به شما ارائه دهد.
اگر هنوز با کارکرد دقیق این زیرساخت آشنا نیستید، پیشنهاد میکنم ابتدا مقاله زیر را مطالعه فرمایید.
بنابراین اگر تصمیم دارید با یک سرور پایدار، دارای فایروال پیشرفته و امکان پرداخت ساعتی، برای همیشه به مشکل اتصال SSH پایان دهید، میتوانید همین حالا با ۱۰۰ هزارتومان اعتبار رایگان تست، بهترین سرور ابری را در ابر فردوسی تجربه کنید.
جمعبندی
در این مقاله دیدیم که قطعی SSH همیشه یک مقصر ثابت ندارد. مسدود شدن پورت ۲۲ در فایروال و تنظیمات اشتباه سرویس sshd تا نوسانات اینترنت، همگی میتوانند دلیل قطع شدن SSH باشند. با کمک چکلیست عیبیابی، تنظیم پارامترهای Keepalive در سرور و استفاده از ابزارهای جایگزین مثل Mosh در شبکههای ضعیف، حالا میتوانید پایداری کانکشن خود را تضمین کنید.
شما بیشتر با کدام ارور SSH (مثل Timeout یا Refused) درگیر بودهاید؟ آیا ترفند دیگری برای رفع مشکل SSH لینوکس میشناسید که در این لیست نبوده باشد؟ حتماً در بخش نظرات تجربهتان را بنویسید تا با هم در موردش گپ بزنیم.
منابع:
Stackoverflow | digitalocean | man.openbsd | man7 | oneuptime | mosh
سؤالات متداول
چرا SSH وصل نمیشود و ارور Connection refused میگیرم؟
این ارور یعنی سرور درخواست شما را پس میزند. دلیل آن معمولاً متوقف بودن سرویس sshd روی سرور، وارد کردن پورت اشتباه یا مسدود بودن پورت توسط فایروال است.
چرا اتصال SSH بعد از چند ثانیه timed out میشود؟
خطای Timeout زمانی رخ میدهد که کلاینت پاسخی از سرور دریافت نمیکند. این مشکل معمولاً بهدلیل اختلالات شبکه، مسدود بودن در فایروال، یا خاموش بودن سرور رخ میدهد. برای حل این مورد در اینترنتهای ناپایدار، باید با تنظیم پارامترهای Keepalive اقدام به افزایش timeout SSH کنید.
چرا SSH ناگهان Connection closed میدهد؟
این خطا یعنی ارتباط شما از سمت سرور بهصورت ناگهانی بسته شده است. پُر شدن منابع سرور (رم یا پردازنده) یا محدودیتهای سختگیرانه فایروال معمولاً دلیل این اتفاق هستند. برای رفع مشکل disconnect شدن SSH در این حالت، بررسی لاگ بهترین راهنمای اقدام برای شما خواهد بود.
خطای Hostname resolution در SSH یعنی چه؟
این یعنی سیستم شما نمیتواند نام دامنه (مثل ferdowsi.cloud) را به IP سرور ترجمه کند (مشکل DNS). برای رفع سریع، بهجای دامنه مستقیماً آیپی (IP) سرور را وارد کنید.
چطور بفهمم مشکل از DNS است یا از خود سرور؟
کافیست یکبار آدرس سرور را با نام دامنه و یکبار با IP پینگ کنید (ping IP). اگر با IP پینگ داشتید اما با دامنه نه، مشکل قطعا از DNS شماست.
چرا پورت 22 باز است اما SSH وصل نمیشود؟
ممکن است سرویس دیگری به اشتباه روی پورت ۲۲ درحال کار باشد، یا اینکه IP شما توسط ابزارهای امنیتی سرور (مثل Fail2ban) بهدلیل تلاشهای ناموفق قبلی بلاک شده باشد.
چطور بفهمم سرویس sshd روی سرور فعال است یا نه؟
ازطریق کنسول ارائهدهنده سرور ابری خود وارد شوید و دستور sudo systemctl status ssh (در اوبونتو/دبیان) یا sudo systemctl status sshd (در راکیلینوکس/آلما) را وارد کنید.
اگر فایروال (UFW/Firewalld) فعال باشد، چطور SSH را باز کنم؟
برای باز کردن پورت 22 در UFW دستور sudo ufw allow 22/tcp و در فایروالدی دستور sudo firewall-cmd –add-service=ssh –permanent (سپس reload) را اجرا کنید.
چرا بعد از تغییر پورت، SSH دیگر وصل نمیشود؟
احتمالاً فراموش کردهاید پورت جدید را در فایروال سرور باز کنید. همچنین به یاد داشته باشید که بعداز تغییر پورت، باید هنگام اتصال از سوییچ -p استفاده کنید (مثلاً ssh user@IP -p 2244).
چطور لاگهای SSH را بررسی کنم تا علت دقیق قطعی را پیدا کنم؟
بررسی لاگ SSH بهترین راه برای عیبیابی است. در توزیعهای مبتنی بر دبیان (اوبونتو) فایل /var/log/auth.log و در توزیعهای مبتنی بر ردهت (CentOS/Alma) فایل /var/log/secure را بررسی کنید.
چطور keepalive را تنظیم کنم که SSH کمتر قطع شود؟
در سیستم کلاینت (لینوکس یا مک)، فایل ~/.ssh/config را باز کرده و پارامتر ServerAliveInterval 60 را به آن اضافه کنید.
آیا Mosh واقعاً جایگزین بهتری برای SSH در شبکه ناپایدار است؟
بله، Mosh بر بستر UDP کار میکند. اگر اینترنت شما قطع و وصل شود یا IP تغییر کند (مثلاً از وایفای به دیتای موبایل بروید)، نشست شما را باز نگه میدارد و بهمحض اتصال مجدد، همهچیز بدون ارور ادامه مییابد.

