پروتکل SSH، همچنین به عنوان Secure Shell یا Secure Socket Shell شناخته می شود، یک پروتکل شبکه است که به کاربران، به ویژه مدیران سیستم، یک راه مطمئن برای دستیابی به رایانه از طریق یک شبکه نا امن فراهم می کند. SSH همچنین به مجموعه ابزارهایی که پروتکل SSH را پیاده سازی می کنند ، اشاره دارد.

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

پروتکل SSH روشی برای ورود ایمن از راه دور از یک کامپیوتر به کامپیوتر دیگر است. این گزینه های مختلفی برای احراز هویت قوی ارائه می دهد و از امنیت و یکپارچگی ارتباطات با رمزگذاری قوی محافظت می کند. این یک جایگزین مطمئن برای پروتکل های محافظت نشده ورود به سیستم (مانند telnet ، rlogin) و روش های انتقال ناامن پرونده (مانند FTP) است.

تاریخچه SSH

اولین نسخه SSH در سال ۱۹۹۵ به وجود آمد و توسط تاتو یلنن طراحی شد، که در آن زمان محقق دانشگاه صنعتی هلسینکی بود و بعداً برای شروع SSH Communications Security، یک فروشنده امنیت سایبری مستقر در والتهام، ماس طراحی شد. نقص های مختلفی در SSH-1 یافت شده است، و اکنون این نسخه مستهلک شده و برای استفاده امن نیست. SSH-2، نسخه فعلی پروتکل SSH، به عنوان یک استاندارد توسط نیروی کار مهندسی اینترنت (IETF) در سال ۲۰۰۶ به تصویب رسید.

موارد کاربردی پروتکل SSH

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

  • دسترسی ایمن به کاربران و فرآیندهای خودکار
  • انتقال فایل های تعاملی و خودکار
  • صدور دستورات از راه دور
  • مدیریت زیرساخت های شبکه و سایر مؤلفه های مهم سیستم

نحوه کار پروتکل SSH

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

پروتکل SSH برای جایگزینی برنامه های شبیه سازی ناامن ترمینال یا ورود به سیستم مانند Telnet ، rlogin (ورود از راه دور) و rsh (پوسته از راه دور) ایجاد شده است. SSH عملکردهای یکسانی (ورود به سیستم و اجرای جلسات ترمینال در سیستم های از راه دور) را فعال می کند. پروتکل SSH همچنین برنامه های انتقال فایل مانند پروتکل انتقال فایل (FTP) و rcp (کپی از راه دور) را جایگزین می کند.

اساسی ترین کاربرد SSH برای اتصال به یک میزبان از راه دور برای یک سیستم ترمینال است. شکل این دستور عبارت است از:

ssh UserName@SSHserver.example.com

این دستور باعث می شود تا مشتری سعی کند با استفاده از شناسه کاربر  UserName به سروری به نام server.example.com وصل شود. اگر این اولین باری باشد که میزبان محلی و سرور در حال اتصال است، وجود اثر انگشت کلید عمومی میزبان از راه دور از کاربر خواسته می شود و با وجود عدم ارتباط قبلی، از وی خواسته می شود ارتباط برقرار کند:

The authenticity of host ‘sample.ssh.com’ cannot be established.
DSA key fingerprint is 01:23:45:67:89:ab:cd:ef:ff:fe:dc:ba:98:76:54:32:10.
?(Are you sure you want to continue connecting (yes/no

پاسخ “بله” به پیام فوری باعث خواهد شد که جلسه ادامه پیدا کند و کلید میزبان در فایل شناخته‌ شده سیستم محلی ذخیره می ‌شود. این یک فایل پنهان است که به صورت پیش ‌فرض در یک دایرکتوری مخفی ذخیره می ‌شود. هنگامی که کلید میزبان در فایل میزبان شناخته ‌شده ذخیره شد، سیستم مشتری می ‌تواند بدون نیاز به هیچ تاییدیه، مستقیما به آن سرور متصل شود، کلید میزبان اتصال را تأیید می کند.

تایید اعتبار با کلیدهای SSH

گزینه‌ های متعددی وجود دارند که می ‌توانند برای احراز هویت کاربر مورد استفاده قرار گیرند. معمول ‌ترین آن ‌ها رمز عبور و تایید اعتبار کلید عمومی هستند.

روش تأیید اعتبار کلید عمومی در درجه اول برای اتوماسیون و بعضی اوقات توسط مدیران سیستم برای ورود به سیستم استفاده می شود. و بسیار گسترده تر از آنچه پیش بینی شده است، استفاده می شود. ایده این است که یک جفت کلید رمزنگاری – کلید عمومی و کلید خصوصی داشته باشید و کلید عمومی را در یک سرور پیکربندی کنید تا اجازه دسترسی داشته باشد و به هرکسی که نسخه ای از کلید خصوصی دسترسی به سرور اختصاص دهد اعطا شود. کلیدهای استفاده شده برای احراز هویت، کلیدهای SSH نامیده می شوند. تأیید اعتبار کلید عمومی همچنین با کارتهای هوشمند مانند کارتهای CAC و PIV که توسط دولت آمریکا استفاده می شود، استفاده می شود.

استفاده اصلی از تأیید اعتبار مبتنی بر کلید، فعال کردن اتوماسیون ایمن است. انتقال خودکار پرونده پوسته و ایمنی برای ادغام یکپارچه برنامه ها و همچنین برای سیستم های خودکار و مدیریت پیکربندی استفاده می شود.

مسائل امنیتی پروتکل SSH

شرکت هایی که از پروتکل SSH استفاده می کنند باید راه هایی برای مدیریت کلیدهای میزبان ذخیره شده در سیستم های مشتری را در نظر بگیرند. این کلیدها می توانند با گذشت زمان جمع شوند، به خصوص برای کارکنان IT که باید برای اهداف مدیریتی بتوانند به هاست های از راه دور دسترسی پیدا کنند. از آنجا که داده های ذخیره شده در یک فایل SSH known_hosts می توانند برای دستیابی معتبر به سیستم های از راه دور مورد استفاده قرار گیرند، سازمان ها باید از وجود این پرونده ها آگاه باشند و برای حفظ کنترل بر روی پرونده ها حتی پس از خارج شدن از سیستم باید یک فرایند استاندارد داشته باشند.

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

SSH در مقابل Telnet

Telnet یکی از اولین پروتکل های کاربرد اینترنت بود – Telnet برای شروع و نگهداری یک جلسه شبیه سازی ترمینال روی میزبان از راه دور استفاده می شود.

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

در حالی که Telnet در درجه اول برای تقلید ترمینال استفاده می شود ، SSH می تواند برای انجام شبیه سازی ترمینال (مشابه دستور rlogin) و همچنین برای صدور دستورات از راه دور مانند rsh ، انتقال فایل ها با استفاده از پروتکل انتقال فایل (SSH (SFTP و برای تونل زنی سایر برنامه ها استفاده شود. .

چرا از پروتکل SSH استفاده می کنیم؟

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

رهگیری ارتباطات بین دو سیستم – در این سناریو، مهاجم می تواند در جایی در شبکه بین اشخاص ارتباط برقرار باشد و هرگونه اطلاعات منتقل شده بین آنها را کپی کند. مهاجم ممکن است اطلاعات را رهگیری و نگه دارد ، یا اطلاعات را تغییر داده و آن را برای گیرنده مورد نظر ارسال کند.

جعل هویت میزبان خاص – با استفاده از این استراتژی ، سیستم مهاجم پیکربندی شده است که به عنوان گیرنده در نظر گرفته شده باشد و از انتقال استفاده می کند. اگر این استراتژی کار کند، سیستم کاربر از ارتباط برقرار کردن با میزبان اشتباه غافل می ماند. این حمله می تواند از طریق تکنیک های شناخته شده به عنوان مسمومیت DNS یا جعل آی پی انجام شود.

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

اگر SSH برای ورود به سیستم از راه دور و کپی کردن پرونده استفاده شود ، این تهدیدات امنیتی می تواند بسیار کاهش یابد. دلیل این امر این است که کاربر و سرور SSH برای تأیید هویت خود از امضاهای دیجیتال استفاده می کنند. علاوه بر این، کلیه ارتباطات بین سیستم های مشتری و سرور رمزگذاری می شود. تلاش برای جعل هویت هر دو طرف ارتباطی مؤثر نیست، زیرا هر بسته با استفاده از یک کلید رمزگذاری شده فقط توسط سیستم های محلی و راه دور رمزگذاری می شود.

نتیجه گیری

به دست آوردن درک عمیق از زمینه های عملکرد پروتکل SSH می تواند به کاربران در درک جنبه های امنیتی این فناوری کمک کند. بیشتر افراد این روند را بسیار پیچیده و غیرقابل درک می دانند ، اما بسیار ساده تر از آن است که اکثر مردم فکر می کنند.  امیدوارم این آموزش پروتکل SSH به شما کمک کند تا بتوانید نحوه ایجاد فن آوری های مختلف را در کنار هم ببندید تا یک سیستم قوی ایجاد کنید که در آن امنیت نقش بسیار مهمی را ایفا  کند.

در حال حاضر پروتکل SSH در ۲ نسخه SSH-1 و SSH-2 در اکثر سیستم عامل ها در دسترس می باشد. به طور پیش فرض امکان اتصال از طریق هر دو نسخه وجود دارد مگر در سمت سرور و در فایل کانفیگ SSH تنظیم شده باشد که تنها از نسخه ۱ یا مثلا ۲ پشتیبانی نماید. جهت آگاهی از نسخه SSH پس از اتصال می توانید فرمان زیر را اجرا نمایید:

# ssh -v

شاید برای شما این سؤال پیش بیاید که تفاوت بین نسخه های مختلف SSH چیست، در حقیقت این دو نسخه بیشتر در حوزه تائید کاربر (User Authentication) هست که با هم متفاوت هستند. SSH-1 گستره وسیع تری از متدهای تائید کاربر را پوشش می دهد، اما از اتصال همزمان در اکثر اونها پشتیبانی نمی کند. هر چند در SSH-2 شاهد متدهای RhostsRSA ، Kerberos و TIS نیستیم، اما در مقابل با بهره گیری از متد قدرتمند PublicKey و توسعه اون (DSA, RSA*, OpenPGP) توانسته است کاملا نیاز کاربران را رفع نماید. ضمن این که از اتصال همزمان نیز کاملاً پشتیبانی می کند. تفاوت مهم دیگر SSH-1 در قیاس با SSH-2 بحث امنیت است که در برخی اتصال ها فرصت حملات ورودی (Insertion Attack) را ایجاد می نماید.

مانند اف تی پی، برای اتصال به SSH هم روش های مختلفی وجود دارد. اما اگر از سیستم عامل ویندوز برای اتصال به سرور لینوکسی خود استفاده می کنید، نرم افزار PuTTY این کار را برای شما آسان کرده است. وقتی که PuTTY را اجرا کنید، صفحه ی پیکربندی نمایان می شود. ابتدا باید نام میزبان (آدرس آی پی) و سرویس دهنده SSH که میخواهید به آن متصل شوید (مثلا example.com) را وارد کنید. اگر فقط آدرس IP را میدانید،میتوانید فقط از آدرس IP استفاده کنید. اگر متناوباً از این تنظیمات استفاده مینمایید، میتوانید یک پروفایل PuTTY ایجاد کرده و این تنظیمات را در آن ذخیره نمایید.

برخی از اصطلاحات رایج در SSH:

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

  • SSH: نشان‌دهنده‌ی پروتکل SSH (با حروف بزرگ)
  • ssh: نشان دهنده‌ی نرم‌افزار سمت کاربر ssh (با حروف کوچک)
  • SSHD: نشان‌دهنده‌ی Daemon این سرویس در لینوکس.
  • SSH1: اشاره به نسخه‌ی اولیه‌ی این پروتکل دارد.
  • SSH2: نسخه‌ی تجاری و غیر رایگان این پروتکل.
  • OPEN SSH: نسخه‌ی متن باز یا Open Source این پروتکل.