اگر قرار باشد فقط یک کار برای امنیت سرور انجام دهید، این همان کار است. تا وقتی ورود با رمز عبور باز باشد، ربات ها میتوانند بی وقفه رمزهای مختلف را امتحان کنند. با احراز هویت کلیدی این مسیر کاملا بسته میشود، چون بدون داشتن فایل کلید خصوصی هیچ رمزی به کار نمی آید.
چطور کار میکند
یک جفت کلید ساخته میشود: کلید عمومی که روی سرور قرار میگیرد و کلید خصوصی که فقط روی سیستم شما میماند. هنگام ورود، سرور با کلید عمومی معمایی طرح میکند که فقط دارنده کلید خصوصی میتواند آن را حل کند.
نکته مهم این است که کلید خصوصی هیچوقت از سیستم شما خارج نمیشود و روی شبکه ارسال نمیگردد. به همین دلیل شنود ارتباط هم کمکی به مهاجم نمیکند.
ساخت جفت کلید
کلید را روی سیستم خودتان بسازید، نه روی سرور. اگر آن را روی سرور بسازید، کلید خصوصی از ابتدا روی ماشینی قرار گرفته که قصد محافظت از آن را دارید.
هنگام ساخت، عبارت عبور خواسته میشود. این عبارت لایه دومی است که اگر فایل کلید به دست کسی بیفتد، بلافاصله قابل استفاده نباشد.
ssh-keygen -t ed25519 -C "laptop-matin"ssh-keygen -t rsa -b 4096 -C "laptop-matin"انتقال کلید عمومی به سرور
ساده ترین راه، استفاده از ابزار آماده است که خودش دسترسی فایل ها را هم درست تنظیم میکند. در این مرحله هنوز با رمز عبور وارد میشوید؛ این آخرین باری است که به آن نیاز دارید.
اگر آن ابزار در دسترس نبود، میتوانید همین کار را دستی انجام دهید. دقت کنید که دسترسی پوشه و فایل باید دقیقا مطابق مقادیر زیر باشد وگرنه سرور کلید را نادیده میگیرد.
ssh-copy-id -p 2222 user@your-server-ipcat ~/.ssh/id_ed25519.pub | ssh -p 2222 user@your-server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysتست ورود قبل از هر تغییر دیگری
قبل از اینکه ورود با رمز عبور را غیرفعال کنید، حتما ورود با کلید را تست کنید. اگر بدون پرسیدن رمز عبور سرور وارد شدید، یعنی همه چیز درست است.
این نشست را باز نگه دارید. مرحله بعد جایی است که اگر اشتباهی رخ دهد، همین نشست تنها راه برگشت شماست.
ssh -p 2222 user@your-server-ipغیرفعال کردن ورود با رمز عبور
حالا که ورود با کلید کار میکند، مسیر رمز عبور را ببندید. مثل راهنمای تغییر پورت، بهتر است به جای ویرایش فایل اصلی، یک فایل جداگانه در پوشه drop-in بسازید تا در به روز رسانی ها حفظ شود.
بعد از اعمال، از یک ترمینال جدید ورود را دوباره تست کنید و تا وقتی موفق نشدید نشست قبلی را نبندید.
sudo nano /etc/ssh/sshd_config.d/99-hardening.confPasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
KbdInteractiveAuthentication nosudo sshd -t
sudo systemctl restart ssh- گزینه KbdInteractiveAuthentication را فراموش نکنید؛ بدون آن مسیر دیگری برای رمز عبور باز میماند.
- مقدار prohibit-password اجازه ورود root فقط با کلید را میدهد.
- اگر روی سرور از قبل پورت را تغییر داده اید، همان پورت را در دستور ورود بدهید.
کار با چند سرور و چند کلید
وقتی تعداد سرورها زیاد میشود، به خاطر سپردن آدرس ها و کلیدها سخت میشود. فایل پیکربندی سمت کلاینت این کار را ساده میکند و به شما اجازه میدهد با یک نام کوتاه وارد شوید.
برای اینکه لازم نباشد هر بار عبارت عبور کلید را وارد کنید، از ssh-agent استفاده کنید. کلید یک بار باز میشود و تا پایان نشست در حافظه میماند.
Host myserver
HostName 203.0.113.20
User matin
Port 2222
IdentityFile ~/.ssh/id_ed25519ssh myserverssh-add ~/.ssh/id_ed25519پرسش های پرتکرار
کدام نوع کلید را انتخاب کنم؟
برای سرورهای امروزی ed25519 بهترین انتخاب است؛ کوتاه تر، سریعتر و امن است. اگر باید با سیستم های خیلی قدیمی کار کنید، RSA با طول حداقل ۴۰۹۶ بیت گزینه سازگارتری است.
اگر کلید خصوصی خود را گم کنم چه اتفاقی می افتد؟
اگر ورود با رمز عبور را غیرفعال کرده باشید، دیگر نمیتوانید وارد شوید و باید از کنسول پنل سرور استفاده کنید. به همین دلیل قبل از غیرفعال کردن رمز عبور، حتما از کلید خصوصی نسخه پشتیبان بگیرید.
آیا گذاشتن عبارت عبور روی کلید لازم است؟
بله توصیه میشود. اگر فایل کلید خصوصی به دست کسی بیفتد، بدون عبارت عبور بلافاصله قابل استفاده است. با استفاده از ssh-agent لازم نیست هر بار آن را وارد کنید.
به راهنمای بیشتری نیاز دارید؟
تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.