پیکوسیستم خدمات فنی IT

SSH چیست؟ اتصال به سرور لینوکس با کلید، تنظیم sshd_config و امن سازی SSH

SSH اتصال رمزشده به خط فرمان سرور است. ساخت کلید SSH، کپی آن روی سرور، غیرفعال کردن ورود با رمز، تنظیم sshd_config، تونل با port forwarding و رفع خطاهای رایج اتصال.

SSH چیست؟ اتصال به سرور لینوکس با کلید، تنظیم sshd_config و امن سازی SSH

SSH چیست؟ پروتکلی برای اتصال رمزشده به سرور و اجرای دستور روی آن از راه دور. مدیر سرور لینوکس تقریباً همیشه با SSH کار می کند: نصب برنامه، ویرایش تنظیمات، دیدن لاگ ها و بکاپ گیری. SSH به جای Telnet آمد که رمز و دستورها را بدون رمزگذاری می فرستاد. SSH به طور پیش فرض روی پورت 22 کار می کند و همین پورت از اولین مکان هایی است که ربات ها روی هر سرور تازه امتحان می کنند.

اتصال ساده

در لینوکس و macOS و در ویندوز 10 به بعد، دستور ssh در خط فرمان آماده است:

ssh admin@203.0.113.10
ssh -p 2222 admin@server.example.com

اولین بار مرورگر اثر انگشت (fingerprint) کلید سرور را نشان می دهد و می پرسد به آن اعتماد دارید یا نه. اگر سرور را خودتان ساخته اید، می توانید اثر انگشت را با کنسول سرور مقایسه کنید. بعد از آن این اثر انگشت در فایل ~/.ssh/known_hosts ذخیره می شود. اگر بعداً هشدار «تغییر کرده» دیدید، یا سرور دوباره نصب شده یا کسی بین شما و سرور قرار گرفته؛ بدون بررسی ادامه ندهید.

ورود با رمز یا با کلید

ورود با رمز ساده است ولی ضعیف ترین حالت است، چون رمز را می شود حدس زد، و ربات ها روز و شب این کار را می کنند. ورود با کلید روش پیشنهادی است. دو کلید ساخته می شود: کلید خصوصی که روی کامپیوتر شما می ماند و کلید عمومی که روی سرور می رود. سرور با کلید عمومی یک چالش می سازد که فقط صاحب کلید خصوصی می تواند جواب بدهد.

ssh-keygen -t ed25519 -C "ali@example.com"
ssh-copy-id admin@203.0.113.10

دستور اول جفت کلید ed25519 می سازد (بهتر است برای کلید خصوصی یک رمز عبور بگذارید). دستور دوم کلید عمومی را به ~/.ssh/authorized_keys کاربر روی سرور اضافه می کند. بعد از آن بدون وارد کردن رمز حساب سرور وارد می شوید. روی ویندوز اگر ssh-copy-id ندارید، محتوای فایل id_ed25519.pub را دستی به آن فایل اضافه کنید.

امن سازی sshd_config

تنظیمات سرور SSH در فایل /etc/ssh/sshd_config است. بعد از اینکه ورود با کلید را تست کردید، این مقدارها را عوض کنید:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers admin deploy

معنی هر خط:

  • ورود مستقیم root بسته می شود. مدیر با کاربر عادی وارد می شود و با sudo کار می کند، که لاگ بهتری هم می ماند.
  • ورود با رمز غیرفعال می شود و فقط کلید قبول می شود.
  • بعد از 3 تلاش ناموفق، اتصال قطع می شود.
  • فقط کاربرانی که نام برده اید می توانند وارد شوند.

تغییر را با این دستورها اعمال کنید و همیشه قبل از بستن جلسه فعلی، یک جلسه دوم را امتحان کنید:

sudo sshd -t
sudo systemctl reload ssh

دستور اول فایل را از نظر خطا بررسی می کند. اگر تنظیم را اشتباه کنید و جلسه باز پشتیبان نداشته باشید، خودتان بیرون می مانید و فقط از کنسول سرور (iLO، iDRAC یا کنسول سرویس دهنده ابری) می توانید برگردید. نام سرویس در اوبونتو ssh و در AlmaLinux sshd است.

عوض کردن پورت و ابزارهای محافظ

تغییر پورت 22 به عدد دیگر لاگ های ورود ناموفق را کم می کند، چون ربات های ساده فقط پورت 22 را امتحان می کنند. اما مهاجم هدفمند با اسکن پورت آن را پیدا می کند، پس این کار جایگزین بقیه تنظیم ها نیست. در کنارش:

  • Fail2ban تلاش های ناموفق مکرر را در لاگ می بیند و IP مهاجم را برای مدتی در فایروال می بندد.
  • فایروال سرور دسترسی SSH را فقط از IP های دفتر یا VPN مجاز کند.
  • احراز هویت دومرحله ای برای SSH با PAM و برنامه هایی مثل Google Authenticator برای سرورهای حساس.

اصول نوشتن این قاعده ها در انواع فایروال و نحوه کار قاعده ها آمده است.

فایل config برای راحتی

برای سرورهایی که زیاد به آن ها وصل می شوید، در فایل ~/.ssh/config نام کوتاه تعریف کنید:

Host web1
    HostName 203.0.113.10
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

بعد از آن فقط ssh web1 کافی است. با گزینه ProxyJump هم می شود از یک سرور میانی (bastion) به سرورهای داخلی رسید، بدون اینکه آن ها آدرس عمومی داشته باشند.

Port forwarding و تونل SSH

SSH می تواند ترافیک را در یک تونل رمزشده بفرستد. مثلاً دیتابیسی که فقط به localhost سرور گوش می دهد را می شود روی کامپیوتر خودتان باز کرد:

ssh -L 3307:127.0.0.1:3306 admin@203.0.113.10

حالا اتصال به 127.0.0.1:3307 روی کامپیوتر شما به دیتابیس سرور می رسد. این کار بهتر از باز کردن پورت دیتابیس روی اینترنت است. تونل SSH برای استفاده دائمی و اتصال شعبه ها مناسب نیست و برای آن VPN سازمانی انتخاب بهتری است.

خطاهای رایج

  • Permission denied (publickey): کلید روی سرور نیست یا مجوز فایل ها اشتباه است. پوشه ~/.ssh باید 700 و فایل authorized_keys باید 600 باشد.
  • Connection refused: سرویس SSH اجرا نیست یا پورت اشتباه است یا فایروال بسته.
  • Connection timed out: بسته ها به سرور نمی رسند؛ فایروال، آدرس اشتباه یا قطع بودن سرور.
  • WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED: کلید سرور عوض شده، که اگر سرور را دوباره نصب نکرده اید باید جدی بگیرید.
  • Too many authentication failures: agent چند کلید را پشت سر هم امتحان می کند. با -o IdentitiesOnly=yes -i کلید فقط یک کلید مشخص را بفرستید.

انتقال فایل: scp، sftp و rsync

همان ارتباط SSH برای انتقال فایل هم به کار می رود و لازم نیست FTP بی رمز استفاده کنید:

scp backup.tar.gz admin@203.0.113.10:/srv/backups/
scp -r admin@203.0.113.10:/var/www/site ./site-copy
sftp admin@203.0.113.10
rsync -avz --progress ./site/ admin@203.0.113.10:/var/www/site/

rsync فقط تفاوت ها را می فرستد و برای انتقال های تکراری سریع تر است. با گزینه --dry-run قبل از اجرا ببینید چه چیزی تغییر می کند، مخصوصاً وقتی --delete هم می زنید که فایل های اضافه مقصد را پاک می کند.

SSH در ویندوز

ویندوز 10 و 11 و ویندوز سرور جدید، کلاینت OpenSSH داخلی دارند و دستور ssh در PowerShell و Windows Terminal کار می کند. برنامه PuTTY هم هنوز رایج است. کلید خصوصی PuTTY فرمت خودش (PPK) دارد و با ابزار PuTTYgen به فرمت OpenSSH تبدیل می شود. اگر کسی در شرکت کلید خصوصی را روی فلش نگه می دارد، آن را رمزگذاری کنید و حتماً برای کلید رمز عبور بگذارید.

ssh-agent برای نوشتن نکردن رمز کلید

اگر برای کلید رمز گذاشته اید، ssh-agent آن را یک بار می پرسد و تا پایان نشست در حافظه نگه می دارد:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh-add -l

از forwarding عامل (ssh -A) فقط روی سرورهای مورد اعتماد استفاده کنید. روی سرور آلوده، مهاجم می تواند از agent شما برای ورود به سرورهای دیگر سوءاستفاده کند. به جای آن از ProxyJump استفاده کنید که کلید را به سرور میانی نمی فرستد.

برای دستورهای روزمره بعد از ورود، دستورات لینوکس را ببینید.

مدیریت کلیدها در تیم

  • هر نفر کلید خودش را داشته باشد. کلید مشترک را نمی شود برای یک نفر ابطال کرد.
  • وقتی کسی تیم را ترک می کند، کلیدش را از authorized_keys همه سرورها پاک کنید. فهرست این کلیدها را جایی نگه دارید.
  • برای سرور تولید، حساب مدیر جدا از حساب استقرار خودکار (مثل CI/CD) داشته باشید. کلید استقرار فقط به کاری که لازم دارد دسترسی بدهد (CI/CD چیست).
  • کلیدهای قدیمی RSA با طول کم را عوض کنید. ed25519 انتخاب مناسب امروز است.

برای افزودن عامل دوم به ورود، احراز هویت دو مرحله ای را بخوانید.

منابع و مستندات رسمی

فهرست کامل تر بستن راه های نفوذ به سرور، در خدمت هاردنینگ سرور آمده است.

وقتی اتصال شکست می خورد، با ssh -v admin@server جزئیات را ببینید و لاگ سرور را در /var/log/auth.log بخوانید. تنظیم اولیه سرور جدید در نصب لینوکس روی سرور و فهرست کامل امن سازی در هاردنینگ سرور آمده. اگر مدیریت دسترسی SSH و کلیدهای تیم را نمی خواهید خودتان نگه دارید، این کار جزو مدیریت سرور لینوکس است.

نحوه تهیه مقاله ها

مقاله های مرتبط

استعلام

کارتان را بگویید، مسیر و هزینه را می گوییم

چند خط درباره وضعیت فعلی و چیزی که می خواهید بنویسید. یک مهندس خودش با شما تماس می گیرد و درخواست به واحد فروش نمی رود.

  1. 01درخواست را می خوانیم و اگر ابهامی بود تماس می گیریم.
  2. 02در صورت نیاز، بررسی اولیه ریموت یا بازدید انجام می شود.
  3. 03پیشنهاد مکتوب با دامنه کار، زمان بندی و هزینه می فرستیم.

اطلاعات شما فقط برای پاسخ به همین درخواست استفاده می شود. حریم خصوصی