رفتن به محتوای اصلی
iServer24 | ارائه‌کننده سرورهای ابری و اختصاصی
راهنمای جامع SSH

راهنمای جامع SSH

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

فهرست مطالب

کار با سرور، کلاینت و کلیدهای SSH
به‌روزرسانی: ۲۷ فروردین ۱۴۰۳
ویژه انتشار در وب‌سایت دیدگاه


مقدمه

SSH یا Secure Shell یک پروتکل امن برای اتصال از راه دور به سرورهای لینوکسی است. این پروتکل امکان اجرای دستورات، مدیریت سرویس‌ها و پیکربندی سیستم را از طریق یک کانال رمزنگاری‌شده فراهم می‌کند.

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


SSH چیست و چگونه کار می‌کند؟

SSH یک اتصال امن مبتنی بر مدل Client–Server است.
در سمت سرور، سرویسی به نام SSH Daemon (sshd) روی یک پورت مشخص (به‌صورت پیش‌فرض 22) در حال اجراست و منتظر درخواست اتصال می‌ماند.

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

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


روش‌های احراز هویت در SSH

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

1. احراز هویت با رمز عبور

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

2. احراز هویت با کلید SSH (روش پیشنهادی)

در این روش از یک جفت کلید رمزنگاری‌شده شامل کلید عمومی و کلید خصوصی استفاده می‌شود.

  • کلید عمومی روی سرور ذخیره می‌شود

  • کلید خصوصی فقط روی سیستم کاربر باقی می‌ماند

  • بدون داشتن کلید خصوصی، ورود غیرممکن است

این روش به‌مراتب امن‌تر و استاندارد توصیه‌شده برای مدیریت سرورهاست.


ساخت کلید SSH

برای ایجاد یک جفت کلید RSA روی سیستم محلی: برای سرورهای CentOS می‌توانید مراحل اختصاصی را در راه‌اندازی SSH Key در CentOS 8 ببینید.

ssh-keygen
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

کلیدها به‌صورت پیش‌فرض در مسیر زیر ذخیره می‌شوند:

  •  

~/.ssh/id_rsa
برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید
کلید خصوصی

 

  •  

  • ~/.ssh/id_rsa.pub
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید
    کلید عمومی

     

    می‌توانید برای کلید خود Passphrase تعیین کنید تا حتی در صورت دسترسی به فایل کلید خصوصی، استفاده از آن بدون عبارت عبور ممکن نباشد.

    ایجاد کلید با امنیت بالاتر (4096 بیت)

    ssh-keygen -b 4096
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    تغییر یا حذف Passphrase کلید خصوصی

    ssh-keygen -p
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    برای این کار دانستن Passphrase فعلی الزامی است. در صورت فراموشی، تنها راه، ساخت کلید جدید خواهد بود.


    مشاهده Fingerprint کلید SSH

    ssh-keygen -l
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    Fingerprint برای شناسایی یکتای کلیدها و بررسی صحت آن‌ها استفاده می‌شود.


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

    روش پیشنهادی: ssh-copy-id

    ssh-copy-id username@server_ip
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    پس از وارد کردن رمز عبور، کلید عمومی شما به فایل زیر اضافه می‌شود:

    ~/.ssh/authorized_keys
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    انتقال بدون ssh-copy-id

    cat ~/.ssh/id_rsa.pub | ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    انتقال دستی کلید

    1. نمایش کلید عمومی:

    cat ~/.ssh/id_rsa.pub
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید
    1. ایجاد پوشه SSH روی سرور:

    mkdir -p ~/.ssh
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید
    1. افزودن کلید به authorized_keys:

    echo "public_key_string" >> ~/.ssh/authorized_keys
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    اتصال به سرور با SSH

    ssh username@server_ip
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    اجرای یک دستور بدون ورود به شل:

    ssh username@server_ip command
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    اتصال به پورت غیر پیش‌فرض:

    ssh -p 4444 username@server_ip
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    استفاده از فایل تنظیمات SSH در کلاینت

    nano ~/.ssh/config
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    نمونه تنظیم:

    4 خط
    Host myserver
        HostName example.com
        Port 4444
        User admin
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    اتصال ساده:

    ssh myserver
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    استفاده از SSH Agent

    برای جلوگیری از وارد کردن مکرر Passphrase:

    2 خط
    eval $(ssh-agent)
    ssh-add
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    فوروارد کردن کلید SSH (Agent Forwarding)

    ssh -A username@server_ip
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

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


    تنظیمات امنیتی سمت سرور

    غیرفعال‌سازی ورود با رمز عبور

    در فایل:

    /etc/ssh/sshd_config
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید
    PasswordAuthentication no
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    سپس:

    systemctl restart sshd
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    تغییر پورت SSH

    Port 4444
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    محدود کردن کاربران مجاز

    AllowUsers user1 user2
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    یا مبتنی بر گروه:

    AllowGroups sshmembers
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    غیرفعال‌سازی ورود root

    PermitRootLogin no
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    تونل‌سازی SSH

    برای بررسی کامل‌تر و مثال‌های عملی بیشتر در این زمینه، می‌توانید راهنمای اختصاصی SSH Port Forwarding (تونل‌سازی SSH) را مطالعه کنید.

    Local Tunnel

    ssh -L 8888:localhost:80 user@server
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    Remote Tunnel

    ssh -R 8888:localhost:80 user@server
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    Dynamic Tunnel (SOCKS Proxy)

    ssh -D 7777 user@server
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    کنترل اتصال با Escape Code

    قطع اتصال گیر کرده:

    2 خط
    [ENTER]
    ~.
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    فرستادن SSH به پس‌زمینه:

    2 خط
    [ENTER]
    ~[CTRL+Z]
    برای کپی کردن کد، روی دکمه کپی در بالا کلیک کنید

    جمع‌بندی

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

    این راهنما توسط دیدگاه برای مدیران سیستم، توسعه‌دهندگان و کاربران حرفه‌ای لینوکس تهیه شده است.

    زیرساخت ابری برای اجرای همین آموزش

    سرور ابری ساعتی را برای Docker، Ubuntu و DevOps راه‌اندازی کنید — پرداخت به میزان مصرف یا ماهانه.

    ادامه یادگیری:Docker·Ubuntu·VPS