خداحافظی با رمز عبور: احراز هویت با کلیدهای SSH
اگر از وارد کردن هر بارهی رمز عبور برای اتصال به سرورهای لینوکسی خسته شدهاید، یا نگران حملات Brute Force روی پورت ۲۲ سرور خود هستید، زمان آن رسیده که به سراغ SSH Keys بروید. در این مقاله، تمام جزئیات ساخت، مدیریت و امنیت این کلیدها را بررسی میکنیم.
کلید SSH چیست و چطور کار میکند؟
احراز هویت با کلید SSH بر پایه رمزنگاری نامتقارن (Asymmetric Encryption) استوار است. برخلاف رمز عبور که یک متن مشترک بین شما و سرور است، در اینجا ما با یک جفتکلید (Key Pair) طرف هستیم:
- کلید عمومی (Public Key): مانند یک قفل است. آن را روی سرور مقصد قرار میدهید. افشای این کلید هیچ خطری ندارد.
- کلید خصوصی (Private Key): مانند کلید واقعی قفل است. این کلید فقط باید در سیستم شخصی شما بماند.
فرآیند احراز هویت: وقتی قصد اتصال دارید، سرور درخواستی(یک چالش) را با "قفل" (کلید عمومی) رمزنگاری کرده و برای شما میفرستد. کلاینت شما آن را با "کلید واقعی" (کلید خصوصی) باز میکند. اگر پاسخ درست باشد، سرور اجازه ورود میدهد؛ بدون اینکه هیچ رمز عبوری در شبکه جابهجا شده باشد.
انواع الگوریتمهای رمزنگاری؛ کدامیک امنتر است؟
هنگام ساخت کلید، باید الگوریتم رمزنگاری را انتخاب کنید. گزینههای رایج عبارتند از:
۱. RSA
قدیمیترین و رایجترین الگوریتم است. برای امنیت کافی در دنیای امروز، طول کلید RSA نباید کمتر از ۲۰۴۸ بیت باشد (ترجیحاً ۴۰۹۶ بیت).
- مزیت: سازگاری با تقریباً تمام سرورهای قدیمی.
- عیب: سرعت پایینتر و حجم بیشتر نسبت به الگوریتمهای مدرن.
۲. Ed25519
این الگوریتم مبتنی بر منحنیهای بیضوی (Elliptic Curve) است و در حال حاضر امنترین و بهینهترین گزینه محسوب میشود.
- مزیت: سرعت بسیار بالا، حجم بسیار کم کلید، و مقاومت بالا در برابر حملات جانبی.
- پیشنهاد: همواره از این الگوریتم استفاده کنید مگر اینکه سرور شما بسیار قدیمی باشد.
۳. ECDSA
مشابه Ed25519 اما بر پایه استانداردهای NIST. امنیت خوبی دارد اما برخی متخصصان به دلیل پیچیدگی و احتمال وجود درگاههای پشتی (Backdoor) در استانداردهای دولتی، Ed25519 را ترجیح میدهند.
مراحل راهاندازی
گام اول: تولید جفتکلید
در سیستم خودتان این دستور را بزنید:
ssh-keygen -t ed25519 -C "your_email@example.com"
کلیدها کجا ذخیره میشوند و کدام به کدام است؟
بعد از اجرای دستور ساخت کلید، دو فایل در پوشه مخفی .ssh در مسیر Home شما (مثلاً /home/user/.ssh) ساخته میشود.
نکته: برای دیدن این پوشه و فایلهای داخل آن در ترمینال، باید از دستور
ls -laاستفاده کنید چون با نقطه شروع شده و مخفی هستند.
این دو فایل معمولاً به این صورت نامگذاری میشوند (فرض بر الگوریتم Ed25519):
id_ed25519(بدون پسوند): این همان کلید خصوصی شماست. حکم ناموس دیجیتال شما را دارد! هرگز آن را به کسی ندهید و از روی سیستم خود جابهجا نکنید.id_ed25519.pub(با پسوند .pub): این کلید عمومی شماست (Public). این فایلی است که باید محتویاتش را روی سرور کپی کنید.
چرا موقع ساخت کلید ایمیل وارد میکنیم؟
در انتهای دستور ساخت کلید، بخشی به شکل -C "email@example.com" وجود دارد. این ایمیل هیچ نقش فنی در فرآیند رمزنگاری ندارد؛ بلکه صرفاً یک کامنت (Comment) است.
- کاربرد: وقتی چندین کلید برای پروژهها یا سرورهای مختلف دارید، این ایمیل در انتهای فایل کلید عمومی نوشته میشود تا بدانید این کلید متعلق به چه کسی یا چه سیستمی است. شما میتوانید به جای ایمیل، هر متن دیگری (مثل "Work-Laptop") بنویسید.
گام دوم: انتقال به سرور (روش هوشمند و ساده)
بهترین راه، استفاده از ابزار خودکار در سیستم شخصیتان است:
ssh-copy-id user@server_ip
این دستور خودش فایل .pub را پیدا کرده، به سرور متصل شده و آن را در فایل authorized_keys قرار میدهد و دسترسیها را تنظیم میکند.
انتقال دستی (پلن B)
اگر ابزار بالا را نداشتید:
- محتوای فایل
id_ed25519.pubرا کپی کنید. - در سرور، پوشه
.sshرا بسازید و فایلauthorized_keysرا ویرایش کنید:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "Public_Key_Copy_Text" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
تیر خلاص: غیرفعال کردن رمز عبور
وقتی مطمئن شدید اتصال با کلید برقرار است، ورود با رمز را در سرور ببندید تا هکرها حتی با داشتن رمز هم نتوانند وارد شوند:
- فایل
/etc/ssh/sshd_configرا ویرایش کنید. - مقدار
PasswordAuthenticationرا بهnoتغییر دهید. - سرویس را ریستارت کنید:
sudo systemctl restart ssh