cloudavid
cloudavid
خواندن ۳ دقیقه·۴ سال پیش

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

دسترسی به سرورهای راه دور و مدیریت آنها از دغدغه های اصلی مدیران فناوری اطلاعات است. Telnet برای برقراری ارتباط با یک سرور از راه‌دور استفاده می‌شود. Telnet یک پروتکل ایمن نیست، زیرا از هیچ مکانیزم امنیتی استفاده نمی‌کند و داده‌ها را از طریق شبکه(اینترنت) بصورت متن ساده انتقال می‌دهد. بنابراین هرکسی می‌تواند به اطلاعات این بسته‌ها دسترسی داشته باشد. برای رفع این مشکل SSH بوجود آمد.

پروتکل SSH چیست؟

پروتکل SSH که با نامSecure Shell یا  Secure Socket Shellنیز شناخته می‌شود. یک پروتکل شبکه است که راهی امن برای دسترسی به رایانه‌های راه‌ دور به مدیران ارائه می‌دهد.

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


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

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

  1. تأیید سرور توسط کلاینت
  2. ایجاد کلید مشترک برای رمزگذاری ارتباط بین سرور و کلاینت
  3. احراز هویت کلاینت در واقع کاربر، توسط سرور

که هر کدام را بطور جداگانه توضیح می‌دهیم.

تأیید سرور

کلاینت اتصال SSH را با سرور آغاز می‌کند. سرور به درگاه پیش فرض 22 (این درگاه بهتر است، برای امنیت بیشتر تغییر کند.) برای اتصالات SSH گوش می دهد. هویت سرور به دو صورت ممکن است تأیید شود.

اگر کلاینت برای اولین بار به سرور دسترسی پیدا می‌کند، از کاربر خواسته می‌شود تا با تأیید کلید عمومی سرور، به طور دستی سرور را احراز هویت کند. کلید عمومی سرور را می‌توان با استفاده از دستور ssh-keyscan  پیدا کرد و یا آن را در مکان‌های مختلف پیدا کرد(مثلا در Google) .پس از تأیید، کلید سرور در فایل known_hosts درمسیر ~/.ssh در کلاینت اضافه می‌شود. فایل known-hosts حاوی اطلاعاتی درباره‌ی همه سرورهای تأیید شده توسط کاربر است.

اگر کلاینت برای اولین بار نیست که با سرور ارتباط برقرار می‌کند، هویت سرور با اطلاعات ثبت شده در فایل known-hosts مطابقت داده شده و در صورت وجود تأیید می‌شود.

تصویری از محتویات فایلknown-hosts یک کلاینت
تصویری از محتویات فایلknown-hosts یک کلاینت



تولید کلید مشترک (session-key)

پس از تأیید سرور توسط کلاینت، یک کلید مشترک session-key بین کلاینت و سرور براساس الگوریتم Diff-Hellman تولید می‌شود، که مبنای رمزنگاری ارتباط بین دو طرف است. این الگوریتم به گونه‌ای طراحی شده است که هر دو طرف بطور مساوی در تولید کلید مشارکت دارند. session-key یک کلید متقارن مشترک است. یعنی از همان کلید برای رمزگذاری و رمزگشایی استفاده می‌شود.

احرازهویت کلاینت

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

پس از رمزگذاری متقارن احراز هویت کلاینت به صورت زیر است:

  1. کلاینت برای شروع، یک شناسه برای جفت کلیدی که می‌خواهد باآن احراز هویت شود، برای سرور می‌فرستد.
  2. سرور در فایل authorized-keys حساب کاربر کلاینتی که قصد دارد متصل شود را بررسی می‌کند.
  3. چنانچه یک کلید عمومی با شناسه منطبق در فایل پیدا شود، سرور یک عدد تصادفی تولید و از کلید عمومی برای رمزگذاری عدد استفاده می‌کند و این پیام رمزگذاری شده را می فرستد.
  4. اگر کلاینت یا همان کاربر کلید خصوصی درستی داشته باشد، پیام را رمزگشایی می‌کند تا عدد تصادفی تولید شده توسط سرور را بدست آورد.
  5. کلاینت عدد تصادفی بدست آمده را با session-key ترکیب کرده و با الگوریتم MD5 هش می‌کند.
  6. سپس کلاینت این هش MD5 را در پاسخ، برای سرور می‌فرستد.
  7. سرور با استفاده از کلید session-key و الگوریتم MD5 عدد تصادفی را بدست می‌آورد. اگر عدد بدست آمده، همان عدد تصادفی اولیه بود یعنی کلاینت کلید خصوصی را دارد. بدین ترتیب کلاینت هویتش تأیید می‌شود.

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

ارتباط امن بین کلاینت و سرور برقرار می‌شود.

هنگام ورود به یک سرور از راه دور ، پیام خروجی اشکال زدایی از SSH
هنگام ورود به یک سرور از راه دور ، پیام خروجی اشکال زدایی از SSH


منبع: پایگاه دانش شرکت رایانش ابری آوید


شبکهپروتکل sshبرنامه نویسینرم‌افزارسرور
ارائه دهنده زیرساخت امن و پایدار برای تداوم کسب و کارها
شاید از این پست‌ها خوشتان بیاید