ورود به سرور با کلید SSH و امنسازی SSH (بدون رمز عبور)
رمز عبور SSH قابل حدس زدن و تکرارپذیر است ولی کلید SSH عملاً غیرقابل حدس است. با کلید نهتنها امنتر، بلکه سریعتر هم وارد میشوید. این راهنما کل مسیر از ساخت کلید تا تنظیمات سختگیرانهٔ سرور را نشان میدهد.
۱ساخت کلید روی کامپیوتر خودتان
الگوریتم ed25519 کوتاه، سریع و امن است. برای کلید یک عبارت عبور (passphrase) بگذارید تا در صورت دزدیده شدن فایل، بیفایده باشد.
ssh-keygen -t ed25519 -C "matin@laptop"
# فایلها: ~/.ssh/id_ed25519 (خصوصی) و ~/.ssh/id_ed25519.pub (عمومی)کلید خصوصی (بدون .pub) را هرگز به کسی نفرستید و در گیت قرار ندهید.
۲کپی کلید عمومی به سرور
ssh-copy-id کلید را به فایل authorized_keys سرور اضافه میکند و دسترسیها را درست میکند.
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@SERVER_IP
# دستی، اگر ssh-copy-id ندارید
cat ~/.ssh/id_ed25519.pub | ssh user@SERVER_IP 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'۳تست ورود با کلید
باید بدون درخواست رمز حساب کاربری وارد شوید (فقط شاید عبارت عبور کلید).
ssh user@SERVER_IP
ssh -v user@SERVER_IP # برای عیبیابی۴فایل ~/.ssh/config برای اتصال کوتاه
بهجای نوشتن IP و کاربر و پورت در هر بار، یک نام کوتاه تعریف کنید. سپس فقط ssh web بزنید.
nano ~/.ssh/config
Host web
HostName 203.0.113.10
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host db
HostName 10.0.0.5
User deploy
ProxyJump webبا ProxyJump به سروری که فقط از شبکهٔ داخلی در دسترس است از طریق سرور اول وصل میشوید.
۵بستن ورود با رمز عبور و root
فقط بعد از اینکه ورود با کلید را تست کردید این کار را انجام دهید و یک نشست دیگر را باز نگه دارید.
sudo nano /etc/ssh/sshd_config.d/99-hardening.conf
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers deploy
ClientAliveInterval 300
ClientAliveCountMax 2
sudo sshd -t && sudo systemctl reload sshاگر sshd -t خطا داد reload نکنید. کانفیگ اشتباه ممکن است دسترسی شما را قطع کند.
۶استفاده از ssh-agent
با agent فقط یک بار عبارت عبور کلید را وارد میکنید.
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh-add -l۷بررسی تلاشهای ورود ناموفق
ببینید چه کسانی به سرور شما حمله میکنند و در صورت نیاز fail2ban نصب کنید.
sudo lastb | head
sudo journalctl -u ssh --since today | grep -i 'failed' | tail
sudo fail2ban-client status sshd۸انتقال فایل و تونل
با همان کلید scp و rsync هم کار میکنند. تونل SSH برای دسترسی امن به سرویسهای داخلی (مثل دیتابیس) مفید است.
scp file.zip web:/tmp/
rsync -avz ./dist/ web:/var/www/app/
# تونل: پورت محلی 3307 را به MySQL روی سرور وصل میکند
ssh -N -L 3307:127.0.0.1:3306 webپرسشهای پرتکرار دربارهٔ ورود به سرور با کلید SSH و امنسازی SSH (بدون رمز عبور)
کلید خصوصی را گم کردم، چه کنم؟
اگر ورود با رمز غیرفعال شده باشد باید از کنسول پنل ارائهدهندهٔ سرور (VNC یا Rescue) وارد شوید و کلید جدید را به authorized_keys اضافه کنید. برای همین همیشه یک راه دسترسی جایگزین و بکاپ از کلیدها داشته باشید.
فایلهای ~/.ssh چه دسترسیهایی باید داشته باشند؟
پوشهٔ ~/.ssh ۷۰۰ و فایلهای کلید خصوصی و authorized_keys ۶۰۰. اگر دسترسیها بازتر باشد SSH کلید را نادیده میگیرد.