SSH چگونه کار میکند؟
دسترسی به سرورهای راه دور و مدیریت آنها از دغدغههای اصلی مدیران فناوریاطلاعات است. Telnet برای برقراری ارتباط با یک سرور از راه دور استفاده میشود. Telnet یک پروتکل ایمن نیست، زیرا از هیچ مکانیزم امنیتی استفاده نمیکند و دادهها را از طریق شبکه (اینترنت) بهصورت متن ساده انتقال میدهد. بنابراین هرکسی میتواند به اطلاعات این بستهها دسترسی داشته باشد. برای رفع این مشکل SSH بهوجود آمد.
SSH چیست؟
SSH که با نام Secure Shell یا Secure Socket Shell نیز شناخته میشود٬ یک پروتکل شبکه است که راهی امن برای دسترسی به رایانههای راه دور به مدیران ارائه میدهد.
SSH یک اتصال امن رمزگذاری شده بین کلاینت و سرور برقرار میکند و امکان احراز هویت هر طرف را به طرف دیگر میدهد و دستورات را بین آنها رد و بدل میکند.
نحوه عملکرد SSH چگونه است؟
پروتکل SSH از رمزنگاری متقارن، نامتقارن و هش کردن به منظور اطمینان از انتقال ایمن اطلاعات استفاده میکند. اتصال SSH بین کلاینت و سرور در سه مرحله اتفاق میافتد:
- تأیید سرور توسط کلاینت
- ایجاد کلید مشترک برای رمزگذاری ارتباط بین سرور و کلاینت
- احراز هویت کلاینت (درواقع کاربر) توسط سرور
تأیید سرور
کلاینت اتصال SSH را با سرور آغاز میکند. سرور به درگاه پیشفرض 22 (این درگاه بهتر است، برای امنیت بیشتر تغییر کند.) برای اتصالات SSH گوش میدهد. هویت سرور به دو صورت ممکن است تأیید شود.
اگر کلاینت برای اولین بار به سرور دسترسی پیدا میکند، از کاربر خواسته میشود تا با تأیید کلید عمومی سرور، به طور دستی سرور را احراز هویت کند. کلید عمومی سرور را میتوان با استفاده از دستور ssh-keyscan پیدا کرد و یا آن را در مکانهای مختلف پیدا کرد (مثلا در Google). پس از تأیید، کلید سرور در فایل known_hosts درمسیر ~/.ssh در کلاینت اضافه میشود. فایل known-hosts حاوی اطلاعاتی دربارهی همه سرورهای تأییدشده توسط کاربر است.
اگر کلاینت برای اولین بار نیست که با سرور ارتباط برقرار میکند، هویت سرور با اطلاعات ثبتشده در فایل known-hosts مطابقت دادهشده و درصورت وجود تأیید میشود.
تصویری از محتویات فایلknown-hosts یک کلاینت
تولید کلید مشترک (session-key)
پس از تأیید سرور توسط کلاینت، یک کلید مشترک session-key بین کلاینت و سرور براساس الگوریتم Diff-Hellman تولید میشود، که مبنای رمزنگاری ارتباط بین دو طرف است. این الگوریتم به گونهای طراحی شدهاست که هر دو طرف بهطور مساوی در تولید کلید مشارکت دارند. session-key یک کلید متقارن مشترک است. یعنی از همان کلید برای رمزگذاری و رمزگشایی استفاده میشود.
احراز هویت کلاینت
گام آخر٬ احراز هویت کلاینت توسط سرور است. تأیید هویت با استفاده جفتکلید SSH انجام میشود .جفتکلید شامل کلید عمومی و کلید خصوصی است. کلید عمومی برای رمزگذاری دادهها و کلید خصوصی برای رمزگشایی دادهها استفاده میشود و هرگز با کسی به اشتراک گذاشته نمیشود.
پس از رمزگذاری متقارن٬ احراز هویت کلاینت به صورت زیر است:
- کلاینت برای شروع، یک شناسه برای جفتکلیدی که میخواهد با آن احراز هویت شود، برای سرور میفرستد.
- سرور در فایل authorized-keys حساب کاربر کلاینتی که قصد دارد متصل شود را بررسی میکند.
- چنانچه یک کلید عمومی با شناسه منطبق در فایل پیدا شود، سرور یک عددِ تصادفی تولید و از کلید عمومی برای رمزگذاری عدد استفاده میکند و این پیام رمزگذاری شده را میفرستد.
- اگر کلاینت یا همان کاربر کلید خصوصی درستی داشته باشد، پیام را رمزگشایی میکند تا عدد تصادفی تولید شده توسط سرور را به دست آورد.
- کلاینت عدد تصادفی به دست آمده را با session-key ترکیب کرده و با الگوریتم MD5 هش میکند.
- سپس کلاینت این هش MD5 را در پاسخ، برای سرور میفرستد.
- سرور با استفاده از کلید session-key و الگوریتم MD5 عدد تصادفی را به دست میآورد. اگر عدد به دست آمده، همان عدد تصادفی اولیه بود یعنی کلاینت کلید خصوصی را دارد. بدینترتیب کلاینت هویتش تأیید میشود.
نامتقارن بودن کلیدها اجازه تایید کاربر را میدهد، زیرا کاربر تنها درصورت داشتن کلید خصوصی مربوطه میتواند پیامها را رمزگشایی کند.
و در نهایت ارتباط امن بین کلاینت و سرور برقرار میشود.
ثبت ديدگاه