تغییر پورت SSH و امنسازی ورود با SSH Key
پرینتدو کار امنیت ورود به سرور لینوکسی را خیلی بالا میبرند: عوض کردن پورت پیشفرض SSH (یعنی 22) و ورود با SSH Key بهجای رمز عبور. در این راهنما هر دو را با ترتیبی امن انجام میدهیم تا دسترسی خودتان قطع نشود.
هشدار: تا پایان کار، اتصال SSH فعلی را نبندید. هر تغییر را در یک پنجره (Session) دوم امتحان کنید. اگر مشکلی پیش بیاید، از همان پنجره اول آن را برمیگردانید.
بخش اول: تغییر پورت SSH
۱. باز کردن پورت جدید در فایروال (اول این کار)
یک عدد بین 1024 تا 65535 انتخاب کنید، مثلاً 2222 یا 49822. در دستورهای زیر بهجای NEW_PORT همین عدد را بنویسید.
در Ubuntu و Debian با ufw:
ufw allow NEW_PORT/tcp
در AlmaLinux و Rocky Linux با firewalld:
firewall-cmd --permanent --add-port=NEW_PORT/tcp
firewall-cmd --reload
در AlmaLinux و Rocky، SELinux هم باید اجازه استفاده از پورت جدید را بدهد. اگر دستور semanage نصب نیست، اول بسته policycoreutils-python-utils را نصب کنید:
dnf install -y policycoreutils-python-utils
semanage port -a -t ssh_port_t -p tcp NEW_PORT
۲. ویرایش فایل sshd_config
nano /etc/ssh/sshd_config
خط #Port 22 را پیدا کنید، علامت # را از ابتدای آن بردارید و عدد را عوض کنید:
Port NEW_PORT
با Ctrl+O و Enter فایل را ذخیره کنید و با Ctrl+X از nano خارج شوید. بعد درستی فایل را بررسی کنید. اگر دستور هیچ خروجیای نداد، فایل بدون خطاست:
sshd -t
۳. اعمال تغییرات
در AlmaLinux و Rocky Linux:
systemctl restart sshd
در Ubuntu 24.04 (و نسخههای بعد از 22.10)، SSH بهطور پیشفرض با ssh.socket اجرا میشود و پورت از طریق آن تنظیم میشود. برای اینکه بدانید این حالت روی سرور شما فعال است یا نه، این دستور را اجرا کنید:
systemctl is-active ssh.socket
اگر خروجی active بود، این دستور را اجرا کنید:
systemctl daemon-reload && systemctl restart ssh.socket
در غیر این صورت (مثلاً در Ubuntu 22.04 یا Debian):
systemctl restart ssh
بعد بررسی کنید SSH روی پورت جدید فعال شده باشد:
ss -tlnp | grep NEW_PORT
۴. امتحان در پنجره دوم
پنجره اول را باز نگه دارید و یک PowerShell یا Terminal جدید باز کنید:
ssh -p NEW_PORT root@YOUR_SERVER_IP
اگر ورود موفق بود، میتوانید پورت 22 را در فایروال ببندید. در ufw:
ufw delete allow 22/tcp
در firewalld:
firewall-cmd --permanent --remove-service=ssh && firewall-cmd --reload
بخش دوم: ورود با SSH Key
۱. ساخت کلید روی کامپیوتر خودتان
این دستور را روی کامپیوتر خودتان اجرا کنید، نه روی سرور. در Windows (PowerShell)، macOS و Linux یکسان است:
ssh-keygen -t ed25519
برای مسیر ذخیره، Enter بزنید تا مسیر پیشفرض انتخاب شود. برای امنیت بیشتر یک Passphrase هم تعیین کنید. با این کار دو فایل ساخته میشود: id_ed25519 که کلید خصوصی است و نباید آن را به کسی بدهید، و id_ed25519.pub که کلید عمومی است.
۲. کپی کلید عمومی روی سرور
در macOS و Linux:
ssh-copy-id -p NEW_PORT root@YOUR_SERVER_IP
ویندوز دستور ssh-copy-id ندارد. بهجای آن این دستور را در PowerShell اجرا کنید:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh -p NEW_PORT root@YOUR_SERVER_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
۳. امتحان ورود با کلید
ssh -p NEW_PORT root@YOUR_SERVER_IP
اگر بدون پرسیدن رمز عبور سرور وارد شدید (یا فقط Passphrase کلید خودتان را پرسید)، کلید درست کار میکند.
۴. غیرفعال کردن ورود با رمز عبور
هشدار: این مرحله را فقط وقتی انجام دهید که ورود با کلید را در یک پنجره جدید امتحان کرده باشید و موفق بوده باشد. همچنین از کلید خصوصی خود نسخه پشتیبان داشته باشید. اگر کلید را گم کنید، دیگر وارد سرور نمیشوید.
در فایل /etc/ssh/sshd_config این خط را تنظیم کنید:
PasswordAuthentication no
در بعضی نسخههای Ubuntu، فایلهای داخل پوشه /etc/ssh/sshd_config.d/ (مثل 50-cloud-init.conf) این تنظیم را دوباره روی yes میگذارند. این پوشه را هم بررسی کنید:
grep -ri passwordauthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
بعد مثل قبل با sshd -t فایل را بررسی کنید و SSH را Restart کنید (در AlmaLinux و Rocky systemctl restart sshd و در Ubuntu systemctl restart ssh). در پایان، ورود را دوباره در پنجره دوم امتحان کنید.
اگر مشکل حل نشد
اگر دسترسی SSH را از دست دادهاید، از طریق ارسال تیکت با ما در تماس باشید و IP سرور و تغییراتی را که دادهاید بنویسید. پشتیبانی از طریق کنسول کمکتان میکند. تلفن پشتیبانی: 021-66538664