اگه با سرور و هاست کار می‌کنید، احتمالاً اسم SSH رو شنیدید. شاید ترسناک به نظر برسه - یه صفحه سیاه با متن‌های عجیب! ولی نگران نباشید، در این مقاله به صورت کامل و ساده همه چیز رو درباره SSH توضیح می‌دیم؛ از مفاهیم پایه تا تنظیمات امنیتی پیشرفته.

SSH یکی از پرکاربردترین ابزارهای مدیریت سرور در دنیاست. اگه می‌خواید جدی با وب‌سایت یا سرور کار کنید، یادگیری SSH یه مهارت ضروریه که بهتون خیلی کمک می‌کنه.

SSH چیست؟

SSH مخفف Secure Shell هست. یه پروتکل (روش ارتباطی) امن برای اتصال به سرورهاست. با SSH می‌تونید از راه دور به سرور وصل بشید و دستور اجرا کنید. این پروتکل در سال ۱۹۹۵ توسط Tatu Ylönen طراحی شد تا جایگزین امنی برای Telnet و rsh باشه.

فکرش رو بکنید مثل تلفن زدن به سرور! ولی بجای صحبت کردن، دستور می‌نویسید و سرور اون دستور رو اجرا می‌کنه و نتیجه رو برمی‌گردونه. تمام این ارتباط هم به صورت کاملاً رمزنگاری‌شده انجام می‌شه.

نسخه فعلی و استاندارد SSH که بهش SSH-2 می‌گن، از سال ۲۰۰۶ به عنوان استاندارد اینترنتی پذیرفته شده و امنیت بسیار بالاتری نسبت به نسخه اول داره.

چرا SSH امنه؟

قبل از SSH، از Telnet استفاده می‌شد که اطلاعات رو بدون رمزنگاری می‌فرستاد. یعنی هرکسی وسط راه می‌تونست پسوردتون رو ببینه! این مشکل خیلی جدی بود چون در شبکه‌های عمومی همه می‌تونستن ترافیک رو شنود کنن.

SSH همه چیز رو رمزنگاری می‌کنه. حتی اگه کسی ارتباط رو شنود کنه، فقط داده‌های نامفهوم می‌بینه. SSH از چند لایه امنیتی استفاده می‌کنه:

  • رمزنگاری متقارن: برای رمزگذاری داده‌های جاری از الگوریتم‌هایی مثل AES-256 استفاده می‌شه
  • رمزنگاری نامتقارن: برای تبادل کلید و احراز هویت از RSA یا Ed25519 استفاده می‌شه
  • هشینگ: برای تضمین یکپارچگی داده‌ها از HMAC استفاده می‌شه تا مطمئن بشید داده‌ها تغییر نکردن

علاوه بر رمزنگاری، SSH سیستم احراز هویت قوی داره. می‌تونید با پسورد یا با کلید SSH (که امن‌تره) وارد بشید.

برای چه کارایی SSH لازمه؟

SSH کاربردهای بسیار گسترده‌ای داره. از ساده‌ترین کارها مثل نگاه کردن به فایل‌ها تا پیچیده‌ترین عملیات سیستمی:

  • مدیریت فایل‌ها روی سرور (ایجاد، ویرایش، حذف، کپی)
  • نصب، بروزرسانی و حذف نرم‌افزارها
  • دیباگ و رفع مشکلات سرور
  • بکاپ گرفتن و انتقال داده
  • اجرای دستورات خط فرمان به صورت مستقیم
  • انتقال فایل امن از طریق SFTP (جایگزین FTP)
  • تانلینگ و Port Forwarding (هدایت ترافیک از طریق SSH)
  • مدیریت سرویس‌ها مثل وب‌سرور، دیتابیس و ایمیل
  • مانیتورینگ منابع سرور (CPU، RAM، دیسک)
  • اجرای اسکریپت‌های خودکار

چطور به سرور SSH بزنیم؟

اتصال به SSH بسته به سیستم‌عاملی که دارید کمی فرق داره:

روی ویندوز

می‌تونید از برنامه PuTTY استفاده کنید (رایگان و بسیار محبوب) یا از PowerShell/CMD خود ویندوز ۱۰ به بعد که SSH رو به صورت داخلی پشتیبانی می‌کنه. در ویندوز ۱۰ و ۱۱ کافیه CMD یا PowerShell رو باز کنید و دستور SSH رو مستقیم بزنید.

روی مک و لینوکس

Terminal رو باز کنید و این دستور رو بزنید:

ssh username@server-ip

مثال: ssh root@192.168.1.100

اگه پورت SSH غیر از ۲۲ باشه (که برای امنیت بهتره)، از این دستور استفاده کنید:

ssh -p 2222 username@server-ip

اولین اتصال

دفعه اول که به یه سرور وصل می‌شید، SSH یه پیام می‌ده که می‌پرسه آیا به این سرور اعتماد دارید. این یه fingerprint از کلید سرور هست. اگه مطمئنید سرور درسته، yes رو تایپ کنید. این fingerprint ذخیره می‌شه و دفعه‌های بعد دیگه سوال نمی‌شه.

دستورات پایه SSH

بعد از اتصال، این دستورات به دردتون می‌خوره:

دستورکاربرد
lsلیست فایل‌ها
ls -laلیست کامل با جزئیات (شامل فایل‌های مخفی)
cdتغییر پوشه
pwdنمایش مسیر فعلی
cpکپی فایل
mvانتقال یا تغییر نام فایل
rmحذف فایل
mkdirساخت پوشه جدید
catنمایش محتوای فایل
nanoویرایش فایل با ویرایشگر ساده
vimویرایش فایل با ویرایشگر پیشرفته
topمانیتورینگ منابع سیستم
df -hنمایش فضای دیسک
free -mنمایش وضعیت RAM

کلید SSH چیست و چطور بسازیم؟

کلید SSH یه روش احراز هویت امن‌تر از پسورد هست. یه جفت کلید دارید: کلید عمومی (Public Key) و کلید خصوصی (Private Key). کلید عمومی روی سرور ذخیره می‌شه و کلید خصوصی پیش شماست.

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

ساخت کلید SSH در لینوکس/مک

در ترمینال این دستور رو بزنید:

ssh-keygen -t ed25519 -C "email@example.com"

الگوریتم Ed25519 جدیدتر و امن‌تر از RSA هست. بعد از اجرا، یه passphrase بخواد که برای امنیت بیشتر توصیه می‌شه تنظیم کنید.

کپی کلید عمومی به سرور

ssh-copy-id username@server-ip

یا اگه این دستور نداشتید، محتوای فایل ~/.ssh/id_ed25519.pub رو به فایل ~/.ssh/authorized_keys روی سرور اضافه کنید.

امنیت SSH

SSH به خودی خود امنه، ولی تنظیمات پیش‌فرض همیشه بهترین انتخاب نیستن. این موارد رو حتماً رعایت کنید:

۱. از کلید SSH استفاده کنید

بجای پسورد، از کلید SSH استفاده کنید. امن‌تره و راحت‌تره. بعد از تنظیم کلید SSH، ورود با پسورد رو کاملاً غیرفعال کنید. در فایل /etc/ssh/sshd_config:

PasswordAuthentication no

۲. پورت رو عوض کنید

پورت پیش‌فرض SSH عدد ۲۲ هست. هکرها این پورت رو زیاد اسکن می‌کنن و حملات brute-force زیادی روش انجام می‌دن. عوضش کنید به یه عدد بین ۱۰۲۴ تا ۶۵۵۳۵:

Port 2222

۳. ورود root رو غیرفعال کنید

اجازه ندید مستقیم با یوزر root وارد بشن. یه یوزر معمولی بسازید، بهش دسترسی sudo بدید، و بعد root login رو ببندید:

PermitRootLogin no

۴. محدود کردن تعداد تلاش‌های ورود

با نصب Fail2Ban می‌تونید IP هایی که چندین بار اشتباه وارد می‌شن رو به صورت خودکار بلاک کنید. این یه دفاع موثر در برابر حملات brute-force هست.

۵. فعال کردن Firewall

فقط پورت SSH جدیدتون رو در firewall باز بذارید و بقیه پورت‌های غیرضروری رو ببندید:

ufw allow 2222/tcp
ufw enable

SSH Tunneling و Port Forwarding

یکی از قابلیت‌های کمتر شناخته‌شده ولی بسیار کاربردی SSH، قابلیت تانلینگ هست. با SSH می‌تونید ترافیک رو از طریق یه کانال رمزنگاری‌شده هدایت کنید.

Local Port Forwarding

برای دسترسی به سرویس‌هایی که روی سرور هستن ولی در اینترنت عمومی نیستن:

ssh -L 8080:localhost:80 user@server-ip

این دستور پورت ۸۰۸۰ کامپیوتر شما رو به پورت ۸۰ سرور وصل می‌کنه.

Remote Port Forwarding

برای اینکه سرور بتونه به سرویس‌های کامپیوتر شما دسترسی داشته باشه:

ssh -R 8080:localhost:3000 user@server-ip

انتقال فایل با SSH (SFTP و SCP)

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

SCP (Secure Copy)

برای کپی سریع فایل بین سرور و کامپیوتر:

# آپلود فایل به سرور
scp myfile.txt user@server:/home/user/

# دانلود فایل از سرور
scp user@server:/home/user/myfile.txt ./

# کپی کل پوشه
scp -r myfolder user@server:/home/user/

SFTP

یه محیط تعاملی برای مدیریت فایل‌ها شبیه FTP ولی امن:

sftp user@server-ip

بعد از اتصال می‌تونید از دستوراتی مثل put، get، ls و cd استفاده کنید.

آیا هاست من SSH داره؟

همه هاست‌ها SSH نمی‌دن. هاست‌های اشتراکی معمولاً SSH محدود یا غیرفعال دارن. VPS و سرور اختصاصی همیشه SSH دارن.

از پشتیبانی هاست بپرسید یا توی سی‌پنل بخش SSH رو چک کنید. اگه به دسترسی کامل SSH نیاز دارید، سرور مجازی (VPS) بهترین گزینه‌ست. صباهاست VPS با دسترسی کامل SSH ارائه می‌ده که برای مدیریت راحت سرور مناسبه.

نرم‌افزارهای SSH محبوب

علاوه بر خط فرمان، نرم‌افزارهای گرافیکی هم برای SSH وجود دارن:

  • PuTTY: قدیمی‌ترین و محبوب‌ترین SSH client برای ویندوز. رایگان و سبک.
  • MobaXterm: یه ابزار جامع برای ویندوز با قابلیت‌های SFTP، X11 و تانل.
  • Termius: نرم‌افزار مدرن با رابط کاربری زیبا، برای همه سیستم‌عامل‌ها و موبایل.
  • FileZilla: عمدتاً برای SFTP استفاده می‌شه و رابط گرافیکی خوبی داره.
  • VS Code Remote SSH: اگه برنامه‌نویسید، با این افزونه می‌تونید مستقیم روی سرور کد بزنید.

سوالات متداول

SSH و SFTP چه فرقی دارن؟

SSH یه پروتکل کلی برای ارتباط امن با سرور هست. SFTP (SSH File Transfer Protocol) یه زیرپروتکل SSH هست که مخصوص انتقال فایل طراحی شده. به عبارت دیگه، SFTP روی SSH اجرا می‌شه و امنیت SSH رو برای انتقال فایل به ارث می‌بره. بر خلاف FTP معمولی که داده‌ها رو رمزنگاری نمی‌کنه، SFTP کاملاً امنه.

اگه پسورد SSH رو فراموش کردم چیکار کنم؟

اگه پسورد SSH رو فراموش کردید، باید از طریق پنل مدیریت سرور (مثل VNC یا Console) وارد بشید. بعد می‌تونید پسورد رو ریست کنید. به همین دلیل توصیه می‌شه از کلید SSH استفاده کنید و یه روش پشتیبان برای دسترسی داشته باشید.

آیا SSH در هاست اشتراکی در دسترسه؟

بستگی داره. بعضی از ارائه‌دهنده‌های هاست اشتراکی SSH محدود ارائه می‌دن که می‌تونید فایل‌ها رو مدیریت کنید ولی دسترسی root ندارید. برخی دیگه اصلاً SSH ندارن. اگه به SSH کامل نیاز دارید، VPS مناسب‌تره.

چطور بفهمم SSH روی سرور فعاله؟

می‌تونید با این دستور چک کنید که آیا سرویس SSH در حال اجراست:

systemctl status sshd

یا برای بررسی اینکه پورت SSH باز هست از خارج از سرور، از ابزارهای آنلاین port checker استفاده کنید. همچنین با دستور netstat -tlnp | grep 22 می‌تونید ببینید آیا SSH روی پورت ۲۲ گوش می‌ده.

جمع‌بندی

SSH یه ابزار قدرتمند و ضروری برای مدیریت سرور هست که هر کسی که با سرور کار می‌کنه باید با آن آشنا باشه. با SSH می‌تونید از هر جای دنیا به سرورتون وصل بشید، دستور اجرا کنید، فایل منتقل کنید و همه این‌ها رو با بالاترین سطح امنیت انجام بدید.

شاید اولش ترسناک باشه، ولی با یکم تمرین یادش می‌گیرید و کارتون خیلی راحت‌تر می‌شه. نکات امنیتی که گفتیم رو جدی بگیرید - تغییر پورت، استفاده از کلید SSH، غیرفعال کردن root login - اینا واقعاً تفاوت بزرگی در امنیت سرورتون ایجاد می‌کنن.

اگه جدی با وب‌سایت و سرور کار می‌کنید، یادگیری SSH رو توصیه می‌کنم! و اگه به یه VPS با پشتیبانی کامل نیاز دارید، صباهاست گزینه‌های مناسبی برای شما داره.