نویسنده : Arvan

بررسی و حل مشکل SSH به ابرک

linkedin

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

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

قدم اول: اطمینان از روشن بودن ابرک
لطفن به پنل کاربری خود رفته و مطمین شوید ابرک شما روشن است.

قدم دوم: اطمینان از ارتباط اینترنتی به ابرک
ساده‌ترین و در عین حال کاراترین روش برای فهمیدن این موضوع، استفاده از Ping برای بررسی ارتباط با سرور است، برای این کار لطفن آدرس IP ابرک خود را با دستور زیر پینگ کنید تا از داشتن ارتباط اینترنتی به آن اطمینان حاصل کنید.

Ping my_server_ip_address

اگر ارتباط اینترنت برقرار بود و ابرک به اصلاح پینگ شد،‌ ممکن است یکی از پیام‌های زیر را هنگام SSH زدن مشاهده کنید:

ssh: connect to host [...] port 22: operation timed out 

ssh: connect to host [...] port 22: connection refused 

(Permission denied (publickey 

ssh_exchange_identification: read: Connection reset by peer 

REMOTE HOST IDENTIFICATION HAS CHANGED 

!WARNING: UNPROTECTED PRIVATE KEY FILE 

مشکل Connection Timeout

به معنای این‌که SSH Client سعی در ایجاد ارتباط با سرور و سوکت مربوط به ssh داشته است اما سرور نتوانسته در مدت زمان معینی به Client پاسخ بدهد و ارتباط Timeout شده است.

حل مشکل:

  • اطمینان حاصل کنید که آدرس IP درست را وارد کرده‌اید.
  • اطمینان حاصل کنید که اینترنت شما مشکلی با پورت SSH ( معمولان پورت ۲۲) نداشته باشد، برای این منظور می‌توانید به یک سرور دیگر SSH بزنید.
  • بررسی وضعیت سرویس SSH سمت سرور

از طریق پنل ابرآروان وارد کنسول ابرک خود شوید و با دستور زیر در Input Chain به دنبال قوانینی باشید که برای پورت ۲۲ Allow باشد.

iptables -nL

در این قسمت نباید هیچ قانونی پورت ۲۲ را Deny کند یا به اصطلاح آن را ببندد.

  • اطمینان از وضعیت سرویس SSH

با دسترسی داشتن به کنسول ابرک در پنل ابر آروان، می‌توانید وضعیت سرویس را بررسی کنید. برای انجام این کار در پنل کاربری خود لاگین کرده و در کنسول ابرک مورد نظر، با وارد کردن دستور زیر از وضعیت سرویس مطلع شوید:

systemctl status sshd

اگر سرویس در وضعیت روشن نبود، دستور زیر آن را روشن و دوباره تست کنید:

systemctl start sshd
  • چک کردن وضعیت پورت سرویس SSH

این سرویس به‌شکل پیش‌فرض روی پورت ۲۲ فعال می‌شود اما به دلایل مختلف امنیتی، پورت پیش‌فرض را به پورت‌های دیگر تغییر می‌دهند. برای چک کردن پورت این سرویس از دستور زیر استفاده کنید:

grep Port /etc/ssh/sshd_config

اگر سرویس در وضعیت Running است با دستور زیر می‌توانید وضعیت سوکت آن را بررسی کنید:

ss -plnt
  • بررسی وضعیت فایروال

اگر از Firewall استفاده می‌کنید:

firewall-cmd --zone=public –add-service=ssh

اگر از UFW استفاده می‌کنید:

sudo ufw allow ssh

اگر از IP-Tables استفاده می‌کنید:

sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

مشکل Connection Refused

پیغام Connection Refused ممکن است در حالت‌های زیر رخ دهد:

  • هیچ سرویسی روی آدرس IP و پورتی که درخواست داده‌اید، سرویس‌دهی نمی‌کند.

راه حل:

sudo apt install openssh-server
  • سرویس مورد نظر خاموش بوده و در حالت Running نیست.

راه حل:

systemctl status sshd
systemctl restart sshd
  • فایروال سرور یا پنل ابری جلوی دسترسی به سرور را می‌گیرد که می‌توانید با استفاده این مطلب آن‌ را پیکربندی کنید.

اگر از Firewall استفاده می‌کنید:

firewall-cmd --zone=public –add-service=ssh

اگر از UFW استفاده می‌کنید:

sudo ufw allow ssh

اگر از IP-Tables استفاده می کنید:

sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

مشکل Remote host identification has changed

سرورها دارای شناسه‎ای به نام Fingerprint هستند که خلاصه‌ای از کلید عمومی سرور است. زمانی که شما برای اولین بار از طریق SSH به یک سرور متصل می‌شوید این شناسه در لپ‌تاپ یا کامپیوتر شما ذخیره می‌شود تا برای دفعات بعد جهت احراز هویت سرور استفاده شود.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:44m+Q5T0+0bG8XnbEkdusJPuCcYt5OsYt6P8LJXppzQ.
Please contact your system administrator.
Add correct host key in /home/geek/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/geek/.ssh/known_hosts:115
remove with:
ssh-keygen -f "/home/geek/.ssh/known_hosts" -R "37.152.183.81"
ECDSA host key for 37.152.183.81 has changed and you have requested strict checking.
Host key verification failed.

پیغام بالا یک نمونه از شرایطی است که Fingerprint سرور تغییر یافته و شما سعی در اتصال به سرور دارید.

  • آیا این پیغام از لحاظ امنیتی مهم است و باید نگران باشیم؟

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

  • چه زمانی Fingerprint تغییر می‌کند؟

۱- زمانی که شما از طریق پنل اقدام به بازسازی سیستم‌عامل کرده باشید کلید عمومی سرور مجدد تولید خواهد شد و پیرو آن Fingerprint نیز عوض می‌شود.

۲- زمانی که سرویس SSH را از سرور حذف و مجدد نصب کنید.

راه حل:
پس از این‌که اطمینان پیدا کردید از شبکه‌ی امن و IP درست سرور استفاده می‌کنید، میتوانید Fingerprint سرور رو از لپ‌تاپ یا کامپیوتر حذف و مجدد اقدام به اتصال به سرور کنید.

ssh-keygen -f "/home/geek/.ssh/known_hosts" -R "37.152.183.81"


مشکل ssh_exchange_identification: read: Connection reset by peer

این پیغام به این معنی است که هاست (سرور) به‌شکل ناگهانی ارتباط TCP را قطع می‌کند. این قطع کردن می‌تواند به دلایل زیر اتفاق بیفتد.

ارتباط توسط ویژگی Host-Based Access Control List بلاک شده است.
ممکن است IDS (intrusion Detection Systems) موجود IP شما را در لیست فایروال توسط Fail2ban, DenyHosts آپدیت کرده و مانع برقراری ارتباط شده باشند.

راه حل:
برای مورد DenyHosts فایل‌های زیر را در سرور بررسی کنید و اگر IP خودتان را یافتید آن را پاک کنید.

sudo nano /etc/hosts.deny

هم‌چنین می‌توانید IP سرور خود را در فایل زیر اضافه کنید.

sudo nano /etc/hosts.allow

مطالب مرتبط