SSH چیست و چه کاربردی دارد؟
احتمالاً قبلاً در مورد SSH شنیده اید، زیرا در مورد هر چیزی که به امنیت سایبری مربوط می شود، یک اصطلاح رایج اینترنتی است که اغلب مورد استفاده قرار می گیرد. با این حال، ممکن است زمانی که یاد بگیرید SSH دقیقا چیست و چگونه کار می کند، غافلگیر شوید.
در این مطلب، ما اصول SSH را به همراه مکانیسم های اساسی مورد استفاده توسط پروتکل برای ارائه یک روش ایمن دسترسی از راه دور پوشش خواهیم داد. همچنین، لایه های مختلف و انواع رمزگذاری مورد استفاده را به همراه هدف هر لایه توضیح خواهیم داد.
SSH چیست؟
SSH یا Secure Shell Protocol یک پروتکل مدیریت از راه دور است که به کاربران امکان دسترسی، کنترل و اصلاح سرورهای خود را از طریق اینترنت می دهد.
سرویس SSH به عنوان جایگزینی امن برای Telnet رمزگذاری نشده ایجاد شده است و از تکنیک های رمزنگاری استفاده می کند تا اطمینان حاصل شود که تمام ارتباطات سرور راه دور به صورت رمزگذاری شده انجام می شود. این پروتکل، مکانیزمی برای احراز هویت یک کاربر راه دور، انتقال ورودی ها از کلاینت به میزبان و بازگرداندن خروجی به کلاینت فراهم می کند.
بیشتر بخوانید: تفاوت SSH و Telnet
مثال زیر یک اعلان SSH معمولی را نشان می دهد. هر کاربر لینوکس یا macOS می تواند مستقیماً از پنجره ترمینال به سرور راه دور خود SSH کند. کاربران ویندوز می توانند از سرویس گیرندگان SSH مانند Putty استفاده کنند. شما می توانید دستورات پوسته را به همان روشی اجرا کنید که اگر به طور فیزیکی به سرور دسترسی داشتید، می کردید.
SSH چگونه کار می کند؟
اگر از لینوکس یا مک استفاده می کنید، استفاده از SSH بسیار ساده است. اگر از ویندوز استفاده می کنید، باید از یک کلاینت SSH برای باز کردن اتصالات SSH استفاده کنید. محبوب ترین کلاینت مورد استفاده در ویندوز، SSH PuTTY است.
برای کاربران مک و لینوکس، به برنامه ترمینال خود بروید و سپس مراحل زیر را دنبال کنید:
دستور SSH از ۳ بخش مجزا تشکیل شده است:
1 | ssh {user}@{host} |
دستور کلید SSH فوق، به سیستم شما دستور می دهد که می خواهید یک Secure Shell Connection رمزگذاری شده را باز کنید. {user} نمایانگر حسابی است که می خواهید به آن دسترسی داشته باشید. به عنوان مثال، ممکن است بخواهید به کاربر ریشه (root) دسترسی داشته باشید، که اساساً مترادف با مدیر سیستم است که دارای دسترسی کامل برای تغییر هر چیزی در سیستم است. {host} به آدرس سروری که می خواهید به آن دسترسی داشته باشید اشاره دارد. این می تواند یک آدرس IP (به عنوان مثال ۲۴۴٫۲۳۵٫۲۲٫۱۸) یا یک نام دامنه (مانند www.mizbanonline.com) باشد.
هنگامی که Enter را فشار می دهید، از شما خواسته می شود رمز عبور حساب درخواستی را وارد کنید. وقتی آن را تایپ می کنید، چیزی روی صفحه ظاهر نمی شود، اما رمز عبور شما در واقع در حال انتقال است. پس از اتمام تایپ، یک بار دیگر Enter را بزنید. اگر رمز عبور شما صحیح باشد، با یک پنجره ترمینال از راه دور به شما خوش آمد می گوید.
درک تکنیک های مختلف رمزگذاری
مزیت قابل توجه ارائه شده توسط SSH نسبت به پیشینیان خود، استفاده از رمزگذاری برای اطمینان از انتقال امن اطلاعات بین میزبان و مشتری است. Host به سرور راه دوری که میخواهید به آن دسترسی داشته باشید اشاره دارد، در حالی که کلاینت رایانهای است که برای دسترسی به میزبان استفاده میکنید. سه فناوری رمزگذاری مختلف توسط SSH استفاده می شود:
- رمزگذاری متقارن
- رمزگذاری نامتقارن
- هش کردن
رمزگذاری متقارن
رمزگذاری متقارن شکلی از رمزگذاری است که در آن یک کلید مخفی هم برای رمزگذاری و هم برای رمزگشایی یک پیام توسط مشتری و میزبان استفاده می شود. در واقع، هر کسی که کلید را در اختیار دارد میتواند پیامی را که منتقل میشود رمزگشایی کند.
رمزگذاری متقارن اغلب کلید مشترک یا رمزگذاری مخفی مشترک نامیده می شود. معمولاً فقط یک کلید یا گاهی اوقات یک جفت کلید وجود دارد که با استفاده از کلید دیگر می توان یک کلید را به راحتی محاسبه کرد.
کلیدهای متقارن برای رمزگذاری کل ارتباطات در طول یک جلسه SSH استفاده می شوند. هم کلاینت و هم سرور، کلید مخفی را با استفاده از یک روش توافق شده استخراج می کنند و کلید حاصل، هرگز برای هیچ شخص ثالثی فاش نمی شود.
فرآیند ایجاد یک کلید متقارن توسط یک الگوریتم تبادل کلید انجام می شود. چیزی که این الگوریتم را به ویژه ایمن می کند این واقعیت است که کلید هرگز بین مشتری و میزبان منتقل نمی شود.
درعوض، دو کامپیوتر داده های عمومی را به اشتراک می گذارند و سپس آن را دستکاری می کنند تا به طور مستقل کلید مخفی را محاسبه کنند. حتی اگر دستگاه دیگری داده های به اشتراک گذاشته شده عمومی را ضبط کند، نمی تواند کلید را محاسبه کند زیرا الگوریتم تبادل کلید مشخص نیست.
البته باید توجه داشت که رمز مخفی، مخصوص هر جلسه SSH است و قبل از احراز هویت مشتری ایجاد می شود. هنگامی که کلید تولید شد، تمام بسته های در حال حرکت بین دو ماشین باید توسط کلید خصوصی رمزگذاری شوند. این شامل رمز عبوری است که توسط کاربر در کنسول تایپ شده است، بنابراین اعتبارنامه ها همیشه در برابر اسنیفرهای بسته شبکه محافظت می شوند.
انواع رمزگذاری متقارن وجود دارد، از جمله، AES (استاندارد رمزگذاری پیشرفته)، CAST128، Blowfish، و غیره. رمزهای پشتیبانی شده به ترتیب اولویت. ترجیح داده شده ترین رمز – از رمزهای پشتیبانی شده توسط مشتری – که در لیست میزبان وجود دارد به عنوان رمز دو طرفه استفاده می شود.
به عنوان مثال، اگر دو ماشین Ubuntu 14.04 LTS از طریق SSH با یکدیگر ارتباط برقرار کنند، از aes128-ctr به عنوان رمز پیش فرض خود استفاده خواهند کرد.
رمزگذاری نامتقارن
بر خلاف رمزگذاری متقارن، رمزگذاری نامتقارن از دو کلید مجزا برای رمزگذاری و رمزگشایی استفاده می کند. این دو کلید با نام های کلید عمومی و کلید خصوصی شناخته می شوند. هر دو این کلیدها با هم یک جفت کلید عمومی-خصوصی را تشکیل می دهند.
یک کلید عمومی می تواند توسط هر فردی برای رمزگذاری یک پیام استفاده شود و تنها توسط گیرنده ای که کلید خصوصی خاص خود را دارد می تواند رمزگشایی شود و بالعکس. اینها از ترکیبات گسترده و به ظاهر تصادفی اعداد و نمادها تشکیل شده اند، با این حال، کلیدهای عمومی و خصوصی هر دو با استفاده از الگوریتم های پیچیده ریاضی جفت می شوند.
به عنوان مثال، برای احراز هویت فرستنده، یک پیام با استفاده از کلید خصوصی خودش رمزگذاری می شود. بنابراین، پیام فقط با استفاده از کلید عمومی فرستنده خاص قابل رمزگشایی است. توجه داشته باشید که هر دو مکانیسم رمزگذاری و رمزگشایی فرآیندهای خودکار هستند – شما نیازی به انجام هیچ کاری به صورت دستی ندارید.
برخلاف تصور عمومی، رمزگذاری نامتقارن برای رمزگذاری کل جلسه SSH استفاده نمی شود. در عوض، در طول الگوریتم تبادل کلید رمزگذاری متقارن استفاده می شود. قبل از شروع یک اتصال ایمن، هر دو طرف جفتهای کلید عمومی-خصوصی موقت تولید میکنند و کلیدهای خصوصی مربوطه خود را برای تولید کلید مخفی مشترک به اشتراک میگذارند.
هنگامی که یک ارتباط متقارن ایمن برقرار شد، سرور از کلید عمومی کلاینت برای تولید، چالش و انتقال آن به مشتری برای احراز هویت استفاده می کند. اگر سرویس گیرنده بتواند پیام را با موفقیت رمزگشایی کند، به این معنی است که کلید خصوصی مورد نیاز برای اتصال را در خود نگه می دارد – سپس جلسه SSH آغاز می شود.
هش کردن
هش یک طرفه شکل دیگری از رمزنگاری است که در Secure Shell Connections استفاده می شود. توابع هش یک طرفه با دو شکل رمزگذاری فوق تفاوت دارند به این معنا که هرگز قرار نیست رمزگشایی شوند. آنها یک مقدار منحصر به فرد از طول ثابت برای هر ورودی ایجاد می کنند که هیچ روند واضحی را نشان نمی دهد که بتوان از آن بهره برداری کرد. این باعث می شود که آنها عملاً غیرممکن شوند.
تولید هش رمزنگاری از یک ورودی داده شده آسان است، اما تولید ورودی از هش غیرممکن است. این بدان معناست که اگر یک کلاینت ورودی صحیح را داشته باشد، میتواند هش رمزنگاری را ایجاد کند و مقدار آن را برای بررسی اینکه آیا ورودی صحیح را دارد یا خیر مقایسه کند.
SSH از هش برای تأیید صحت پیام ها استفاده می کند. این کار با استفاده از HMACها یا کدهای احراز هویت پیام مبتنی بر هش انجام می شود. این تضمین می کند که دستور دریافت شده به هیچ وجه دستکاری نمی شود.
در حالی که الگوریتم رمزگذاری متقارن در حال انتخاب است، یک الگوریتم احراز هویت پیام مناسب نیز انتخاب شده است. همانطور که در بخش رمزگذاری متقارن توضیح داده شد، این کار به روشی مشابه نحوه انتخاب رمز کار می کند.
هر پیامی که ارسال می شود باید حاوی یک MAC باشد که با استفاده از کلید متقارن، شماره توالی بسته و محتوای پیام محاسبه می شود. در خارج از داده های رمزگذاری شده متقارن به عنوان بخش پایانی بسته ارتباطی ارسال می شود.
چگونه SSH با این تکنیک های رمزگذاری کار می کند؟
روش کار SSH با استفاده از مدل مشتری-سرور برای احراز هویت دو سیستم راه دور و رمزگذاری داده هایی است که بین آنها ارسال می شود.
SSH به طور پیش فرض بر روی پورت TCP 22 کار می کند (اگرچه پورت SSH را می توان در صورت نیاز تغییر داد). میزبان (سرور) به پورت ۲۲ (یا هر درگاه اختصاص داده شده SSH) برای اتصالات ورودی گوش می دهد. در صورت موفقیت آمیز بودن تأیید، اتصال امن را با تأیید اعتبار مشتری و باز کردن محیط پوسته صحیح سازماندهی می کند.
کلاینت باید اتصال SSH را با شروع دست دادن (Hand Shaking) TCP با سرور، اطمینان از اتصال متقارن ایمن، بررسی اینکه آیا هویت نمایش داده شده توسط سرور با رکوردهای قبلی (معمولاً در یک فایل ذخیره کلید RSA ثبت شده) مطابقت دارد، و ارائه اطلاعات کاربری مورد نیاز کاربر، شروع کند.
برای برقراری ارتباط دو مرحله وجود دارد – اول، هر دو سیستم باید بر روی استانداردهای رمزگذاری برای محافظت از ارتباطات آینده توافق کنند، و دوم، کاربر باید خود را احراز هویت کند. اگر اعتبارنامه ها مطابقت داشته باشند، به کاربر اجازه دسترسی SSH داده می شود.