SSH وصل میشود اما بلافاصله قطع میشود؟ ۱۰ علت رایج و راهحل قطعی
یکی از آزاردهندهترین مشکلات هنگام مدیریت سرور مجازی این است که همهچیز در نگاه اول درست به نظر میرسد؛ پورت SSH باز است، سرور پاسخ میدهد، نام کاربری و رمز عبور یا کلید SSH پذیرفته میشود، اما درست بعد از ورود، اتصال قطع میشود.
ممکن است چیزی شبیه این مشاهده کنید:
Last login: …
Connection to SERVER-IP closed.
یا اتصال بدون نمایش خطای مشخصی بسته شود:
در بعضی شرایط نیز کاربر حتی برای چند ثانیه وارد محیط سرور میشود و سپس ارتباط قطع میشود. این مشکل لزوماً به معنی خراب بودن SSH یا بسته بودن پورت نیست.
در واقع، وقتی SSH ابتدا اتصال را برقرار میکند، معمولاً یعنی بخش مهمی از ارتباط شبکه و سرویس SSH درست کار میکند. مشکل میتواند بعد از مرحله احراز هویت و هنگام اجرای Shell، تنظیمات کاربر، محدودیت منابع، سیاستهای امنیتی یا تنظیمات خود SSH رخ دهد.
در این مقاله ۱۰ علت رایج قطع شدن سریع اتصال SSH را بررسی میکنیم و برای هرکدام راهحل عملی ارائه میدهیم.
منظور از «SSH وصل میشود اما قطع میشود» چیست؟
مشکل مورد بحث با خطای Connection refused یا Connection timed out تفاوت دارد. در این حالت معمولاً اتفاقی شبیه این رخ میدهد:
🔹 پورت SSH پاسخ میدهد
🔹 احراز هویت (Authentication) انجام میشود
🔹 Login موفق میشود
🔹 اما Connection Closed رخ میدهد
یعنی حداقل بخشی از مراحل اولیه SSH با موفقیت انجام شده است. برای مثال ممکن است رمز عبور قبول شود و سپس پیام Connection closed نمایش داده شود. این تفاوت برای عیبیابی بسیار مهم است.
اولین کاری که باید انجام دهید: اجرای SSH با حالت Verbose
قبل از اینکه تنظیمات سرور را تصادفی تغییر دهید، بهتر است ببینید SSH دقیقاً در کدام مرحله قطع میشود. در سیستم کلاینت این دستور را اجرا کنید:
اگر اطلاعات بیشتری لازم بود:
و در صورت نیاز جزئیات بسیار بیشتر:
گزینه -v برای نمایش اطلاعات عیبیابی SSH استفاده میشود. برای مثال ممکن است در خروجی ببینید debug1: Authentication succeeded و چند خط بعد Connection to SERVER-IP closed. در این شرایط احراز هویت موفق شده و باید بیشتر روی Shell، تنظیمات کاربر و سرویس SSH تمرکز کنیم.
لاگهای SSH را جدی بگیرید
یکی از بهترین منابع برای پیدا کردن علت این مشکل، لاگهای خود سرور است. بسته به توزیع لینوکس، محل لاگ میتواند متفاوت باشد. در Ubuntu و Debian:
در سیستمهای RHEL، AlmaLinux و Rocky Linux معمولاً:
همچنین در سیستمهایی که از systemd استفاده میکنند:
sudo journalctl -u sshd
sudo journalctl -u ssh –since “10 minutes ago”
علت اول: Shell کاربر مشکل دارد
یکی از دلایل مهمی که گاهی نادیده گرفته میشود، Shell کاربر است. هر کاربر لینوکس یک Shell پیشفرض دارد. برای مشاهده Shell کاربر:
cat /etc/passwd | grep username
ls -l /bin/bash
مثلاً ممکن است خروجی چیزی شبیه این باشد:
قسمت آخر مشخص میکند Shell کاربر چیست. اگر Shell کاربر اشتباه باشد یا فایل Shell وجود نداشته باشد، ممکن است SSH احراز هویت را انجام دهد اما بعد از آن نتواند محیط کاربری را اجرا کند. اگر Shell کاربر به چیزی مانند /usr/sbin/nologin یا /bin/false تغییر کرده باشد، طبیعی است که کاربر نتواند یک Session معمولی SSH داشته باشد.
راهحل
اگر کاربر باید Shell معمولی داشته باشد، میتوانید Shell او را اصلاح کنید:
علت دوم: فایل .bashrc یا .profile مشکل دارد
گاهی SSH کاملاً سالم است اما بلافاصله بعد از ورود، یکی از فایلهای Startup کاربر باعث خروج Shell میشود. برای Bash فایلهایی مانند ~/.bashrc، ~/.profile و ~/.bash_profile میتوانند هنگام ورود اجرا شوند. فرض کنید در .bashrc اشتباهاً دستوری مانند exit قرار گرفته باشد. در این صورت کاربر وارد SSH میشود، Bash اجرا میشود و بلافاصله Session بسته میشود.
چگونه این مشکل را بررسی کنیم؟
بهجای ورود معمولی، یک Shell مشخص اجرا کنید:
ssh username@SERVER-IP “echo TEST”
اگر این دستورها کار کنند اما ورود معمولی باعث قطع اتصال شود، احتمال مشکل در فایلهای Startup بیشتر میشود. سپس فایلهای زیر را بررسی کنید و دنبال دستورات غیرعادی مانند exit، logout یا اسکریپتهایی که در صورت خطا Session را میبندند، بگردید:
nano ~/.profile
cat ~/.bash_profile
cat ~/.bash_login
علت سوم: در sshd_config از ForceCommand استفاده شده است
یکی دیگر از علتهای کمتر شناختهشده، استفاده از تنظیم ForceCommand در تنظیمات SSH است. این گزینه میتواند باعث شود SSH بهجای Shell معمولی، یک دستور مشخص را اجرا کند:
اگر این اسکریپت بعد از اجرا خارج شود، Session SSH نیز ممکن است بلافاصله بسته شود. برای جستجو:
sudo grep -n “ForceCommand” /etc/ssh/sshd_config
علت چهارم: کاربر اجازه اجرای Shell ندارد
گاهی حساب کاربری عمداً یا بهصورت اشتباه به Shell محدود شده است:
username:x:1001:1001::/home/username:/bin/false
در این حالت کاربر نمیتواند یک Shell عادی دریافت کند. اگر کاربر باید SSH تعاملی داشته باشد:
علت پنجم: Fail2Ban یا سیستم امنیتی IP شما را مسدود میکند
اگر اتصال SSH برقرار میشود اما بلافاصله قطع میشود، یکی از مواردی که باید بررسی شود سیستمهای امنیتی سرور است. مواردی مانند Fail2Ban، CSF/LFD، Firewall، CrowdSec، فایروال دیتاسنتر و سیستمهای امنیتی پنل مدیریت سرور ممکن است IP شما را بهدلیل چند تلاش ناموفق مسدود کنند.
sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip YOUR-IP
نام Jail را باید مطابق تنظیمات واقعی سرور انتخاب کنید.
سرور مجازی پایدار، بدون قطعی SSH و با پشتیبانی واقعی
اگر از قطع شدنهای مکرر SSH، کندی سرور و مشکلات مدیریتی خسته شدهاید، وقت آن است که به یک سرور مجازی حرفهای مهاجرت کنید. ایرانیکاسرور با منابع اختصاصی CPU و RAM، دیسک NVMe، پهنای باند نامحدود، آپتایم بالا و پشتیبانی ۲۴ ساعته، تجربهای پایدار و بدون دردسر را برای شما فراهم میکند.
91302467 – 021 | ایرانیکاسرور
علت ششم: محدودیتهای SSH مانند MaxStartups
OpenSSH برای کنترل تعداد اتصالهای همزمان، تنظیماتی مانند MaxStartups دارد. اگر تعداد زیادی اتصال همزمان به SSH ایجاد شود، ممکن است برخی اتصالها رد یا قطع شوند. برای بررسی:
sudo sshd -T | grep -i maxauthtries
علت هفتم: مشکل منابع VPS
گاهی مشکل اصلاً SSH نیست. اگر VPS با کمبود شدید منابع مواجه شده باشد، سرویسها ممکن است رفتار غیرعادی داشته باشند. مواردی مانند RAM تمام شده، نبود Swap، درگیر بودن شدید CPU، پر شدن دیسک، تمام شدن Inodeها، فعال شدن OOM Killer و تعداد بیش از حد Processها میتوانند روی Login و اجرای Shell تأثیر بگذارند.
uptime
top
df -h
df -i
اگر مثلاً / به ۱۰۰ درصد رسیده باشد، این موضوع میتواند مشکلات مختلفی ایجاد کند. گاهی فضای دیسک خالی است اما تعداد Inodeها تمام شده است.
علت هشتم: Home Directory کاربر مشکل دارد
وقتی کاربر وارد SSH میشود، Shell معمولاً به Home Directory او منتقل میشود. اگر این مسیر وجود نداشته باشد، Permissionهای آن خراب باشند یا فایلهای ضروری داخل آن مشکل داشته باشند، Session ممکن است رفتار غیرعادی داشته باشد.
ls -ld /home/username
انتظار داریم چیزی شبیه drwx—— username username /home/username ببینیم. البته Permission مناسب به ساختار سرور بستگی دارد.
علت نهم: SELinux یا AppArmor مانع اجرای Shell شده است
در بعضی توزیعهای لینوکس، سیستمهای امنیتی مانند SELinux و AppArmor میتوانند اجرای برخی عملیات را محدود کنند. اگر مشکل بعد از تغییر تنظیمات امنیتی، نصب نرمافزار یا تغییر Permissionها ایجاد شده است، این بخش ارزش بررسی دارد.
sudo ausearch -m avc -ts recent
علت دهم: مشکل در Shell یا محیط اجرای کاربر
گاهی Bash یا Shell مورد استفاده کاربر به دلیل تغییر فایلهای سیستمی، نصب ناقص نرمافزار، Permission اشتباه، حذف فایلهای ضروری، تغییر لینکهای سیستم یا تنظیمات اشتباه درست اجرا نمیشود.
/bin/bash –version
همچنین میتوانید از Console سرور مستقیماً Bash را اجرا کنید. اگر /bin/bash نیز بلافاصله خارج شود یا خطای غیرعادی بدهد، مشکل احتمالاً مربوط به Shell یا محیط سیستم است و نه اتصال شبکه SSH.
یک علت مهم دیگر: دستور خروج در .bash_profile
گاهی کاربران فقط .bashrc را بررسی میکنند، در حالی که Bash ممکن است فایلهای دیگری را نیز هنگام Login اجرا کند. بسته به نوع Session و تنظیمات سیستم، فایلهایی مانند ~/.bash_profile، ~/.bash_login، ~/.profile و ~/.bashrc میتوانند نقش داشته باشند.
cat ~/.bash_profile
cat ~/.bash_login
cat ~/.profile
cat ~/.bashrc
اگر فقط root قطع میشود ولی کاربر معمولی وارد میشود چه؟
این نکته بسیار مهم است. اگر root قطع میشود اما admin وارد میشود، مشکل احتمالاً عمومی نیست. در این شرایط باید تنظیمات مربوط به root را بررسی کنید:
getent passwd root
sudo passwd -S root
اگر فقط یک کاربر قطع میشود چه؟
اگر root و admin وارد میشوند اما کاربر test با پیام Connection closed مواجه میشود، مشکل احتمالاً مربوط به خود آن کاربر است. موارد زیر را بررسی کنید:
ls -l /bin/bash
ls -ld /home/test
ls -la /home/test
cat /home/test/.bashrc
اگر همه کاربران SSH قطع میشوند چه؟
اگر تمام کاربران بعد از Login قطع میشوند، احتمال مشکل در تنظیمات عمومی SSH یا سیستم بیشتر است. در این حالت ابتدا این موارد را بررسی کنید:
sudo systemctl status ssh
sudo systemctl status sshd
sudo journalctl -u ssh -n 100 –no-pager
sudo tail -n 100 /var/log/auth.log
sudo tail -n 100 /var/log/secure
اگر SSH از ویندوز قطع میشود ولی از Linux وصل است چه؟
اگر از یک کلاینت لینوکس یا macOS میتوانید وارد شوید ولی از Windows اتصال بلافاصله قطع میشود، باید سمت کلاینت را نیز بررسی کنید. در Windows PowerShell خروجی Verbose را بررسی کنید و اگر از PuTTY استفاده میکنید، لاگ Session را فعال کنید. این کار کمک میکند بفهمید مشکل از کلاینت، کلید SSH، الگوریتمهای رمزنگاری، Agent یا تنظیمات SSH Client است یا از سرور.
اگر SSH بعد از چند ثانیه قطع میشود چه؟
اگر اتصال بلافاصله قطع نمیشود و مثلاً بعد از ۱۰، ۳۰ یا ۶۰ ثانیه ارتباط از بین میرود، موضوع کمی متفاوت است. در این حالت باید مواردی مانند Network instability، NAT، Firewall، VPN، Idle timeout، KeepAlive، مسیر شبکه و Load Balancer را نیز بررسی کنید.
این گزینه برای بعضی مشکلات مربوط به ارتباطهای idle مفید است. اما اگر Session بلافاصله بعد از Login بسته میشود، معمولاً مشکل اصلی جای دیگری است.
چگونه بفهمیم مشکل از شبکه است یا Shell؟
یک تست بسیار مفید این است که به جای باز کردن Shell، یک دستور ساده اجرا کنیم:
ssh username@SERVER-IP /bin/bash
اگر خروجی HELLO نمایش داده شود و اتصال بسته شود، این رفتار برای یک اجرای تکدستوری طبیعی است. اما اگر ورود معمولی باعث قطع شدن شود و اجرای دستورهای ساده رفتار متفاوتی داشته باشد، احتمال مشکل در Interactive Shell یا فایلهای Startup بیشتر میشود.
چطور لاگ SSH را همزمان با اتصال مشاهده کنیم؟
این یکی از بهترین روشهای عیبیابی است. در Terminal اول روی سرور:
در Terminal دوم از کامپیوتر خود:
حالا وقتی اتصال قطع شد، به Terminal اول نگاه کنید. ممکن است خطاهایی مانند Failed password، Connection closed، session closed یا خطاهای مربوط به PAM، Shell یا Permission مشاهده کنید. این اطلاعات معمولاً بسیار ارزشمندتر از حدس زدن علت مشکل است.
PAM چه نقشی در قطع شدن SSH دارد؟
SSH در بسیاری از سیستمهای لینوکسی از PAM برای احراز هویت و مدیریت Session استفاده میکند. بنابراین مشکلات PAM نیز میتوانند باعث شوند Login انجام شود اما Session درست ایجاد نشود. تنظیمات مرتبط ممکن است در مسیرهایی مانند /etc/pam.d/ قرار داشته باشند.
آیا Permission اشتباه میتواند باعث قطع شدن SSH شود؟
بله. Permissionها و مالکیت اشتباه در مسیرهایی مانند /home/user یا فایلهای کلیدی SSH میتوانند باعث مشکل شوند. برای بررسی:
ls -la ~/.ssh/authorized_keys
stat ~/.ssh
stat ~/.ssh/authorized_keys
در SSH Key Authentication، Permissionهای نادرست نیز ممکن است باعث رد شدن کلید شوند.
آیا پر شدن دیسک میتواند SSH را قطع کند؟
بله. این مورد بسیار مهم است و اغلب فراموش میشود. بررسی کنید:
df -i
اگر / یا /var پر شده باشد، مشکلات مختلفی ممکن است ایجاد شوند. اگر Inodeها تمام شده باشند، حتی با وجود فضای خالی ممکن است ایجاد فایلهای جدید امکانپذیر نباشد.
یک روش سریع برای عیبیابی SSH
اگر نمیخواهید دهها دستور مختلف را پشت سر هم اجرا کنید، این ترتیب را دنبال کنید:
🔹 مرحله ۲: بررسی Shell با getent passwd user
🔹 مرحله ۳: بررسی منابع با free -h، df -h، df -i، uptime
🔹 مرحله ۴: بررسی SSH با sudo sshd -t
🔹 مرحله ۵: وضعیت سرویس با sudo systemctl status ssh یا sshd
🔹 مرحله ۶: بررسی لاگ auth.log یا secure
🔹 مرحله ۷: بررسی journalctl -u ssh -n 100 –no-pager
🔹 مرحله ۸: بررسی fail2ban-client status
🔹 مرحله ۹: تست Shell مستقیم با ssh user@SERVER-IP /bin/bash
🔹 مرحله ۱۰: بررسی فایلهای Startup مانند .bashrc و .profile
این ترتیب معمولاً بسیار سریعتر از تغییر تصادفی تنظیمات مختلف است.
اگر به SSH دسترسی نداریم چطور مشکل را حل کنیم؟
اگر SSH اصلاً اجازه ورود نمیدهد، باید از روش دسترسی دیگری استفاده کنید. بسته به ارائهدهنده VPS ممکن است امکاناتی مانند Web Console، VNC، KVM، Serial Console و Rescue Mode در اختیار شما باشد. برای VPSهایی که از طریق پنل مدیریت ارائه میشوند، Console میتواند در چنین شرایطی بسیار مهم باشد. اگر SSH خراب شده باشد، داشتن دسترسی Out-of-Band به سرور میتواند امکان اصلاح تنظیمات را بدون نیاز به SSH فراهم کند.
آیا Restart کردن SSH مشکل را حل میکند؟
گاهی اوقات ممکن است، اما نباید اولین راهکار باشد. اگر تنظیمات SSH تغییر کردهاند، ابتدا sudo sshd -t را اجرا کنید. اگر خطایی وجود نداشت، سرویس را Reload یا Restart کنید:
sudo systemctl restart ssh
اما اگر دلیل قطع شدن Session مربوط به Shell، Home Directory، PAM یا منابع باشد، Restart کردن SSH مشکل اصلی را برطرف نمیکند.
اشتباه رایج: حذف کردن کامل sshd_config
اگر SSH مشکل پیدا کرده، هیچوقت صرفاً به دلیل خطاهای ناشناخته، فایل /etc/ssh/sshd_config را حذف نکنید. همچنین توصیه نمیشود کل تنظیمات را بدون Backup جایگزین کنید. قبل از تغییر:
اشتباه رایج: بستن Session فعلی
اگر هنوز یک Session SSH فعال دارید و در حال عیبیابی SSH هستید، آن را نبندید. بهتر است همان Session را بهعنوان مسیر نجات نگه دارید. این نکته مخصوصاً هنگام تغییر Port، sshd_config، Authentication، Firewall و Root Login بسیار مهم است.
جدول ۱۰ علت اصلی قطع شدن SSH
چکلیست نهایی رفع مشکل SSH
اگر SSH وصل میشود اما سریع قطع میشود، این موارد را به ترتیب بررسی کنید:
🔹 لاگ SSH: journalctl -u ssh -n 100 –no-pager
🔹 Shell کاربر: getent passwd user
🔹 تست Bash: ssh user@SERVER-IP /bin/bash
🔹 فایلهای Startup: cat ~/.bashrc و cat ~/.profile
🔹 وضعیت منابع: free -h، df -h، df -i، uptime
🔹 تنظیمات SSH: sudo sshd -t
🔹 ForceCommand: sudo grep -Rni “ForceCommand” /etc/ssh/
🔹 Fail2Ban: sudo fail2ban-client status
🔹 SELinux: getenforce
مشکل SSH شما حل نشد؟ ما در کنار شما هستیم
اگر با وجود بررسی موارد بالا، همچنان اتصال SSH شما قطع میشود یا نیاز به تنظیمات تخصصی سرور دارید، تیم فنی ایرانیکاسرور آماده کمک به شماست. کافی است درخواست خود را ارسال کنید تا کارشناسان ما در سریعترین زمان مشکل را بررسی و رفع کنند.
تماس با پشتیبانی: 91302467 | ایرانیکاسرور
جمعبندی
وقتی SSH به سرور وصل میشود اما بلافاصله ارتباط قطع میشود، نباید فوراً نتیجه بگیریم که پورت SSH یا اینترنت سرور مشکل دارد. اگر احراز هویت انجام میشود، مشکل ممکن است بعد از مرحله Authentication اتفاق بیفتد.
در چنین شرایطی مواردی مانند Shell کاربر، فایلهای .bashrc و .profile، ForceCommand، تنظیمات PAM، Fail2Ban، محدودیتهای SSH، منابع VPS، پر شدن دیسک، Permissionها و SELinux/AppArmor باید بررسی شوند.
بهترین روش عیبیابی این است که به جای تغییر تصادفی تنظیمات، ابتدا اطلاعات جمعآوری کنیم: ssh -vvv user@SERVER-IP و همزمان روی سرور sudo journalctl -f یا لاگ SSH را مشاهده کنیم. این دو خروجی در بسیاری از موارد مشخص میکنند مشکل دقیقاً در کدام مرحله اتفاق میافتد.
مهمتر از همه، هنگام تغییر تنظیمات SSH همیشه یک Session فعال برای خودتان نگه دارید و قبل از Restart کردن SSH، صحت تنظیمات را با sshd -t بررسی کنید. اگر SSH وصل میشود اما بلافاصله قطع میشود، راهحل معمولاً در پیدا کردن علت قطع شدن Session است، نه صرفاً تغییر پورت یا نصب مجدد SSH.
سوالات متداول درباره قطع شدن SSH
چرا SSH وصل میشود اما بلافاصله قطع میشود؟
این مشکل معمولاً بعد از مرحله احراز هویت رخ میدهد و میتواند دلایلی مانند Shell خراب، فایلهای Startup مشکلدار، ForceCommand، محدودیت منابع، Fail2Ban یا Permissionهای اشتباه داشته باشد.
چگونه بفهمم مشکل SSH از سرور است یا کلاینت؟
با اجرای ssh -vvv user@SERVER-IP میتوانید مرحله دقیق قطع شدن را ببینید. اگر احراز هویت موفق شود و سپس قطع شود، مشکل سمت سرور است. اگر از یک کلاینت دیگر (مثلاً Linux) وصل میشوید، مشکل سمت کلاینت است.
آیا پر شدن دیسک میتواند باعث قطع SSH شود؟
بله. اگر پارتیشن / یا /var پر شده باشد یا Inodeها تمام شده باشند، ممکن است Session SSH نتواند بهدرستی ایجاد شود.
ForceCommand چیست و چگونه آن را بررسی کنم؟
ForceCommand تنظیمی در sshd_config است که بهجای Shell معمولی یک دستور مشخص را اجرا میکند. با sudo grep -Rni “ForceCommand” /etc/ssh/ میتوانید آن را پیدا کنید.
آیا Restart کردن SSH مشکل قطع شدن را حل میکند؟
گاهی اوقات، اما اگر علت اصلی Shell، Home Directory، PAM یا منابع باشد، Restart کردن SSH مشکل را برطرف نمیکند. ابتدا باید علت واقعی را پیدا کنید.
اگر به SSH دسترسی نداشته باشم چه کنم؟
میتوانید از Web Console، VNC، KVM یا Rescue Mode ارائهدهنده VPS خود استفاده کنید. اگر این امکانات وجود نداشت، با پشتیبانی هاست خود تماس بگیرید.
💬 دیدگاهها 0
هنوز دیدگاهی ثبت نشده است. اولین نفری باشید که نظر میدهید!
✍️ دیدگاه خود را بنویسید