آموزشی لینوکس

آموزش کامل عیب‌یابی SSH در لینوکس؛ از Timeout تا Connection Reset

 

اگر هنگام اتصال به VPS لینوکسی با SSH با خطاهایی مانند Connection timed out، Connection refused، Connection reset by peer یا Permission denied مواجه شده‌اید، لزوماً به این معنی نیست که سرور خاموش است. ممکن است مشکل از سرویس SSH، پورت، فایروال، شبکه، تنظیمات sshd، احراز هویت، محدودیت‌های امنیتی یا حتی سیستم مبدأ باشد.

در این آموزش، مرحله‌به‌مرحله بررسی می‌کنیم که چگونه علت مشکل SSH را پیدا کنیم و بدون حدس‌زدن، محل خرابی را مشخص کنیم.

فهرست مطالب

SSH چیست و چرا ممکن است از کار بیفتد؟

SSH یا Secure Shell پروتکلی برای اتصال امن و مدیریت از راه دور سیستم‌های لینوکسی است. یک اتصال معمولی SSH تقریباً این مسیر را طی می‌کند:

کامپیوتر شما
     │
     ▼
اینترنت
     │
     ▼
IP سرور
     │
     ▼
پورت SSH
     │
     ▼
Firewall
     │
     ▼
sshd
     │
     ▼
احراز هویت
     │
     ▼
Shell

اگر هرکدام از این بخش‌ها مشکل داشته باشند، اتصال SSH ممکن است برقرار نشود.

این آموزش برای چه سرورهایی مناسب است؟

این راهنما برای بیشتر VPSهای لینوکسی قابل استفاده است، از جمله:

🔹 Ubuntu 20.04
🔹 Ubuntu 22.04
🔹 Ubuntu 24.04 و نسخه‌های جدیدتر
🔹 Debian 10 / 11 / 12 / 13
🔹 Rocky Linux
🔹 AlmaLinux
🔹 CentOS
🔹 RHEL
🔹 Oracle Linux
🔹 Fedora Server
🔹 openSUSE
🔹 SUSE Linux Enterprise

البته نام بعضی دستورات مدیریت سرویس یا فایروال ممکن است بین توزیع‌ها متفاوت باشد.

قبل از شروع؛ مشکل دقیقاً چیست؟

اول باید متن خطایی که هنگام اتصال مشاهده می‌کنید را مشخص کنید. برای مثال:

Connection timed out
Connection refused
Connection reset by peer
Permission denied (publickey)

هرکدام از این خطاها می‌تواند مسیر عیب‌یابی متفاوتی داشته باشد.

۱. خطای Connection Timed Out

یکی از رایج‌ترین خطاهای SSH این است:

ssh: connect to host SERVER_IP port 22: Connection timed out

این خطا معمولاً یعنی درخواست شما به پورت موردنظر پاسخ مناسبی دریافت نکرده است. علت‌های احتمالی:

🔹 IP اشتباه
🔹 سرور از شبکه خارج شده
🔹 پورت SSH اشتباه است
🔹 فایروال پورت را مسدود کرده
🔹 فایروال دیتاسنتر یا ارائه‌دهنده VPS اتصال را مسدود کرده
🔹 سرویس شبکه سرور مشکل دارد
🔹 Route شبکه دچار مشکل شده است
🔹 IP شما توسط Firewall یا سیستم امنیتی سرور Block شده است

بررسی اتصال به پورت SSH در ویندوز

اگر از Windows استفاده می‌کنید، PowerShell را باز کنید و اجرا کنید:

Test-NetConnection SERVER_IP -Port 22
Test-NetConnection 192.168.1.100 -Port 22

اگر خروجی شامل TcpTestSucceeded : True باشد، یعنی اتصال TCP به پورت 22 برقرار شده است. اگر TcpTestSucceeded : False باشد، باید پورت، فایروال، شبکه و سرویس SSH را بررسی کنید.

۲. بررسی IP سرور

گاهی مشکل SSH بسیار ساده است: IP اشتباه وارد شده است. فرمان اتصال را بررسی کنید:

ssh root@SERVER_IP
ssh root@203.0.113.10

اگر VPS شما IP عمومی دارد، مطمئن شوید همان IP فعلی را در پنل سرویس‌دهنده مشاهده می‌کنید. همچنین اگر اخیراً VPS را حذف و دوباره ساخته‌اید، ممکن است IP قبلی دیگر متعلق به سرور شما نباشد.

۳. بررسی پورت SSH

SSH الزاماً روی پورت 22 اجرا نمی‌شود. ممکن است مدیر سرور پورت SSH را تغییر داده باشد. برای اتصال به پورت خاص:

ssh -p 2222 root@SERVER_IP
ssh -p 2222 root@203.0.113.10

اگر پورت SSH را تغییر داده‌اید، استفاده از پورت 22 باعث می‌شود تصور کنید SSH خراب است، در حالی که سرویس روی پورت دیگری در حال اجراست.

سرور مجازی پایدار با پشتیبانی تخصصی ایرانیکاسرور

اگر درگیر خطاهای مکرر SSH، قطعی شبکه یا کندی سرور هستید، یک سرور مجازی با منابع اختصاصی می‌تواند مسیر عیب‌یابی را برای همیشه پایان دهد. ایرانیکاسرور با CPU و RAM اختصاصی، دیسک NVMe پرسرعت، پهنای باند نامحدود، آپ‌تایم بالا و پشتیبانی ۲۴/۷ همراه شماست؛ مناسب برای میزبانی سایت، ران‌کردن سرویس‌های تحت وب، میکروتیک، گیم‌سرور و پروژه‌های حساس.

تماس با پشتیبانی: 91302460021 1 | ایرانیکاسرور

۴. بررسی باز بودن پورت SSH از داخل سرور

اگر از طریق کنسول VPS، VNC، KVM یا پنل ارائه‌دهنده به سرور دسترسی دارید، ابتدا وضعیت پورت را بررسی کنید:

ss -tlnp
ss -tlnp | grep :22

اگر SSH روی پورت 22 فعال باشد، معمولاً چیزی مشابه LISTEN 0 128 0.0.0.0:22 یا LISTEN 0 128 [::]:22 مشاهده می‌کنید. اگر هیچ خروجی مشاهده نمی‌کنید، ممکن است sshd روی این پورت در حال Listen نباشد.

۵. بررسی سرویس SSH

در Ubuntu و Debian معمولاً می‌توانید وضعیت سرویس را با این دستور ببینید:

systemctl status ssh
systemctl status sshd

اگر سرویس متوقف شده باشد، می‌توانید آن را اجرا کنید و برای فعال شدن خودکار هنگام Boot:

systemctl start ssh
systemctl enable ssh
systemctl start sshd
systemctl enable sshd

۶. ری‌استارت کردن SSH

اگر سرویس SSH اجرا می‌شود اما رفتار غیرعادی دارد، می‌توانید آن را Restart کنید:

systemctl restart ssh
systemctl restart sshd

⚠️ نکته مهم: اگر در حال حاضر از طریق SSH به سرور متصل هستید، قبل از تغییر تنظیمات SSH باید احتیاط کنید. یک تنظیم اشتباه می‌تواند باعث قطع دسترسی شود.

۷. بررسی تنظیمات SSH

فایل اصلی تنظیمات SSH معمولاً در مسیر /etc/ssh/sshd_config قرار دارد. برای مشاهده آن:

nano /etc/ssh/sshd_config
sshd -t

اگر هیچ خروجی نمایش داده نشود، معمولاً یعنی خطای Syntax در تنظیمات وجود ندارد. اما اگر خطایی مانند /etc/ssh/sshd_config line 25: … مشاهده کردید، باید همان خط را بررسی و اصلاح کنید.

۸. بررسی پورت تعریف‌شده در sshd_config

در فایل تنظیمات SSH دنبال گزینه Port بگردید. مثلاً Port 22 یا Port 2222. اگر پورت SSH را تغییر داده‌اید، باید هنگام اتصال نیز همان پورت را مشخص کنید:

ssh -p 2222 root@SERVER_IP

۹. خطای Connection Refused

خطای دیگری که ممکن است مشاهده کنید: Connection refused. این خطا با Timeout متفاوت است. در بسیاری از موارد یعنی سیستم مقصد قابل دسترسی است، اما روی آن پورت سرویس مناسبی در حال Listen نیست یا اتصال توسط یک سرویس/Firewall به شکل Reject پاسخ داده می‌شود. مهم‌ترین مواردی که باید بررسی شوند:

systemctl status ssh
ss -tlnp | grep :22
sshd -t

اگر SSH روی پورت دیگری تنظیم شده، همان پورت را بررسی کنید.

۱۰. خطای Connection Reset by Peer

ممکن است هنگام اتصال با خطایی شبیه Connection reset by peer مواجه شوید. این وضعیت می‌تواند دلایل مختلفی داشته باشد. برای مثال:

🔹 sshd اتصال را قطع می‌کند
🔹 Firewall یا سیستم امنیتی اتصال را Reset می‌کند
🔹 تنظیمات SSH مشکل دارد
🔹 Fail2ban یا ابزار مشابه IP شما را مسدود کرده است
🔹 محدودیت‌های امنیتی روی سرور اعمال شده است
🔹 سرویس SSH دچار خطا شده است
🔹 مشکل شبکه باعث قطع Connection شده است

در این حالت لاگ‌های SSH بسیار مهم هستند.

۱۱. بررسی لاگ‌های SSH

در Ubuntu و Debian می‌توانید لاگ‌های احراز هویت را بررسی کنید:

tail -f /var/log/auth.log
tail -n 100 /var/log/auth.log
journalctl -u ssh
journalctl -u ssh --no-pager -n 100
journalctl -u sshd --no-pager -n 100

در برخی توزیع‌های دیگر ممکن است لاگ‌ها در /var/log/secure قرار داشته باشند.

۱۲. استفاده از SSH با حالت Debug

اگر علت مشکل مشخص نیست، یکی از بهترین ابزارها حالت Debug خود SSH است. روی کامپیوتر خود اجرا کنید:

ssh -v root@SERVER_IP
ssh -vv root@SERVER_IP
ssh -vvv root@SERVER_IP
ssh -vvv root@203.0.113.10

خروجی Debug به شما نشان می‌دهد اتصال در چه مرحله‌ای متوقف شده است.

۱۳. اگر مشکل در مرحله اتصال شبکه باشد

اگر خروجی تقریباً در مرحله‌ای شبیه Connecting to SERVER_IP port 22 متوقف شود، باید بیشتر روی موارد زیر تمرکز کنید:

🔹 IP
🔹 Port
🔹 Firewall
🔹 Routing
🔹 Network
🔹 وضعیت VPS

اما اگر اتصال برقرار شود و مشکل در مرحله Authentication ظاهر شود، باید سراغ Username، Password، SSH Key و تنظیمات احراز هویت بروید.

۱۴. خطای Permission Denied

اگر خطایی مانند Permission denied یا Permission denied (publickey) می‌بینید، مشکل احتمالاً مربوط به احراز هویت است، نه خاموش بودن سرور. موارد زیر را بررسی کنید:

🔹 Username صحیح است؟
🔹 Password صحیح است؟
🔹 کلید SSH صحیح است؟
🔹 کلید عمومی روی سرور قرار دارد؟
🔹 Permission فایل‌های SSH صحیح است؟
🔹 ورود با Root فعال است؟
🔹 تنظیمات sshd_config اجازه روش احراز هویت موردنظر را می‌دهد؟

۱۵. بررسی کاربر SSH

مثلاً اگر با ssh root@SERVER_IP متصل می‌شوید اما سرور اجازه ورود مستقیم Root را نمی‌دهد، ممکن است نیاز باشد با کاربر دیگری وارد شوید:

ssh username@SERVER_IP

گزینه‌های مربوط به Root و Authentication بسته به نسخه OpenSSH و تنظیمات سیستم می‌توانند متفاوت باشند؛ بنابراین قبل از تغییر آنها، وضعیت فعلی را بررسی کنید.

۱۶. بررسی Firewall با UFW

در Ubuntu معمولاً ufw یکی از ابزارهای رایج Firewall است. وضعیت آن:

ufw status
ufw allow 22/tcp
ufw allow ssh
ufw allow 2222/tcp

⚠️ هشدار: قبل از فعال کردن Firewall مطمئن شوید پورت SSH شما اجازه دسترسی دارد؛ در غیر این صورت ممکن است دسترسی SSH خودتان را قطع کنید.

۱۷. بررسی Firewall با iptables یا nftables

در بعضی سرورها ممکن است قوانین Firewall توسط iptables یا nftables مدیریت شوند. برای مشاهده قوانین:

iptables -L -n -v
nft list ruleset

۱۸. بررسی Fail2ban

اگر چند بار رمز عبور اشتباه وارد کرده باشید یا رفتار اتصال شما توسط سیستم امنیتی مشکوک تشخیص داده شده باشد، ممکن است IP شما توسط Fail2ban مسدود شده باشد. بررسی وضعیت:

systemctl status fail2ban
fail2ban-client status
fail2ban-client status sshd

نام Jail در سیستم‌های مختلف ممکن است متفاوت باشد.

۱۹. بررسی اینکه SSH روی کدام IP گوش می‌دهد

گاهی SSH فقط روی یک Interface یا IP خاص Listen می‌کند. برای بررسی:

ss -tlnp | grep ssh

اگر خروجی فقط شامل 127.0.0.1:22 باشد، SSH فقط روی Localhost در دسترس است و اتصال مستقیم از اینترنت برقرار نخواهد شد. در مقابل، مواردی مانند 0.0.0.0:22 نشان می‌دهد سرویس روی Interface گسترده‌تری Listen می‌کند.

۲۰. بررسی منابع سرور

گاهی SSH به دلیل فشار شدید منابع سرور پاسخ مناسبی نمی‌دهد. CPU، حافظه RAM، فضای دیسک و Inodeها را بررسی کنید:

top
htop
free -h
df -h
df -i

اگر دیسک کاملاً پر شده باشد، ممکن است سرویس‌های مختلف با مشکل مواجه شوند. مثلاً Use% 100% برای یک Partition می‌تواند یک علامت هشدار جدی باشد.

۲۱. بررسی OOM Killer

اگر RAM سرور تمام شده باشد، Linux ممکن است برای آزاد کردن حافظه بعضی Processها را خاتمه دهد. برای جستجوی پیام‌های مربوط به OOM:

dmesg | grep -i "out of memory"
journalctl -k | grep -i "out of memory"
dmesg | grep -i "killed process"

اگر sshd یا Processهای مهم دیگر در اثر کمبود حافظه Kill شده باشند، باید مصرف RAM و SWAP را بررسی کنید.

۲۲. بررسی DNS

اگر به جای IP از Domain Name استفاده می‌کنید، مشکل ممکن است از DNS باشد. ابتدا بررسی کنید Domain به IP صحیح Resolve می‌شود:

nslookup example.com
dig example.com
ssh root@SERVER_IP

اگر با IP متصل می‌شوید اما با Domain نه، احتمالاً باید DNS را بررسی کنید.

۲۳. بررسی Route شبکه

در Linux می‌توانید مسیر شبکه را با ابزارهایی مانند traceroute بررسی کنید. در Windows نیز می‌توانید از tracert استفاده کنید:

traceroute SERVER_IP
tracert SERVER_IP

این تست می‌تواند برای تشخیص بعضی مشکلات مسیر شبکه مفید باشد، اما Timeout در یک Hop به‌تنهایی لزوماً به معنی خرابی همان Hop نیست؛ برخی تجهیزات شبکه به درخواست‌های Traceroute پاسخ نمی‌دهند.

۲۴. بررسی اتصال با Netcat

برای تست TCP یک پورت می‌توانید از nc استفاده کنید:

nc -vz SERVER_IP 22
nc -vz 203.0.113.10 22

اگر پورت قابل دسترسی باشد، معمولاً پیام موفقیت مشاهده می‌کنید. اگر اتصال برقرار نشود، باید Firewall، Network و سرویس مقصد را بررسی کنید.

۲۵. جدول تشخیص سریع خطاهای SSH

خطا احتمال اولیه مواردی که باید بررسی شوند
Connection timed out عدم دریافت پاسخ Firewall، Network، IP، Port
Connection refused سرویس روی پورت پاسخ نمی‌دهد SSH، Port، Firewall
Connection reset by peer اتصال توسط مقصد قطع شده sshd، Firewall، Fail2ban، Logs
Permission denied احراز هویت ناموفق Username، Password، SSH Key
No route to host مشکل مسیر شبکه Routing، Network، Gateway
Could not resolve hostname مشکل DNS Domain، DNS
Host key verification failed مشکل Host Key known_hosts، تغییر کلید سرور

ترتیب پیشنهادی عیب‌یابی SSH

اگر SSH کار نمی‌کند، بهتر است به‌جای تغییر تصادفی تنظیمات، این ترتیب را دنبال کنید:

🔹 مرحله ۱ — IP را بررسی کنید: SERVER_IP
🔹 مرحله ۲ — پورت را بررسی کنید: 22 یا پورت سفارشی SSH
🔹 مرحله ۳ — اتصال TCP را تست کنید: Test-NetConnection SERVER_IP -Port 22
🔹 مرحله ۴ — اگر به Console دسترسی دارید، وضعیت SSH را بررسی کنید: systemctl status ssh
🔹 مرحله ۵ — پورت Listening را بررسی کنید: ss -tlnp | grep :22
🔹 مرحله ۶ — تنظیمات SSH را بررسی کنید: sshd -t
🔹 مرحله ۷ — Firewall را بررسی کنید: ufw status یا ابزار Firewall مورد استفاده سرور
🔹 مرحله ۸ — لاگ‌ها را بررسی کنید: journalctl -u ssh –no-pager -n 100
🔹 مرحله ۹ — Debug را فعال کنید: ssh -vvv root@SERVER_IP
🔹 مرحله ۱۰ — منابع VPS را بررسی کنید: top، free -h، df -h

اگر SSH کاملاً قطع شده باشد چه کنیم؟

اگر SSH به هیچ عنوان وصل نمی‌شود، مهم‌ترین ابزار شما Console خارج از SSH است. بسته به ارائه‌دهنده VPS ممکن است گزینه‌هایی مانند موارد زیر وجود داشته باشد:

🔹 Web Console
🔹 VNC
🔹 KVM
🔹 Serial Console
🔹 Rescue Mode

با ورود از این روش‌ها می‌توانید بدون نیاز به SSH وضعیت سرویس، Firewall، دیسک، RAM و تنظیمات sshd را بررسی کنید.

مشکل SSH دارید؟ کارشناسان ما کمکتان می‌کنند

اگر همچنان درگیر خطاهای SSH هستید و نمی‌دانید علت قطعی یا Timeout کجاست، تیم فنی ایرانیکاسرور آماده است تا سرور شما را بررسی، کانفیگ و عیب‌یابی کند. کافی است درخواست خود را ثبت کنید تا در سریع‌ترین زمان ممکن راهنمایی شوید.

تماس با پشتیبانی: 91302460021  | ایرانیکاسرور

یک نکته بسیار مهم درباره تغییر تنظیمات SSH

یکی از اشتباهات رایج این است که کاربر فایل /etc/ssh/sshd_config را تغییر می‌دهد و بلافاصله SSH را Restart می‌کند. روش امن‌تر این است:

sshd -t
systemctl restart ssh

⚠️ هنگام تغییر پورت SSH بهتر است جلسه SSH فعلی را نبندید تا ابتدا اتصال جدید را با پورت جدید آزمایش کنید.

سوالات متداول درباره عیب‌یابی SSH

چرا SSH من Connection timed out می‌دهد؟

معمولاً به دلیل مسدود بودن پورت توسط فایروال، IP اشتباه، تغییر پورت SSH یا مشکل در مسیر شبکه. ابتدا IP و پورت را بررسی کنید و سپس با Test-NetConnection یا nc اتصال TCP را تست کنید.

تفاوت Connection refused و Connection timed out چیست؟

در Timeout پاسخ دریافت نمی‌شود و احتمال مسدود بودن مسیر وجود دارد، اما در Connection refused سیستم مقصد قابل دسترسی است ولی روی آن پورت سرویس Listen نمی‌کند یا اتصال Reject می‌شود.

چگونه بفهمم SSH روی چه پورتی اجرا می‌شود؟

با دستور ss -tlnp پورت‌های Listening را ببینید و با ss -tlnp | grep ssh پورت مربوط به SSH را پیدا کنید. همچنین مقدار Port در فایل /etc/ssh/sshd_config را بررسی کنید.

آیا Fail2ban می‌تواند باعث قطع SSH شود؟

بله. اگر چند بار رمز اشتباه وارد کنید یا رفتار مشکوکی داشته باشید، Fail2ban ممکن است IP شما را مسدود کند. با fail2ban-client status sshd وضعیت Jail را بررسی کنید.

اگر SSH کاملاً قطع شد چگونه وارد سرور شوم؟

از Console خارج از SSH مثل VNC، KVM، Serial Console یا Rescue Mode که ارائه‌دهنده VPS در اختیار شما قرار می‌دهد استفاده کنید و سپس سرویس، فایروال و تنظیمات sshd را بررسی کنید.

جمع‌بندی

خرابی SSH لزوماً به معنی خاموش بودن VPS نیست. برای پیدا کردن علت واقعی باید مشکل را از چند لایه بررسی کنید:

IP
 ↓
Network
 ↓
Port
 ↓
Firewall
 ↓
sshd
 ↓
Configuration
 ↓
Authentication
 ↓
User

اگر با Timeout مواجه هستید، ابتدا شبکه، IP، پورت و Firewall را بررسی کنید. اگر Connection Refused دریافت می‌کنید، وضعیت sshd و پورت Listening را بررسی کنید. اگر Connection Reset مشاهده می‌کنید، لاگ‌های SSH، Firewall و ابزارهای امنیتی مانند Fail2ban اهمیت بیشتری پیدا می‌کنند. و اگر Permission Denied دریافت می‌کنید، تمرکز اصلی باید روی احراز هویت، Username، Password، SSH Key و تنظیمات دسترسی باشد.

با همین روش مرحله‌به‌مرحله می‌توانید به‌جای آزمون‌وخطای تصادفی، محل دقیق مشکل SSH را پیدا کنید.

سرور مجازی حرفه‌ای، از ایرانیکاسرور

برای میزبانی سایت، اجرای سرویس‌های تحت وب، میکروتیک، گیم‌سرور و پروژه‌های حساس، می‌توانید روی سرور مجازی ایران، سرور اختصاصی، میکروتیک، هاست وردپرس و دامین ایرانیکاسرور حساب کنید. منابع اختصاصی، دیسک NVMe، پهنای باند نامحدود و پشتیبانی ۲۴/۷ در کنار شماست.

تماس با پشتیبانی: 91302460021  | ایرانیکاسرور

🎯 چالش آموزشی
مباحثی که در این مقاله یاد گرفتید را در عمل پیاده‌سازی کنید و نتیجه را با ما به اشتراک بگذارید.
شروع چالش

💬 دیدگاه‌ها 0

هنوز دیدگاهی ثبت نشده است. اولین نفری باشید که نظر می‌دهید!

✍️ دیدگاه خود را بنویسید