🔒 امنیت و پشتیبان‌گیری

ورود به سرور با کلید SSH به‌جای رمز عبور (آموزش کامل و رفع خطاها)

🕑 زمان مطالعه: ۵ دقیقه 🔄 آخرین بازبینی: ۲۵ مرداد ۱۴۰۵ 🎓 سطح: مبتدی
ورود به سرور با کلید SSH به‌جای رمز عبور (آموزش کامل و رفع خطاها)

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

تخفیف‌های امروز۱ از ۳
ایران سرور۲۵٪تخفیفسرور اختصاصی اوپال ۲، پلاتینیوم ۳، آمتیس ۲ایران سرور · بدون تاریخ انقضافقط برای پلن‌های «اوپال 2»، «پلاتینیوم 3» و «آمتیس2» سرور اختصاصی ایران (پلن‌های استاندارد)
IranDedicated
رفتن به سایت و استفاده
همه کدهای تخفیف ←
📋 فهرست مطالب (۱۷ بخش)
  1. کلیدِ SSH چطور کار می‌کند؟
  2. گام ۱: ساختِ کلید
  3. چرا Ed25519 و نه RSA؟
  4. گام ۲: انتقالِ کلیدِ عمومی به سرور
  5. گام ۳: سطحِ دسترسیِ فایل‌ها
  6. گام ۴: آزمایش، پیش از بستنِ رمز
  7. گام ۵: بستنِ ورود با رمز
  8. گام ۶: عاملِ کلید، تا هر بار عبارتِ عبور نخواهد
  9. مدیریتِ چند سرور
  10. رفعِ خطاهای رایج
  11. Permission denied (publickey)
  12. Agent admitted failure to sign
  13. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
  14. کلید برای انتقالِ فایل و کارهای خودکار
  15. چند کاربر روی یک سرور
  16. سه تنظیمِ تکمیلی که ارزشش را دارد
  17. نسخهٔ پشتیبانِ کلید

رمزِ عبورِ سرور را می‌شود حدس زد، دزدید یا با آزمونِ خودکار شکست. کلیدِ SSH را عملاً نه. اگر فقط یک کارِ امنیتی روی سرورتان انجام می‌دهید، همین باشد: ورود با کلید را جایگزینِ رمز کنید. این آموزش کلِ مسیر را روی لینوکس، مک و ویندوز پوشش می‌دهد.

کلیدِ SSH چطور کار می‌کند؟

دو فایلِ به‌هم‌وابسته ساخته می‌شود. کلیدِ عمومی روی سرور می‌نشیند و مثلِ قفل است؛ اشکالی ندارد اگر کسی آن را ببیند. کلیدِ خصوصی فقط روی کامپیوترِ شما می‌ماند و مثلِ خودِ کلید است. هنگامِ ورود، سرور معمایی می‌فرستد که فقط دارندهٔ کلیدِ خصوصی می‌تواند حلش کند — و کلیدِ خصوصی هرگز از دستگاهِ شما بیرون نمی‌رود.

عبارتِ عبورِ کلید را بگذارید. اگر لپ‌تاپتان گم شود، بدونِ آن هر کسی می‌تواند به سرورهایتان وارد شود. با عاملِ کلید (که پایین‌تر می‌آید) لازم نیست هر بار آن را تایپ کنید.

گام ۱: ساختِ کلید

روی لینوکس، مک یا PowerShellِ ویندوز:

ssh-keygen -t ed25519 -C "laptop-hamoon"

مقدارِ -C فقط یک برچسبِ توضیحی است و کمک می‌کند بعداً بدانید کدام کلید مالِ کدام دستگاه است. سه پرسش می‌پرسد: محلِ ذخیره (پیش‌فرض خوب است)، عبارتِ عبور، و تکرارِ آن.

خروجی دو فایل است: ~/.ssh/id_ed25519 کلیدِ خصوصی و ~/.ssh/id_ed25519.pub کلیدِ عمومی.

چرا Ed25519 و نه RSA؟

کوتاه‌تر است، سریع‌تر است و امنیتِ بهتری در همان اندازه می‌دهد. اگر با سرورِ بسیار قدیمی کار می‌کنید که پشتیبانی نمی‌کند، از ssh-keygen -t rsa -b 4096 استفاده کنید.

گام ۲: انتقالِ کلیدِ عمومی به سرور

ساده‌ترین راه، وقتی هنوز با رمز وارد می‌شوید:

ssh-copy-id hamoon@SERVER_IP

اگر این ابزار در دسترس نبود، دستی انجامش دهید:

cat ~/.ssh/id_ed25519.pub | ssh hamoon@SERVER_IP 
  "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

گام ۳: سطحِ دسترسیِ فایل‌ها

سرویسِ SSH اگر ببیند فایل‌ها برای دیگران قابل خواندن یا نوشتن‌اند، از روی احتیاط کلید را نمی‌پذیرد. این شایع‌ترین علتِ خطای «کلید پذیرفته نشد» است:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh

گام ۴: آزمایش، پیش از بستنِ رمز

یک پنجرهٔ ترمینالِ فعال را باز نگه دارید و در پنجرهٔ دوم ورود با کلید را بیازمایید:

ssh -o PreferredAuthentications=publickey hamoon@SERVER_IP

اگر بی‌درخواستِ رمزِ سرور وارد شدید (عبارتِ عبورِ کلید ممکن است پرسیده شود)، کار کرده است.

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

گام ۵: بستنِ ورود با رمز

در فایل /etc/ssh/sshd_config:

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no
ChallengeResponseAuthentication no

پیکربندی را پیش از راه‌اندازیِ مجدد بسنجید تا با یک غلطِ تایپی سرویس بالا نیاید:

sshd -t && systemctl reload ssh

گام ۶: عاملِ کلید، تا هر بار عبارتِ عبور نخواهد

روی لینوکس و مک:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

روی ویندوز، سرویسِ داخلیِ عاملِ SSH را روشن کنید و کلید را به آن بسپارید. اگر با PuTTY کار می‌کنید، ابزارِ Pageant همین نقش را دارد: کلیدِ .ppk را یک بار باز می‌کنید و تا پایانِ نشستِ ویندوز در حافظه می‌ماند.

مدیریتِ چند سرور

وقتی چند سرور دارید، فایلِ ~/.ssh/config کارتان را ساده می‌کند:

Host hamoon-web
    HostName 185.10.20.30
    Port 22000
    User hamoon
    IdentityFile ~/.ssh/id_ed25519

Host hamoon-db
    HostName 185.10.20.31
    User hamoon
    IdentityFile ~/.ssh/id_ed25519

از این پس فقط ssh hamoon-web کافی است — پورت و کاربر و کلید خودکار اعمال می‌شوند.

رفعِ خطاهای رایج

Permission denied (publickey)

به ترتیب بررسی کنید: کلیدِ عمومی در authorized_keys همان کاربر باشد (نه کاربرِ دیگر)، سطحِ دسترسیِ فایل‌ها درست باشد، و کلیدِ خصوصیِ متناظر روی دستگاهِ شما موجود باشد. برای دیدنِ جزئیات:

ssh -vvv hamoon@SERVER_IP

Agent admitted failure to sign

عاملِ کلید کلیدِ درست را ندارد. با ssh-add -l فهرست را ببینید و در صورت نبود، کلید را دوباره اضافه کنید.

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

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

ssh-keygen -R SERVER_IP

کلید برای انتقالِ فایل و کارهای خودکار

همان کلید برای انتقالِ فایل هم کار می‌کند:

# کپیِ یک فایل به سرور
scp -i ~/.ssh/id_ed25519 backup.tar.gz hamoon@SERVER_IP:/home/hamoon/

# همگام‌سازی یک پوشه
rsync -az -e "ssh -i ~/.ssh/id_ed25519" ./dist/ hamoon@SERVER_IP:/var/www/html/

برای اسکریپت‌های خودکار (پشتیبان‌گیری شبانه، انتشارِ کد) ناچارید کلیدِ بدونِ عبارتِ عبور بسازید. در این حالت، خطر را با محدود کردنِ خودِ کلید مهار کنید. در فایلِ authorized_keysِ سرورِ مقصد، پیش از کلید این قیدها را بنویسید:

from="1.2.3.4",no-port-forwarding,no-agent-forwarding,no-pty,command="/usr/local/bin/backup-only.sh" ssh-ed25519 AAAA... backup-job

با command، حتی اگر کلید لو برود، فقط همان یک اسکریپت اجرا می‌شود و دسترسیِ پوسته داده نمی‌شود.

چند کاربر روی یک سرور

اگر کسِ دیگری هم به سرور دسترسی دارد، هرگز کلیدِ مشترک نسازید. برای هر نفر کاربرِ جدا و کلیدِ جدا بسازید:

  • ردِ پای هر کار در لاگ به نامِ همان شخص ثبت می‌شود.
  • قطعِ دسترسیِ یک نفر به حذفِ یک خط از authorized_keysِ او خلاصه می‌شود، نه تغییرِ کلیدِ همه.
  • می‌توانید سطحِ دسترسیِ متفاوت بدهید؛ همه لازم نیست sudo داشته باشند.

برای دیدنِ اینکه چه کلیدهایی روی سرور مجاز هستند:

for u in /home/*/.ssh/authorized_keys /root/.ssh/authorized_keys; do
  [ -f "$u" ] && echo "== $u" && ssh-keygen -lf "$u"
done

سه تنظیمِ تکمیلی که ارزشش را دارد

  1. محدود کردنِ کاربرانِ مجاز: در sshd_config با AllowUsers hamoon deploy فقط همین دو کاربر می‌توانند وارد شوند.
  2. کوتاه کردنِ مهلتِ ورود: LoginGraceTime 20 اتصال‌های نیم‌کارهٔ رباتی را سریع‌تر می‌بندد.
  3. کاهشِ تلاش‌های مجاز: MaxAuthTries 3 همراه با Fail2ban، فشارِ اسکنِ خودکار را به‌شکلِ محسوسی کم می‌کند.

نسخهٔ پشتیبانِ کلید

کلیدِ خصوصی را در جایی مطمئن نگه دارید — نه در فضای ابریِ همگام‌شونده و نه در پیام‌رسان. اگر یک کلید را روی چند سرور استفاده می‌کنید، گم شدنش یعنی از دست دادنِ همه. برای همین بهتر است دومین کلید (مثلاً از کامپیوترِ دیگر) را هم از قبل در authorized_keys ثبت کنید تا راهِ ورودِ جایگزین داشته باشید.

پرسش‌های متداول

برای کلید SSH عبارت عبور بگذارم یا نه؟
بله. اگر لپ‌تاپ گم شود، بدون عبارت عبور هر کسی می‌تواند به همه سرورهایتان وارد شود. با عامل کلید لازم نیست هر بار آن را تایپ کنید. تنها استثنا کلیدهای خودکار بین سرورها است که آن‌ها را باید با قید from و دسترسی محدود مهار کرد.
چرا Ed25519 بهتر از RSA است؟
کوتاه‌تر و سریع‌تر است و در همان اندازه امنیت بهتری می‌دهد. فقط اگر با سرور بسیار قدیمی کار می‌کنید که پشتیبانی نمی‌کند، از RSA با طول ۴۰۹۶ بیت استفاده کنید.
خطای Permission denied (publickey) را چطور رفع کنم؟
سه چیز را بررسی کنید: کلید عمومی در authorized_keys همان کاربری باشد که با آن وارد می‌شوید، سطح دسترسی پوشه ssh و فایل authorized_keys درست باشد، و کلید خصوصی متناظر روی دستگاه شما موجود باشد. با سوئیچ vvv جزئیات را ببینید.
پیام تغییر اثرانگشت سرور یعنی چه؟
کلید میزبان سرور عوض شده. اگر خودتان سرور را بازنصب کرده‌اید طبیعی است و باید ردیف قدیمی را با ssh-keygen -R حذف کنید. اگر نکرده‌اید، وارد نشوید و اول از شرکت میزبان بپرسید.
اگر کلید خصوصی را گم کنم چه می‌شود؟
اگر ورود با رمز را بسته باشید، تنها راه بازگشت کنسول تحت وب پنل شرکت میزبان است. برای پیشگیری، کلید دومی از دستگاه دیگر را هم از قبل در authorized_keys ثبت کنید.
پارس پکدیتاسنتر داخلی، پرداخت ریالینقد و بررسی شرکت مشاهده سایت
ایران سروردیتاسنتر داخلی، پرداخت ریالینقد و بررسی شرکت مشاهده سایت
این آموزش را بفرستید: ✈ تلگرام 💬 واتس‌اپ
✨
دربارهٔ تهیهٔ این مطلب

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

آموزش‌های مرتبط