علی جعفری
علی جعفری
خواندن ۴ دقیقه·۶ سال پیش

احراز هویت SSH با استفاده از Public Key

امنیت ssh لینوکس
امنیت ssh لینوکس

پروتکل ssh یا secure shell چیه؟ تعریف ویکی پدیا:

پوسته امن (به انگلیسی: Secure Shell) یا به اختصار اس‌اس‌اچ (به انگلیسی: SSH) یک پروتکل اینترنتی است که امکان تبادل اطلاعات با استفاده از یک کانال امن را بین دو دستگاه متصل در شبکه ایجاد می‌کند.

برای اتصال به ssh باید اول احراز هویت بشید. احراز هویت به چند شکل ممکنه اتفاق بیوفته که پیش فرض اون با یوزرنیم و پسورد هستش و البته نوع های دیگه ای مثل احراز هویت با Public Key هم وجود داره.

احراز هویت با Public Key چند مزیت خیلی خوب داره که به اختصار اشاره میکنم:

  • معمولا این روش احراز هویت هدف هکر ها برای حمله brute-force نیست.
  • اگر هکر به سرور دسترسی پیدا کنه اطلاعات ورود به سرور افشا نمیشه چون ورود با کلید شما اتفاق میوفته نه با یوزرنیم و پسورد تون.
  • به خاطر اینکه دیگه لازم نیست پسورد تون رو وارد کنید میتونید از این روش در اسکریپت ها و ابزار های اتوماسیون استفاده کنید.

در ادامه میخوام احراز هویت با استفاده از Public Key رو آموزش بدم.

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

کلید SSH به صورتی جفتی ساخته و به صورت متنی در فایل ذخیره میشه. جفت کلید SSH شامل دو کلیده:

  • کلید خصوصی یا Private Key: معمولا با نام id_rsa ذخیره میشه. هیچ کاربری غیر از خودتون نباید به این کلید دسترسی داشته باشه و باید سعی کنید از این کلید محافظت کنید (مثل ناموس میمونه).
  • کلید عمومی یا Public Key: معمولا با نام id_rsa.pub ذخیره میشه. شما میتونید این کلید رو در اختیار هر کسی که خواستید بزارید. اگر کسی این کلید رو توی سرورش قرار بده شما میتونی بدون یوزرنیم و پسورد به ssh اون سرور دسترسی پیدا کنی.

اگر سایت یا سروری SSH Key شما رو درخواست کرد منظور Public Key یا کلید عمومی (id_rsa.pub) هستش. برای مثال سرویس هایی مثل GitHub و GitLab ممکنه کلید عمومی شما رو لازم داشته باشن تا شما بدون وارد کردن یوزرنیم و پسورد بتونید عملیاتی مثل git push رو انجام بدید.

ساختن SSH Key در لینوکس و macOS:

برای ساختن یک جفت کلید SSH مراحل زیر را به ترتیب انجام بدید:

1. ساخت کلید جدید:

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

در این دستور -t نوع کلید، -b تعداد بیت کلید و -C کامنت کلید را مشخص میکنه.

2. در این مرحله کلید Enter رو فشار بدید تا کلید در فایل های پیشفرض id_rsa و id_rsa.pub در پوشه /home/your_username/.ssh ذخیره شود:

3. در مرحله بعد از شما خواسته میشه که برای رمزنگاری کلید خصوصی، یک پسورد وارد کنید. این به این معنیه که همیشه برای استفاده از کلید تون باید پسورد رو وارد کنید. برای این آموزش پیشنهاد میکنم که پسورد وارد نکنید و اون رو خالی رها کنید و Enter را فشار بدید.

الان باید جفت کلید شما در آدرس/home/your_username/.ssh ذخیره شده باشه.

قرار دادن فایل کلید عمومی در سرور

برای بارگذاری کلید عموم تون در سرور چند راه وجود داره:

استفاده از ssh-copy-id:

کامند ssh-copy-id در بسیاری از سیستم عامل ها وجود داره. با استفاده از این کامند میتونید کلید عمومی تون رو در راحت ترین حالت ممکنه روی سرور بارگذاری کنید:

1. کامند زیر رو وارد کنید، دقت کنید که یوزرنیم و آی پی سروری که میخواید بهش دسترسی پیدا کنید رو باید جایگذاری کنید:

$ ssh-copy-id your_username@192.0.0.2

2. سپس پسورد سرور رو وارد کنید و Enter رو بزنید.

3. الان چک کنید که بدون پسورد میتونید وارد سرور بشید:

$ ssh your_username@192.0.0.2

استفاده از scp:

کامند scp یک کامند بسیار پر استفاده و کاربردی برای کپی کردن فایل بین ماشین ها بر اساس ssh هستش.

1. اول با ssh به سرور خودتون وصل بشید:

$ ssh your_username@192.0.0.2

2. بعد پوشه ~/.ssh و فایل authorized_keys رو در صورتی که وجود ندارند بسازید:

mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys

3. بعد سطح دسترسی اون ها رو تنظیم کنید:

chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

4. حالا یک ترمینال دیگه باز کنید و با استفاده از دستور scp کلید عمومی ساخته شده (id_rsa.pub) رو به فایل authorized_keys در سرور منتقل کنید (جایگزاری یوزرنیم و آی پی سرور هدف فراموش نشه) :

scp ~/.ssh/id_rsa.pub your_username@192.0.0.2:~/.ssh/authorized_keys

5. الان چک کنید که بدون پسورد میتونید وارد سرور بشید:

$ ssh your_username@192.0.0.2

کپی کردن دستی کلید عمومی:

شما حتی میتونید این کار رو به صورت دستی هم انجام بدید:

1. ابتدا محتوی کلید عمومی تون رو در ترمینال چاپ کنید:

cat ~/.ssh/id_rsa.pub

2. بعد از این که محتویات اون داخل ترمینال نشون داده شد با کرسور موس اون رو بگیرید و کپی کنید. سپس وارد سرور تون بشید:

$ ssh your_username@192.0.0.2

3. بعد پوشه ~/.ssh و فایل authorized_keys رو در صورتی که وجود ندارند بسازید:

mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys

4. بعد سطح دسترسی اون ها رو تنظیم کنید:

chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

5. حالا فایل authorized_keys رو با یک تکست ادیتور مثل nano یا vim باز کنید و کلید عمومی کپی شده رو به انتها این فایل اضافه کنید و فایل رو ذخیره کنید.

6. الان چک کنید که بدون پسورد میتونید وارد سرور بشید:

$ ssh your_username@192.0.0.2

پایان:

امیدوارم که این آموزش بهتون کمک کرده باشه. اگر فکر میکنید آموزش مفیدی بوده لینک رو با بقیه دوستاتون به اشتراک بزارید. در صورتی که به مشکلی برخوردید همینجا کامنت بزارید یا از طریق ایمیل مشکل تون رو مطرح کنید. منم خوشحال میشم بیشتر همدیگه رو بشناسیم :)

برنامه نویسیسرورsshauthenticationاحراز هویت
توسعه دهنده وب، علاقه مند به یادگیری
شاید از این پست‌ها خوشتان بیاید