امنسازی SSH؛ ورود با کلید و محدودکردن root بدون قطع دسترسی

برای امنسازی SSH، ابتدا مسیر ورود جایگزین را بسازید و آزمایش کنید؛ سپس روش قدیمی را محدود کنید. این راهنما برای اوبونتوی ساده با ورود کلیدی است. اگر MFA، LDAP یا سیاست سازمانی دارید، تنظیمات احراز هویت را بدون تطبیق تغییر ندهید.
۱. کاربر مدیریتی مستقل بسازید
روی سرور، نام cloudadmin نمونه است. اگر حساب مناسب از قبل دارید، همان را استفاده کنید:
sudo adduser cloudadmin
sudo usermod -aG sudo cloudadmin
رمز قوی کاربر را در مدیر رمز نگه دارید. داشتن کلید SSH لزوماً درخواست رمز sudo را حذف نمیکند. از پنجرهای دیگر با همین کاربر وارد شوید و sudo -v را آزمایش کنید. حساب root را هنوز نبندید.
۲. روی دستگاه خود کلید بسازید
در PowerShell ویندوز یا ترمینال لینوکسِ دستگاه خود:
ssh-keygen -t ed25519 -C "my-admin-device"
اگر مسیر پیشنهادی کلید موجود دارد، آن را بازنویسی نکنید؛ نام تازه انتخاب کنید. برای کلید passphrase تعیین کنید. فایل بدون .pub خصوصی است و باید روی دستگاه خودتان بماند؛ فقط محتوای فایل .pub به سرور منتقل میشود.
۳. کلید عمومی را به حساب درست اضافه کنید
در لینوکسِ رایانه، اگر ssh-copy-id نصب است، با پورت واقعی اجرا کنید:
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 cloudadmin@SERVER_IP
در ویندوز میتوانید محتوای فایل عمومی را با Get-Content بخوانید و در نشست همان کاربر روی سرور، یک خط به authorized_keys اضافه کنید. فایل موجود را جایگزین نکنید:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
دستورهای بالا باید در حساب مقصد اجرا شوند؛ اگر در root هستید، مسیر ~ متعلق به root است. کلید عمومی باید یک خط کامل باشد. مالک پوشه و فایل باید همان کاربر مقصد باشد.
۴. ورود کلیدی را واقعاً آزمایش کنید
از پنجرهٔ جدید دستگاه خود با مسیر کلید خصوصی وارد شوید. در ویندوز مسیر را متناسب با پوشهٔ کاربر بنویسید:
ssh -i ~/.ssh/id_ed25519 -o PreferredAuthentications=publickey -o PasswordAuthentication=no -p 22 cloudadmin@SERVER_IP
بعد از ورود، whoami و sudo -v را بررسی کنید. اگر کلید یا sudo کار نمیکند، ادامه ندهید. روش اتصال اولیه در راهنمای SSH در ویندوز و گوشی آمده است.
۵. تنظیمات مؤثر SSH را بررسی کنید
sudo sshd -T
sudo grep -RniE "^(Include|Match|PasswordAuthentication|KbdInteractiveAuthentication|PermitRootLogin|PubkeyAuthentication)" /etc/ssh/sshd_config /etc/ssh/sshd_config.d
در OpenSSH معمولاً اولین مقدار بهدستآمده ملاک است؛ اضافهکردن یک فایل با نام دلخواه لزوماً تنظیم قبلی را تغییر نمیدهد. فایلهای Include و بخشهای Match را بررسی کنید. از فایلهایی که قرار است تغییر دهید نسخهٔ پشتیبان خارج از پوشهٔ فعال تنظیمات بگیرید.
۶. ورود با رمز و root را محدود کنید
فقط پس از موفقیت مرحلهٔ چهار، تنظیمات زیر را در محل مناسب پیکربندی اعمال کنید. غیرفعالکردن keyboard-interactive برای این سناریوی صرفاً کلیدی است؛ در سناریوی MFA ممکن است لازم باشد روشن بماند:
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
پیش از اعمال، صحت نحو و سپس تنظیم مؤثر را بررسی کنید. برای قواعد Match، sshd -T -C با مشخصات واقعی user،host و addr لازم است. اگر خروجی مطابق انتظار نیست، تغییر را اعمال نکنید:
sudo sshd -t
sudo sshd -T | grep -E "^(pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|permitrootlogin)"
فقط اگر بررسی موفق بود، روی اوبونتو سرویس را reload کنید و اتصال جدید بگیرید:
sudo systemctl reload ssh
۷. آزمون نهایی و راه بازگشت
اتصال تازهٔ کلیدی و sudo باید کار کنند؛ ورود با رمز و root باید طبق سیاست رد شود. نشست قبلی را تنها پس از این آزمون ببندید. در صورت خطا، از همان نشست یا کنسول، فایل تغییرکرده را به نسخهٔ قبلی برگردانید، sshd -t بگیرید و دوباره reload کنید. خودکار فرض نکنید که فایل نسخهٔ پشتیبان داخل sshd_config.d بیاثر است.
برای محدودکردن شبکهٔ مبدأ، راهنمای UFW را ببینید. تغییر پورت بهتنهایی جای احراز هویت قوی نیست. دسترسی همکاران را با کلید جداگانه مدیریت کنید تا هنگام لغو دسترسی، کلید همه عوض نشود.
منابع و ادامهٔ یادگیری
مبنای مثالهای سرور، اوبونتو ۲۴٫۰۴ LTS است؛ نام سرویسها و روش نصب در توزیعهای دیگر ممکن است متفاوت باشد. تصویر مقاله مفهومی است. این دستورها هنگام تهیهٔ مقاله روی سرویس واقعی مشتری اجرا نشدهاند.
منابع رسمی: OpenSSH در اوبونتو، مرجع sshd_config
برای انتخاب زیرساخت، سرورهای لینوکس و چکلیست خرید VPS را ببینید. آموزشهای مکمل در مرکز آموزش پرشین کلود در دسترساند.


