如何在没有 SSH 访问权限的情况下恢复 Amazon Lightsail 服务器
در این مقاله روش‌های ریکاوری سرور Amazon Lightsail بدون دسترسی SSH را بررسی می‌کنیم.

如何在没有 SSH 访问权限的情况下恢复 Amazon Lightsail 服务器

本文将向您展示如何在没有 SSH 访问权限的情况下恢复 Amazon Lightsail 服务器。我们将详细介绍恢复访问权限和数据所需的各种方法和工具,并提供分步指南。.
0 股票
0
0
0
0

چه‌کاری انجام دهیم وقتی دسترسی SSH به سرور Lightsail قطع شده؟

در محیط‌های production، از دست رفتن دسترسی SSH به یک سرور Amazon Lightsail می‌تواند باعث توقف سرویس‌ها و خسارت شود. در ادامه یک راهنمای قدم‌به‌قدم فنی و عملی برای ریکاوری سروری که دسترسی SSH ندارد آورده شده است: از چک‌های سریع تا روش Rescue با snapshot و اتصال دیسک به یک instance کمکی.

دلایل معمول از دست رفتن SSH

چند دلیل رایج که باعث قطع دسترسی SSH می‌شوند:

  • تغییر یا خراب شدن /etc/ssh/sshd_config
  • خطا در مجوزهای فایل ~/.ssh 或者 /root/.ssh (permissions)
  • پاک شدن یا خراب شدن فایل 授权密钥
  • پُر بودن دیسک که مانع راه‌اندازی sshd یا نوشتن لاگ می‌شود
  • تغییرات فایروال داخلی (ufw/iptables) یا فایروال Lightsail (Networking → Firewall)
  • حذف یا خراب شدن بسته openssh-server
  • مشکلات SELinux یا AppArmor
  • گم شدن کلید خصوصی محلی یا اشتباه در Key Pair
  • سیستمی که به‌صورت نادرست بوت می‌شود یا خطای فایل‌سیستم

مرحلهٔ صفر — چک‌های سریع (قبل از هر اقدام سنگین)

قبل از شروع روش‌های پیچیده‌تر، این موارد را بررسی کنید تا سریع‌تر به راه‌حل برسید.

  • در پنل Lightsail وضعیت instance را بررسی کنید (running / stopped).
  • 在该部分 联网 مطمئن شوید قانون SSH (TCP 22) فعال است.
  • دکمه Connect using SSH (browser-based) در پنل Lightsail را امتحان کنید.
  • اگر تغییرات فایروال در سرور احتمال دارد، از کنسول لاگ‌ها یا CloudWatch لاگ‌ها بررسی کنید.
  • در صورت دسترسی به کنسول سریال لاگ‌های ssh را بررسی کنید: journalctl -u sshd -b 或者 tail -n 200 /var/log/auth.log

روش‌های ریکاوری — از آسان تا پیشرفته

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

1) استفاده از اتصال کنسول وب (Browser-based SSH) یا Serial Console

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

2) بررسی فایروال Lightsail

در پنل Lightsail → Networking → Firewall بررسی کنید که Rule برای پورت 22 وجود داشته باشد:

  • Protocol: TCP
  • Port range: 22

اگر بسته شده بود، آن را باز کنید و دوباره تلاش کنید.

3) در صورت گم شدن کلید خصوصی — دانلود کلید پیش‌فرض منطقه‌ای

Lightsail کلیدهای SSH را بر اساس منطقه مدیریت می‌کند. به Account → SSH keys بروید و کلید مربوط به منطقه خود را دانلود کنید. سپس با آن امتحان کنید:

ssh -i ~/.ssh/lightsail_default_key.pem ubuntu@<public-ip>

4) بررسی فضای دیسک و راه‌اندازی مجدد سرویس‌ها (اگر به کنسول دسترسی دارید)

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

df -h
sudo journalctl --vacuum-time=2d
sudo apt-get autoremove -y
sudo journalctl -u ssh -b --no-pager
sudo tail -n 200 /var/log/auth.log

5) روش Rescue اصلی: snapshot → ساخت دیسک/instance کمکی → mount → chroot → اصلاح تنظیمات

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

گام‌های کلی:

  1. از instance مورد نظر یک Snapshot بگیرید (Lightsail → Create snapshot).
  2. از این snapshot یک block storage disk یا یک instance جدید بسازید.
  3. یک instance کمکی (Rescue instance) با همان توزیع بسازید.
  4. دیسک ساخته‌شده را به Rescue instance متصل کنید.
  5. در Rescue instance لاگین کرده و دیسک را پیدا کنید با lsblk و سپس mount کنید.

نمونه دستورات برای mount و chroot (فرض شود دیسک به /dev/xvdf1 متصل شده):

sudo lsblk
sudo mkdir -p /mnt/rescue
sudo mount /dev/xvdf1 /mnt/rescue
sudo mount --bind /dev /mnt/rescue/dev
sudo mount --bind /proc /mnt/rescue/proc
sudo mount --bind /sys /mnt/rescue/sys
sudo chroot /mnt/rescue /bin/bash

در محیط chroot اقدامات مهم شامل:

  • بازگردانی 授权密钥 برای کاربر مناسب
  • نصب یا بازسازی openssh-server
  • بررسی و اصلاح /etc/ssh/sshd_config
  • فعال‌سازی سرویس ssh

نمونه دستورات داخل chroot:

mkdir -p /home/ubuntu/.ssh
echo "ssh-rsa AAAA... your-public-key ..." >> /home/ubuntu/.ssh/authorized_keys
chown -R ubuntu:ubuntu /home/ubuntu/.ssh
chmod 700 /home/ubuntu/.ssh
chmod 600 /home/ubuntu/.ssh/authorized_keys
apt-get update && apt-get install --reinstall openssh-server -y
# Ensure sshd config allows key auth and, if needed temporarily, password auth
# Example: PubkeyAuthentication yes, PermitRootLogin prohibit-password, PasswordAuthentication yes
systemctl enable ssh
systemctl restart ssh

خروج از chroot و آن‌مانت کردن دیسک:

exit
sudo umount /mnt/rescue/sys
sudo umount /mnt/rescue/proc
sudo umount /mnt/rescue/dev
sudo umount /mnt/rescue

در نهایت دیسک را جدا کرده و یا به instance اصلی دوباره متصل کنید یا از آن یک instance جدید بسازید و static IP را در Lightsail منتقل کنید.

6) جایگزینی کامل با instance از snapshot (کم‌دردسر و سریع)

اگر نمی‌خواهید با mount/chroot درگیر شوید:

  • از snapshot یک instance جدید بسازید.
  • با کلید پیش‌فرض یا کنسول وب به instance جدید متصل شوید.
  • در صورت نیاز static IP قبلی را از instance قدیمی جدا کرده و به instance جدید الصاق کنید.

این روش سریع است ولی ممکن است نیاز به تنظیمات شبکه یا device-specific داشته باشد.

7) ریست کردن رمز عبور و برای ویندوز

برای لینوکس‌هایی که 密码验证 فعال است می‌توانید در chroot با passwd username رمز را تغییر دهید.

برای Windows Lightsail معمولاً امکان استخراج رمز RDP از پنل Lightsail وجود دارد یا از snapshot برای ساخت instance جدید استفاده کنید.

چک‌لیست و دستورات مفید برای عیب‌یابی پس از ریکاوری

  • بررسی مجوزها و فایل‌های ssh:
    sudo ls -la /home/ubuntu/.ssh
    sudo stat -c "%a %n" /home/ubuntu/.ssh /home/ubuntu/.ssh/authorized_keys
  • بررسی سرویس ssh:
    sudo systemctl status ssh
    sudo journalctl -u ssh -n 200
  • بررسی فایروال:
    sudo ufw status verbose
    sudo iptables -L -n -v
  • بررسی فضای دیسک و لاگ‌ها:
    df -h
    du -sh /var/log/*
    sudo tail -n 200 /var/log/auth.log
    sudo tail -n 200 /var/log/syslog

نکات امنیتی و بهترین شیوه‌ها برای جلوگیری از قفل شدن مجدد

  • همیشه حداقل یک کلید SSH اضافی 在 授权密钥 نگه دارید (کلید همکار یا پشتیبان).
  • 从 configuration management مثل Ansible/Chef/Puppet برای اعمال تغییرات حساس استفاده کنید تا تغییرات قابل بازگشت باشند.
  • از snapshots دوره‌ای و خودکار استفاده کنید.
  • برای جلوگیری از حملات از فایروال شبکه و ابزارهایی مثل fail2ban استفاده کنید و دسترسی SSH را با IP whitelisting محدود کنید.
  • فعال کردن logging متمرکز (مثلاً ارسال لاگ‌ها به S3 یا سرور لاگ خارجی) تا در صورت مشکل لاگ‌ها قابل دسترسی باشند.
  • از لاگین مستقیم root خودداری کنید؛ از یک کاربر با sudo 使用。.

مثال عملی — سناریو: authorized_keys پاک شده است

مسئله: کلید محلی کار نمی‌کند و 授权密钥 حذف شده.

راه حل سریع: snapshot → دیسک → attach به rescue instance → mount → بازگردانی 授权密钥 → reattach یا ساخت instance جدید → attach static IP.

sudo lsblk
sudo mount /dev/xvdf1 /mnt/rescue
sudo mkdir -p /mnt/rescue/home/ubuntu/.ssh
sudo echo "ssh-rsa AAAA... your-public-key" >> /mnt/rescue/home/ubuntu/.ssh/authorized_keys
sudo chown -R 1000:1000 /mnt/rescue/home/ubuntu/.ssh
sudo chmod 700 /mnt/rescue/home/ubuntu/.ssh
sudo chmod 600 /mnt/rescue/home/ubuntu/.ssh/authorized_keys

وقتی همه راه‌ها شکست خورد — تماس با پشتیبانی و بازیابی داده

اگر امکان تنظیم دستی وجود نداشته باشد یا data integrity در خطر باشد:

  • از snapshot های قبلی استفاده کنید یا با پشتیبانی Lightsail/AWS تماس بگیرید.
  • اگر سرویس حیاتی است و نیاز به مهاجرت فوری دارید، یک instance جدید بسازید و DNS یا static IP را به‌روزرسانی کنید تا سرویس ادامه یابد.

结论和最终建议

ریکاوری یک سرور Lightsail بدون دسترسی SSH معمولاً با یکی از دو مسیر انجام می‌شود:

  • اصلاح سریع از طریق console / بازگردانی کلید / باز کردن فایروال — کم‌هزینه و سریع
  • روش Rescue با snapshot و اتصال دیسک به یک instance کمکی برای mount و chroot — قوی‌تر و قابل بازیابی کامل فایل‌ها

با تهیه snapshot منظم و رعایت نکات امنیتی می‌توانید ریسک قفل شدن دسترسی SSH را به‌طور قابل توجهی کاهش دهید.

常见问题解答

您可能也喜欢