خطای SSH “connection رد شد” می تواند مانع از دسترسی شما به ماشین های راه دور در شبکه شود. در اینجا نحوه عیب یابی آن آمده است.
SSH یک پروتکل شبکه است که به شما امکان می دهد به طور ایمن به یک سیستم راه دور از طریق شبکه دسترسی داشته باشید و آن را مدیریت کنید. هنگام اتصال به یک ماشین راه دور از طریق SSH، ممکن است با خطای “اتصال رد شده” مواجه شده باشید. تجربه این مشکل می تواند ناامید کننده باشد به خصوص اگر شما یک مدیر سیستم هستید و مجبور هستید برخی از وظایف را بر روی سیستم راه دور به صورت فوری انجام دهید.
بیایید به برخی از دلایل احتمالی دریافت خطای SSH “connection reded” و روشهای رفع آن نگاهی بیندازیم.
1. بررسی کنید که آیا سرور SSH نصب شده است یا خیر
یکی از دلایل احتمالی خطای “اتصال رد شد” این است که دستگاه راه دور یک سرور SSH را اجرا نمی کند. بدون سرور SSH، دستگاه اتصالات SSH ورودی را نمی پذیرد و شما نمی توانید از راه دور به آن دسترسی داشته باشید.
بنابراین اولین قدم در عیب یابی خطا این است که بررسی کنید آیا سرور SSH روی دستگاه راه دور نصب شده است یا خیر. برای تأیید نصب سرور SSH از دستور زیر استفاده کنید:
در توزیع های مبتنی بر دبیان:
dpkg --list | grep ssh
در توزیع های مبتنی بر RHEL:
yum list installed | grep ssh
در openSUSE:
zypper search -i | grep ssh
در مورد توزیع های مبتنی بر Arch:
pacman -Q | grep ssh
اگر سرور SSH روی دستگاه راه دور نصب شده باشد، آن را در خروجی لیست میکنید. در غیر این صورت، باید سرور OpenSSH را روی دستگاه راه دوری که می خواهید از طریق SSH به آن دسترسی داشته باشید، نصب کنید. OpenSSH یک نسخه منبع باز از ابزار SSH برای دسترسی از راه دور و کنترل سیستم ها است.
برای نصب سرور OpenSSH از دستورات زیر استفاده کنید:
در توزیع های مبتنی بر دبیان:
sudo apt install openssh-server
در توزیع های مبتنی بر RHEL:
sudo yum install openssh-server
در openSUSE:
sudo zypper install openssh
در مورد توزیع های مبتنی بر Arch:
pacman -S openssh
2. وضعیت سرویس SSH را بررسی کنید
یکی دیگر از دلایل دریافت خطای “اتصال رد شده” می تواند این باشد که سرویس SSH غیرفعال است یا در دستگاه راه دور اجرا نمی شود. هنگامی که مطمئن شدید که سرور SSH نصب شده است، دومین چیزی که باید بررسی کنید وضعیت سرور است.
sudo systemctl status sshd
اگر سرویس راه اندازی و اجرا شود، خروجی آن را فعال (در حال اجرا) نشان می دهد. در غیر این صورت چیزی شبیه غیرفعال (مرده) خواهید دید.
اگر سرور SSH در حال اجرا نیست، می توانید با استفاده از دستور زیر آن را به صورت دستی راه اندازی کنید:
sudo systemctl start sshd
همچنین میتوانید سرویس را فعال کنید تا بهطور خودکار در هنگام بوت شدن با استفاده از:
sudo systemctl enable sshd
3. پورت SSH را بررسی کنید
به طور پیش فرض، سرور SSH روی پورت 22 اجرا می شود. با این حال، می توان پورت پیش فرض را تغییر داد. بنابراین، اگر خطای SSH “connection redd” را دریافت کردید، ممکن است به این دلیل باشد که در حال تلاش برای اتصال به سرور SSH در درگاه پیشفرض 22 در حالی که در پورت دیگری در حال اجرا است.
می توانید از دستور netstat با grep برای یافتن پورتی که سرور SSH به آن گوش می دهد استفاده کنید:
sudo netstat -plntu | grep ssh
همچنین می توانید پورت SSH را از فایل sshd_config با استفاده از دستور زیر پیدا کنید:
grep port /etc/ssh/sshd_config
پس از شناسایی پورت SSH صحیح، سعی کنید با استفاده از آن پورت خاص به سیستم راه دور خود متصل شوید.
4. فایروال سیستم خود را بررسی کنید
بیشتر مشکلات اتصال به دلیل مسدود کردن برخی پورت ها یا خدمات توسط فایروال دستگاه شما رخ می دهد. اگر دستگاه از راه دور سرور SSH را نصب کرده و در حال اجرا است، گام بعدی بررسی فایروال خود است.
برای اینکه بفهمید آیا فایروال اتصال را مسدود می کند یا خیر، با استفاده از دستورات زیر فایروال را به طور موقت غیرفعال کنید:
در توزیعهای لینوکس مبتنی بر دبیان و آرچ:
sudo ufw disable
در توزیع های مبتنی بر RHEL و openSUSE:
sudo systemctl disable firewalld
اگر بعد از غیرفعال کردن فایروال خطا ظاهر نشد، به این معنی است که فایروال اتصال را مسدود کرده است. در این حالت، فایروال را مجدداً فعال کنید و قانونی را اضافه کنید که به SSH اجازه دهد.
در توزیعهای لینوکس مبتنی بر دبیان و آرچ، از دستور زیر برای اجازه دادن به SSH در فایروال UFW استفاده کنید:
sudo ufw allow ssh
همچنین می توانید SSH را با شماره پورت موجود در فایروال مجاز کنید. فرض کنید سرور SSH از پورت 5555 استفاده می کند، سپس از دستور زیر برای اجازه دادن به آن در فایروال استفاده می کنید:
sudo ufw allow 5555
برای بررسی اینکه آیا قانون با موفقیت اضافه شده است، وضعیت UFW را بررسی کنید:
sudo ufw status
در توزیع های مبتنی بر RHEL و openSUSE، از دستور زیر برای اجازه دادن به SSH در فایروال استفاده کنید:
sudo firewall-cmd --permanent --add-service=ssh
برای اجازه دادن به SSH توسط شماره پورت، از دستور زیر استفاده کنید:
sudo firewall-cmd --permanent --add-port={port}/tcp
برای سرور SSH که بر روی پورت 4444 اجرا می شود، دستور به صورت زیر خواهد بود:
sudo firewall-cmd --permanent --add-port=4444/tcp
برای تأیید اضافه شدن موفقیت آمیز قانون در فایروال، اجرا کنید:
sudo firewall-cmd --list-all
5. تضاد آدرس IP را حل کنید
همچنین به دلیل مغایرت IP سرور SSH با IP سیستم دیگری در شبکه، احتمال بروز خطای SSH “connection رد شد” وجود دارد. این زمانی اتفاق میافتد که دو سیستم در یک شبکه ادعا میکنند که آدرس IP یکسانی دارند، که منجر به تضاد IP میشود.
برای تأیید وجود تداخل IP در شبکه شما، از ابزار arp-scan به صورت زیر استفاده کنید:
arp-scan [network-id]
اگر تداخل IP وجود داشته باشد، آدرس IP تکراری را در خروجی خواهید دید. تصویر زیر نمونه ای از تضاد IP در یک شبکه است:
برای جلوگیری از تداخل IP، مطمئن شوید که هیچ دستگاهی آدرس IP ثابتی نداشته باشد که با آدرسهای استخر DHCP همپوشانی داشته باشد.
نکته پاداش: SSH را در حالت کلامی اجرا کنید
هر زمان که با خطای SSH مواجه شدید، دستور ssh را در حالت verbose اجرا کنید تا مشکل را پیگیری کنید. برای اجرای SSH در حالت verbose از دستور ssh با گزینه -vvv به صورت زیر استفاده کنید:
ssh -vvv username@ip_address
در حالت کلامی، پیام های اشکال زدایی را در هر مرحله از اتصال خواهید دید که به شما کمک می کند بفهمید مشکل کجاست.
عیب یابی خطای SSH “Connection Refused” در لینوکس
با شناسایی علل احتمالی خطای اتصال SSH و پیاده سازی راه حل های پیشنهادی، قادر به عیب یابی و رفع خطای SSH “connection reded” خواهید بود. علاوه بر این مراحل، مطمئن شوید که به آدرس IP صحیح وصل شده اید و از اعتبارنامه های ورود مناسب استفاده می کنید.
برای ایمنتر کردن اتصال راه دور خود، میتوانید احراز هویت دو مرحلهای را برای SSH در لینوکس تنظیم کنید.