اتصال SSH یکی از روشهای اصلی مدیریت سرورهای لینوکس و انجام کارهایی مانند اجرای دستورات، انتقال فایل و مدیریت سرویسها است. پس از خرید سرور مجازی و راهاندازی آن، معمولاً برای دسترسی به محیط سرور و انجام تنظیمات مختلف از SSH استفاده میشود. بااینحال، گاهی اوقات این اتصال هنگام کار یا پس از چند دقیقه بدون هشدار قطع میشود و ادامه مدیریت سرور را با مشکل مواجه میکند. علت قطع شدن اتصال SSH میتواند به عوامل مختلفی مانند ناپایداری اینترنت، تنظیمات Timeout، ریاستارت شدن سرور، مصرف بیش از حد منابع سرور یا تغییرات فایروال مربوط باشد. در برخی موارد نیز اتصال به دلیل بیفعالیتی برای مدتی مشخص بسته میشود. شناخت دلیل اصلی قطع ارتباط اهمیت زیادی دارد؛ زیرا راهکار مناسب به نوع مشکل بستگی دارد. در این مقاله، مهمترین دلایل قطع شدن اتصال SSH، روشهای بررسی خطا و راهکارهای جلوگیری از قطع ارتباط را بررسی میکنیم.


SSH چیست و چرا اتصال آن قطع میشود؟
SSH یا Secure Shell پروتکلی برای برقراری ارتباط امن با یک سیستم دیگر از طریق شبکه است. این پروتکل معمولاً برای مدیریت سرورهای لینوکس، اجرای دستورات از راه دور، انتقال فایل و انجام تنظیمات مدیریتی استفاده میشود.
وقتی با SSH به سرور متصل میشوید، یک Session یا نشست ارتباطی میان کلاینت و سرور ایجاد میشود. کلاینت میتواند ترمینال سیستم شما یا نرمافزارهایی مانند PuTTY و Windows Terminal باشد و سرور نیز سرویس SSH را اجرا میکند.
قطع شدن این ارتباط ممکن است در یکی از حالتهای زیر رخ دهد:
- اتصال بلافاصله پس از برقراری قطع میشود.
- اتصال پس از چند دقیقه بیکاری بسته میشود.
- هنگام اجرای یک دستور طولانی ارتباط قطع میشود.
- اتصال به دلیل مشکل شبکه یا ریاستارت سرور از بین میرود.
- سرور همچنان فعال است، اما Session SSH بسته میشود.
بنابراین، صرفاً مشاهده پیام قطع اتصال به این معنی نیست که خود سرور خاموش شده است.
مهمترین علتهای قطع شدن اتصال SSH
ناپایداری اینترنت یا شبکه
یکی از رایجترین دلایل قطع شدن SSH، ناپایداری ارتباط میان سیستم شما و سرور است. قطع و وصل شدن اینترنت، ضعیف بودن Wi-Fi، تغییر شبکه، VPN ناپایدار یا وجود Packet Loss میتواند باعث از بین رفتن Session SSH شود.
اگر اتصال شما مرتباً قطع میشود، ابتدا بررسی کنید که آیا اینترنت یا VPN نیز همزمان دچار اختلال میشود یا خیر. همچنین میتوانید از سیستم خود، دسترسی شبکه به سرور را با دستور زیر بررسی کنید:
ping IP-SERVER
در این دستور، IP-SERVER را با آدرس IP سرور جایگزین کنید. البته پاسخ ندادن به Ping لزوماً به معنی خاموش بودن سرور نیست؛ زیرا ممکن است Ping در فایروال مسدود شده باشد.
تنظیمات Timeout و بیفعالیتی
اگر اتصال SSH پس از چند دقیقه بیکاری قطع میشود، ممکن است تنظیمات Timeout در کلاینت، سرور یا تجهیزات شبکه باعث بسته شدن ارتباط شده باشند.
برخی شبکهها و فایروالها اتصالهایی را که برای مدتی هیچ دادهای منتقل نمیکنند، غیرفعال میکنند. در چنین شرایطی، فعالسازی Keepalive میتواند با ارسال پیامهای دورهای، وضعیت اتصال را بررسی کند و احتمال قطع شدن آن به دلیل بیفعالیتی را کاهش دهد.
ریاستارت شدن سرور یا توقف سرویس SSH
اگر سرور ریاستارت شود، خاموش شود یا سرویس SSH متوقف شود، اتصال شما قطع خواهد شد. این اتفاق ممکن است در اثر ریاستارت دستی، بهروزرسانی سیستم، اجرای دستورات مدیریتی، Crash یا مشکلات زیرساختی رخ دهد.
اگر به کنسول مدیریتی سرور دسترسی دارید، وضعیت سرویس SSH را بررسی کنید:
sudo systemctl status ssh
در برخی توزیعها، نام سرویس sshd است:
sudo systemctl status sshd
این دستورات مشخص میکنند که سرویس SSH در حال اجرا است یا متوقف شده است.
مصرف بیش از حد منابع سرور
پر شدن RAM، مصرف بالای CPU، کمبود فضای دیسک یا فشار زیاد روی منابع میتواند باعث اختلال در عملکرد سرور و سرویسهای آن شود. اگر قطع شدن SSH همزمان با اجرای پردازشهای سنگین رخ میدهد، بهتر است منابع سرور را بررسی کنید.
برای مشاهده وضعیت CPU و پردازشها، دستور زیر را اجرا کنید:
Top
برای بررسی میزان حافظه نیز میتوانید از دستور زیر استفاده کنید:
free -h
اگر منابع سرور بهشدت درگیر باشند، ابتدا باید پردازشهای غیرضروری و وضعیت سرویسهای پرمصرف را بررسی کنید.
مشکلات فایروال و محدودیتهای شبکه
تغییر قوانین فایروال، مسدود شدن IP، تغییر پورت SSH یا اعمال محدودیتهای امنیتی میتواند باعث قطع یا اختلال در اتصال شود. همچنین ممکن است فایروال شبکه کاربر، VPN یا تجهیزات میانی، ارتباط SSH را محدود کنند.
اگر مشکل پس از تغییر تنظیمات امنیتی یا فایروال آغاز شده است، بهتر است همان تغییرات را بررسی کنید. پیش از هرگونه اصلاح، مطمئن شوید که به کنسول مدیریتی یا روش جایگزین برای دسترسی به سرور دسترسی دارید.
چگونه علت قطع شدن SSH را پیدا کنیم؟
برای رفع مشکل، ابتدا باید مشخص کنید اتصال چه زمانی و با چه پیامی قطع میشود.
پیام خطا | مفهوم احتمالی |
|---|---|
Connection timed out | عدم دریافت پاسخ در زمان مشخص؛ احتمال مشکل شبکه یا فایروال وجود دارد. |
Connection reset by peer | اتصال از سمت مقابل یا یکی از تجهیزات مسیر Reset شده است. |
Broken pipe | ارتباط شبکه از بین رفته یا Session دیگر قابل استفاده نیست. |
Connection refused | سرویس SSH اتصال را قبول نکرده یا روی پورت موردنظر در دسترس نیست. |
این پیامها علت قطعی را مشخص نمیکنند، اما کمک میکنند بررسی را از مسیر درست شروع کنید.
بررسی وضعیت سرویس و لاگهای SSH
اگر به سرور دسترسی جایگزین دارید، علاوه بر وضعیت سرویس SSH، لاگهای آن را نیز بررسی کنید. در سیستمهای مبتنی بر Systemd، دستور زیر لاگ سرویس SSH را نمایش میدهد:
sudo journalctl -u ssh
اگر سرویس با نام sshd اجرا میشود:
sudo journalctl -u sshd
برای مشاهده لاگهای جدید بهصورت زنده نیز میتوانید از گزینه -f استفاده کنید:
sudo journalctl -u ssh -f
لاگها میتوانند اطلاعاتی درباره توقف سرویس، خطاهای اتصال یا رویدادهای همزمان با قطع ارتباط ارائه دهند.
چگونه از قطع شدن اتصال SSH جلوگیری کنیم؟
استفاده از Tmux یا Screen
اگر در حال اجرای دستورات طولانی مانند نصب نرمافزار، انتقال فایل یا پردازشهای زمانبر هستید، بهتر است از Tmux یا Screen استفاده کنید.
این ابزارها اجرای دستورات را در یک Session جداگانه نگه میدارند. در نتیجه، اگر اتصال SSH قطع شود، پردازش داخل Session باقی میماند و پس از ورود مجدد میتوانید به آن برگردید.
برای نصب Tmux در Ubuntu و Debian، دستور زیر را اجرا کنید:
sudo apt update && sudo apt install tmux
سپس یک Session جدید بسازید:
tmux new -s mysession
پس از قطع اتصال و ورود مجدد به سرور، برای بازگشت به Session قبلی از دستور زیر استفاده کنید:
tmux attach -t mysession
نکته: Tmux مانع قطع شدن خود اتصال SSH نمیشود؛ بلکه از متوقف شدن پردازشهای در حال اجرا جلوگیری میکند.
فعالسازی Keepalive در کلاینت SSH
در کلاینت OpenSSH میتوانید با استفاده از گزینههای Keepalive، پیامهای دورهای برای بررسی وضعیت اتصال ارسال کنید.
برای آزمایش، هنگام اتصال SSH دستور زیر را اجرا کنید:
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 username@IP-SERVER
در این دستور:
- ServerAliveInterval=60 یعنی کلاینت هر ۶۰ ثانیه پیام بررسی وضعیت ارسال کند.
- ServerAliveCountMax=3 یعنی در صورت دریافت نکردن پاسخ، پس از سه بار تلاش، اتصال قطعشده در نظر گرفته شود.
اگر این تنظیمات مشکل قطع شدن ناشی از بیفعالیتی را کاهش داد، میتوانید آنها را در فایل تنظیمات SSH نیز قرار دهید.
فایل تنظیمات کاربر معمولاً در مسیر زیر قرار دارد:
~/.ssh/config
نمونه تنظیمات:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
تنظیم Keepalive در سرور
در سمت سرور نیز میتوان تنظیمات بررسی وضعیت اتصال را در فایل sshd_config قرار داد.
هشدار: پیش از تغییر تنظیمات SSH، از فایل پیکربندی نسخه پشتیبان تهیه کنید و مطمئن شوید که به کنسول مدیریتی یا روش جایگزین دسترسی دارید.
ابتدا از فایل تنظیمات نسخه پشتیبان بگیرید:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
سپس فایل را باز کنید:
sudo nano /etc/ssh/sshd_config
تنظیمات زیر را اضافه یا اصلاح کنید:
ClientAliveInterval 60
ClientAliveCountMax 3
پس از ذخیره فایل، صحت تنظیمات را بررسی کنید:
sudo sshd -t
اگر خطایی نمایش داده نشد، سرویس SSH را Reload کنید:
sudo systemctl reload ssh
در برخی توزیعها ممکن است نام سرویس sshd باشد:
sudo systemctl reload sshd




























بدون دیدگاه