SSH چیست؟
کلید SSH نوعی گواهی دسترسی مورد استفاده در پروتکل شبکه ی SSH(Secure Shell) است. پروتکل شبکه ی امن و رمزنگاری شده ی SSH یکی از روش های برقراری ارتباطِ راهِ دور بین دو دستگاه در شبکه ای آزاد و غیر امن است. پروتکل SSH برای جا به جا کردن فایل، مدیریت شبکه و دسترسی از راه دور به سیستمعامل هم کاربرد دارد. همچنین از عبارت SSH به منظور اشاره به مجموعه ابزار های مورد استفاده، برای ارتباط با پروتکل SSH هم گفته می شود.
پروتکل SSH برای ایجاد ارتباط امن و از راه دور بین دو دستگاه، از یک جفت کلید استفاده می کند. این جفت کلید شامل دو کلید عمومی (Public Key) و خصوصی (Private Key) است. عبارت کلید عمومی یا خصوصی می تواند در ابتدا کمی ما را به اشتباه بیاندازد، چرا که به هر دو، واژهی کلید را اختصاص می دهیم. میتوانیم کلید عمومی (Public Key) را قفلی در نظر بگیریم که کلید خصوصی (Private Key) به عنوان کلید آن قفل عمل می کند. در واقع این پروتکل به این صورت کار میکند که ما به هرکدام از اعضای شبکه، یک کلید می دهیم (Public key) که اگر بخواهند اطلاعاتی ارسال کنند، با استفاده از این کلید، داده را قفل (رمزنگاری) می کنند و در مقصد با استفاده از کلیدی دیگر (Private key)، این قفل باز (رمزگشایی) می شود.
چگونه یک کلید SSH بسازیم؟
کلید های SSH با استفاده از الگوریتم های رمزنگاری کلید عمومی (Public Key Cryptographic Algorithm) ساخته می شوند، از مشهورترین الگوریتم ها می توان به RSA و DSA اشاره کرد. الگوریتم های رمزنگاری کلید عمومی به این صورت عمل می کنند که کلید رمزنگاری در سمت فرستنده به صورت عمومی در دسترس است، اما کلید رمزگشایی در سمت گیرنده محفوظ و ایمن است. داده ی رمز نگاری شده با یک کلید عمومی در سمت فرستنده، فقط و فقط با یک کلید خصوصی در سمت گیرنده قابل رمزگشایی است.
به صورت خیلی خلاصه در الگوریتم های رمزنگاری کلید عمومی، کلیدهای SSH عمومی و خصوصی با یک الگوریتم ریاضی، با استفاده از دو عدد اول و یک متغیر تصادفی ساخته می شوند. کلید عمومی و خصوصی رابطه ای یک طرفه دارند، به این صورت که حتما کلید عمومی با دانستن کلید خصوصی به دست می آید ولی با دانستن کلید عمومی نمی توان کلید خصوصی را به دست آورد.
با استفاده از ابزار های ساخت کلید (Key Generation) میتوان کلید های SSH را ساخت. به صورتی که ابزارهای خط فرمان SSH (SSH Command Line Tools) یک سیستم کلید ساز درونی دارند. بیشتر ابزارهای مدیریت Git راهنمایی برای شیوه ی ساخت و استفاده از کلید های SSH ارائه می دهند.
شیوه ی ساخت کلید SSH در Mac و Linux
هر دو سیستمعامل OsX و Linux ابزار خط فرمان (Termianl) کاملی دارند که به صورت پیشفرض قابلیت ساخت کلیدهای SSH را داراست. فرآیند ساخت کلید SSH بین هر دوی این سیستمهای عامل یکسان است.
1 - برای شروع دستور زیر را اجرا کنید:
ssh-keygen -t rsa -b 4096 -C your_email@example.com
این دستور یک کلید SSH به اسم ایمیلی که وارد کردهاید، می سازد.
2 - پس از اجرای این دستور از ما خواسته می شود که آدرس فایلی را وارد کنیم تا کلید های ساخته شده در آن ذخیره شود. میتوانید آدرس فایل مورد نظرتان را بدهید یا با زدن دکمه Enter، مسیر پیشفرض را انتخاب کنید.
> Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
3 - در مرحله ی بعد از شما خواسته می شود که یک Passphrase (عبارت عبور) وارد کنید. PassPhrase مانند رمزی است که هر بار که بخواهید از کلید های ساخته شده استفاده کنید، نیاز به وارد کردن این PassPhrase دارید. دلیل استفاده از PassPhrase این است که اگر شخصی به سیستمی که کلیدهای SSH روی آن ذخیره شده بود دسترسی پیدا کرد، میتواند به تمام سیستمهایی که از آن جفت کلید SSH استفاده می کنند دسترسی داشته باشد. برای جلوگیری از چنین اتفاقی میتوانیم با استفاده از PassPhrase یک لایه امنیتی جدید اضافه کنیم.
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
تا اینجا کلید SSH جدید ما در آدرسی که در مرحله دوم وارد کردیم، ذخیره شده است.
4 – در این مرحله میخواهیم کلید SSH ساخته شده را به SSH-agent
اضافه کنیم. SSH-agent
یک بخش دیگری از ابزارهای مرتبط با SSH است که روی ترمینال سیستم شما نصب شده است. SSH-agent
مسئول نگه داری کلید های خصوصی است، مانند یک مخزن امن برای ذخیره کلید ها. علاوه بر ذخیرهسازی کلید های خصوصی، SSH-agent
مانند یک میانجی، تمامی درخواست هایی که از طریق پروتکل SSH می رسد را بر اساس کلیدهای خصوصی بررسی می کند تا منطبق بر آنها باشند. بدین ترتیب هیچ کسی به کلید های خصوصی دسترسی ندارد و فقط با SSH-agent
میتوان به آنها دسترسی داشت.
قبل از آن که کلید SSH جدید را به SSH-agent
اضافه کنیم، بهتر است با اجرای دستور زیر، از در حال اجرا بودن SSH-agnet
اطمینان حاصل کنید:
$ eval "$(ssh-agent -s)"
> Agent pid 59566
در صورتی که SSH-agent
در حال اجرا باشد، با وارد کردن دستور زیر می توانید کلید SSH ای که ساختیم را به SSH-agent
اضافه کنید:
ssh-add -K /Users/you/.ssh/id_rsa
با اتمام این مرحله، کلید SSH جدید در SSH-agent ثبت شده و آماده ی ارتباط بر بستر پروتکل SSH است.
شیوه ی ساخت کلید SSH در ویندوز
در محیط ویندوز، ابزار خط فرمانی مانند Unix Shell نداریم. برای اجرای دستورهای Unix باید از از ابزارهای خط فرمان دیگر استفاده کنیم. از سریع ترین و سادهتر ین ابزارهای خط فرمان میتوان به Git Bash اشاره کرد. وقتی Git Bash را نصب کردید، میتوانید به طور مشابه مراحل گفته شده در بالا را پیش بگیرید و بدون مشکل کلید SSH تان را تولید و استفاده کنید.
استفاده از SubSystem مربوط به Linux در Windows
در نسخههای جدید ویندوز قابلیتی اضافه شده به نام Windows SubSystem For Linux، که میتواند کد های باینری لینوکس را به صورت Native، در محیط ویندوز اجرا کرد. بدین ترتیب با استفاده از این قابلیت شما به خط فرمانی مشابه خط فرمان Linux دسترسی دارید و میتوانید تمامی دستورهای خط فرمان Linux را در محیط ویندوز اجرا کنید. بدین ترتیب شما میتوانید برای ساخت و استفاده از کلید های SSH، همان دستورهای بالا را اجرا کنید.
خلاصه
کلید های SSH برای برقراری ارتباط امن بین دستگاه ها استفاده می شوند. با دنبال کردن مراحلی که در بالا گفته شد، شما میتوانید کلیدهای SSH را بسازید و از آنها استفاده کنید. Git توانایی استفاده از کلیدهای SSH به جای سیستم احراز هویت سنتی (استفاده از نام کاربری و رمز)، هنگام اجرای عملیات Push و Pull روی مخزن های از راه دور (Remote Repositories) را دارد. ابزار های مدرن Git (مثل Bitbucket) توانایی احراز هویت کاربران را با استفاده از کلید های SSH دارند.