راهنمای جامع رفع خطای Connection Refused در SSH (اتصال رد شد)
خطای «Connection Refused» یا «اتصال رد شد» یک مانع رایج هنگام تلاش برای دسترسی از راه دور به سرور، بهویژه با استفاده از پروتکل SSH (Secure Shell)، است. این خطا به این معنی است که سیستم مقصد (سرور) درخواست اتصال شما را به دلایلی نپذیرفته و آن را مسدود کرده است. چه از Putty، SecureCRT یا هر کلاینت دیگری استفاده کنید، درک ریشهای این خطا، کلید رفع سریع آن است.
دلایل اصلی مواجه با خطای Connection Refused در SSH
برای عیبیابی، باید ابتدا مشخص کنید که چرا سرور اتصال شما را رد میکند. چهار دلیل اصلی وجود دارد که باید به ترتیب بررسی شوند:
۱. سرویس SSH در سرور فعال نیست
مهمترین دلیلی که سرور اتصال را رد میکند، این است که سرویس SSH Daemon (sshd) روی سرور نصب یا در حال اجرا نیست. اگر این سرویس فعال نباشد، هیچ فرآیندی برای گوش دادن به پورت SSH و پذیرش اتصال ورودی وجود ندارد.
بررسی و رفع مشکل سرویس SSH
- بررسی وضعیت سرویس: وضعیت سرویس
sshd
را روی سرور بررسی کنید:sudo systemctl status sshd
اگر خروجی، وضعیت
inactive
یاfailed
را نشان داد، سرویس فعال نیست. - فعالسازی سرویس: اگر سرویس غیرفعال بود، آن را اجرا کنید:
sudo systemctl start sshd
- فعالسازی برای بوت خودکار: برای اطمینان از اینکه سرویس پس از راهاندازی مجدد سرور نیز فعال میماند:
sudo systemctl enable sshd
اگر کلاینت SSH روی دستگاه شما نصب نیست، ابتدا باید آن را نصب کنید. مثلا برای سیستمهای Ubuntu/Debian از دستور زیر استفاده کنید:
sudo apt install openssh-client
۲. فایروال (Firewall) پورت SSH را مسدود کرده است
حتی اگر سرویس SSH در حال اجرا باشد، فایروال سرور (مانند iptables یا UFW) ممکن است پورت پیشفرض SSH (معمولا پورت ۲۲) را برای اتصالات خارجی مسدود کرده باشد. این یک اقدام امنیتی استاندارد است، اما باید برای شما باز باشد. معمولا سرور مجازی هتزنر یا برخی دیگر از دیتاسنترهای معتبر، تنظیمات امنیتی اولیه بسیار سختگیرانهای را برای سرورهای خود اعمال می کنند که تنظیمات فایروال را نیز شامل می شود.
بررسی و تنظیم فایروال
- استفاده از UFW (Uncomplicated Firewall): برای اجازه دادن به اتصال SSH از طریق UFW:
sudo ufw allow ssh
اگر پورت SSH را به شماره دیگری تغییر دادهاید، باید پورت جدید را باز کنید. مثلا برای پورت ۲۲۲۲:
sudo ufw allow 2222/tcp
- استفاده از iptables: برای باز کردن پورت ۲۲ در
iptables
:sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
توجه داشته باشید که باید تنظیمات
iptables
را ذخیره کنید تا بعد از ریبوت سرور از بین نروند.
۳. پورت SSH روی سرور تغییر یا بسته شده است
بسیاری از مدیران سیستم برای بهبود امنیت، پورت پیشفرض ۲۲ را به یک پورت سفارشی تغییر میدهند. اگر شما تلاش کنید با پورت اشتباه وصل شوید، اتصال رد خواهد شد. به منظور داشتن زیر ساخت اختصاصی امن، شما نیز بهتر است پورت پیشفرض SSH را روی سرور خود تغییر دهید.
بررسی پورت SSH پیکربندی شده
- بررسی پورت فعلی: برای مشاهده پورتی که SSH Daemon برای گوش دادن به آن پیکربندی شده است:
grep Port /etc/ssh/sshd_config
خروجی، شماره پورت مورد استفاده (مثلا
Port 22
یاPort 1022
) را نشان میدهد که باید در کلاینت SSH خود از همان پورت استفاده کنید. - بررسی پورتهای در حال گوش دادن: برای اطمینان از اینکه سرویس SSH واقعا روی پورت مورد نظر گوش میدهد:
sudo lsof -i -n -P | grep LISTEN
در خروجی، پورت SSH را جستجو کنید تا مطمئن شوید در حالت LISTEN قرار دارد.
۴. اعتبارنامههای نامعتبر یا آدرس IP اشتباه
در حالی که این موارد معمولا به خطای “Permission Denied” منجر میشوند، اما اشتباه در آدرس IP یا نام کاربری نیز گاهی اوقات میتواند به خطای کلی “Connection Refused” منجر شود.
راهحل:
- بررسی آدرس IP: آدرس IP سرور مجازی یا سرور اختصاصی خود را به دقت بررسی و مجددا وارد کنید.
- بررسی پورت: مطمئن شوید پورت صحیح را در کلاینت SSH (مانند Putty) وارد کردهاید.
اشکالزدایی پیشرفته (Debugging)
اگر هیچ یک از راهحلهای بالا مشکل را برطرف نکرد، از حالت Verbose یا Debugging در کلاینت SSH استفاده کنید تا جزئیات بیشتری از فرآیند اتصال را مشاهده کنید. این اطلاعات، پیامهای اشکالزدایی را نمایش میدهد که به شما کمک میکند تا دقیقا ببینید فرآیند در کدام مرحله متوقف یا رد میشود:
ssh -vvv username@server_ip
این دستور با حداکثر جزئیات (سه v
) تلاش میکند وصل شود و به شما سرنخهای بیشتری در مورد منشا خطای connection refused
میدهد.
بررسی مشکلات سمت کلاینت (Client-Side Issues)
با اینکه معمولا خطای Connection Refused ناشی از تنظیمات سرور است، اما گاهی اوقات مشکل از سمت کلاینت (دستگاه شما) نشات میگیرد. علاوه بر اطمینان از نصب بودن کلاینت SSH، موارد زیر را نیز بررسی کنید:
۱. اختلالات شبکه محلی و VPN
اگر اتصال شما از طریق یک شبکه داخلی شرکتی (LAN) یا یک VPN انجام میشود، ممکن است فایروال یا تنظیمات NAT (Network Address Translation) در روتر یا مودم شما مانع رسیدن درخواستهای SSH به مقصد شوند. ابتدا اتصال خود را بدون VPN امتحان کنید. اگر با قطع VPN اتصال برقرار شد، باید با مدیر شبکه خود تماس بگیرید تا مطمئن شوید پورت SSH مقصد در تنظیمات فایروال محلی شما مسدود نشده باشد و روتر شما به درستی ترافیک را هدایت میکند. همچنین، اگر هنگام اتصال با نرمافزارهای خاص مانند Putty یا SecureCRT به این مشکل برمیخورید، سعی کنید با استفاده از ترمینال پیشفرض سیستمعامل خود (مثلا Bash در لینوکس یا PowerShell در ویندوز) اتصال را تست کنید تا مطمئن شوید مشکل از خود نرمافزار کلاینت نیست.
۲. بررسی SSH Key و مشکلات احراز هویت
در سیستمهایی که از SSH Key (به جای رمز عبور) برای احراز هویت استفاده میکنند، اگر کلید عمومی شما در فایل ~/.ssh/authorized_keys
سرور وجود نداشته باشد یا مجوزهای فایل کلید خصوصی در دستگاه شما (کلاینت) اشتباه تنظیم شده باشد، سرور ممکن است بلافاصله اتصال را رد کند. مجوزهای فایل کلید خصوصی (مثلا id_rsa
) باید روی 600
تنظیم شده باشند تا فقط مالک بتواند آن را بخواند و بنویسد. همچنین، مطمئن شوید که هنگام اتصال، کلید خصوصی صحیح را به کلاینت SSH خود معرفی کردهاید، به خصوص اگر از کلاینتهایی مانند Putty استفاده میکنید که نیازمند تبدیل فرمت کلید هستند.
۳. محدودیتهای TCP Wrapper
اگر سرور شما برای امنیت بیشتر از TCP Wrapper استفاده میکند، ممکن است آدرس IP دستگاه شما در لیست سیاه قرار گرفته باشد یا به صراحت در فایلهای پیکربندی hosts.allow
و hosts.deny
ذکر نشده باشد. TCP Wrapper یک لایه امنیتی دیگر است که به شما اجازه میدهد دسترسی به سرویسهایی مانند SSH را بر اساس آدرس IP منبع، محدود کنید. اگر شک دارید، فایلهای زیر را بررسی کنید:
/etc/hosts.allow
/etc/hosts.deny
اگر آدرس IP شما در لیست hosts.deny
باشد یا در لیست hosts.allow
نباشد (و تنظیمات طوری باشند که همه چیز را به جز موارد صریحا مجاز، مسدود کند)، اتصال شما قبل از اینکه حتی به سرویس SSH برسد، توسط سیستم عامل رد میشود و خطای Connection Refused را خواهید دید.
سوالات متداول
Connection Refused (اتصال رد شد) به این معنی است که سرور مقصد (یا فایروال آن) درخواست اتصال شما را دریافت کرده اما فعالانه آن را رد کرده است. این معمولا نشان دهنده این است که سرویس SSH غیرفعال است یا فایروال صریحا اتصال را مسدود کرده است.
اما Connection Timed Out (پایان زمان انتظار) به این معنی است که درخواست اتصال شما به سرور رسیده اما سرور هیچ پاسخی نداده است. این معمولا به خاطر یک مشکل جدی شبکه، فایروالهای میانی (بین شما و سرور) یا بارگذاری بیش از حد سرور است که باعث میشود سرور اصلا متوجه درخواست شما نشود یا نتواند به آن پاسخ دهد.
اگر پورت پیشفرض SSH در سرور را به یک شماره سفارشی (مثلا ۱۰۰۲۲) تغییر دادهاید، باید هنگام اتصال از طریق کلاینت SSH (مانند Putty یا ترمینال) آن پورت را مشخص کنید.
بله، اگر سرور مجازی (VPS) یا سرور اختصاصی شما به تازگی راهاندازی شده باشد یا سرویسدهنده میزبان به تازگی آن را ریبوت کرده باشد، ممکن است سرویس SSH بهدرستی راهاندازی نشده باشد. در برخی موارد نادر، تنظیمات فایروال شبکه خود میزبان یا سیستم نظارتی آنها ممکن است پورت را مسدود کرده باشد. در چنین شرایطی، ابتدا با پنل مدیریتی (مانند VNC یا کنسول تحت وب) به سرور وصل شوید و وضعیت سرویس SSH را بررسی کنید. اگر مشکل ادامه داشت، با تیم پشتیبانی هاستینگ تماس بگیرید.
اگر به SSH دسترسی ندارید، تنها راه بررسی وضعیت سرویسها یا تنظیمات فایروال این است که از طریق یک مسیر دسترسی جایگزین وارد شوید:
- کنسول تحت وب یا VNC: اگر سرور شما مجازی است (VPS)، ارائهدهنده خدمات معمولا یک کنسول مبتنی بر وب یا VNC در پنل مدیریتی (مانند SolusVM یا cPanel) ارائه میدهد که به شما امکان دسترسی مستقیم به ترمینال سرور را میدهد.
- KVM over IP: برای سرورهای اختصاصی، میتوانید از سیستم مدیریت از راه دور سختافزار (مانند KVM over IP) استفاده کنید.
در کلاینتهایی مثل Putty یا SecureCRT، معمولا خطا در یک پنجره کوچک نمایش داده میشود. اگرچه دلیل اصلی در سرور است، اما نکات زیر در سمت کلاینت Putty مهم هستند:
- آدرس IP و پورت: مطمئن شوید که Host Name (or IP address) و Port را کاملا درست وارد کردهاید. Putty بهطور پیشفرض پورت ۲۲ را در فیلد پورت قرار میدهد، اگر پورت سرور تغییر کرده، باید آن را در اینجا بهروز کنید.
- نوع اتصال (Connection Type): مطمئن شوید که گزینه SSH را انتخاب کردهاید، نه Telnet یا Rlogin.
- تنظیمات Proxy: اگر برای اتصال از یک سرور پراکسی استفاده میکنید، مطمئن شوید که تنظیمات پراکسی در بخش Connection > Proxy بهدرستی پیکربندی شدهاند، چرا که پراکسی اشتباه میتواند باعث رد شدن اتصال شود.
شما میتوانید دیدگاه خود را در مورد این مطلب با ما با اشتراک بگذارید.