راهاندازی و اتصال به ssh در لینوکس با کلید ssh
SSH یا Secure Shell، پروتکل رمزنگاریشدهای است که برای مدیریت و ارتباط با سرورها استفاده میشود. هنگام کار با سرور اوبونتو، معمولاً بیشتر وقت خود را در سِشِن ترمینالی سپری میکنیم که از طریق SSH به آن متصل شدهایم. در این راهنما، ما بر اتصال به ssh در لینوکس از طریق راهاندازی کلیدهای SSH بر روی Ubuntu 20.04 تمرکز خواهیم کرد. کلیدهای SSH روشی امن برای ورود به سرور فراهم میکنند و استفاده از آنها به جای پسورد به تمام کاربران توصیه میشود
گام اول اتصال
مرحله اول، ایجاد یک جفت کلید روی دستگاه کلاینت (معمولاً رایانه شخصی شما) است
به طور پیشفرض، نسخههای اخیر س س اچ کیگن یک جفت کلید رسا با طول ۳۰۷۲ بیت ایجاد میکنند که برای بیشتر کاربردها، امنیت کافی را فراهم میکند در صورت تمایل، میتوانید با استفاده از پرچم -ب ۴۰۹۶ یک کلید بزرگتر ۴۰۹۶ بیتی ایجاد کنید. پس از وارد کردن دستور، باید خروجی زیر را مشاهده کنید
برای ذخیره کردن جفت کلید در زیردایرکتوری س س اچ در دایرکتوری هووم اینتر بزنید، یا مسیر دیگری مشخص کنید. اگر قبلاً یک جفت کلید س س اچ تولید کردهاید، ممکن است پرسش زیر را مشاهده کنید
اگر تصمیم به بازنویسی کلید روی دیسک بگیرید، دیگر نخواهید توانست با استفاده از کلید قبلی احراز هویت کنید. هنگام انتخاب بله، بسیار محتاط باشید، زیرا این یک فرایند مخرب است که قابل برگشت نیست. سپس باید خروجی زیر را مشاهده کنید
در اینجا میتوانید به صورت اختیاری یک عبارت عبور امن وارد کنید، که به شدت توصیه میشود. عبارت عبور یک لایه امنیتی اضافی ایجاد میکند تا از ورود کاربران غیرمجاز جلوگیری کند. برای آموختن بیشتر درباره امنیت، میتوانید به آموزش پیرامون چگونگی پیکربندی احراز هویت مبتنی بر کلید سه در یک سرور [لینوکس] مراجعه کنید. سپس باید خروجی مشابه زیر را ببینید:
شما اکنون یک کلید عمومی و خصوصی دارید که میتوانید برای احراز هویت استفاده کنید. مرحله بعدی، قرار دادن کلید عمومی بر روی سرور شما است تا بتوانید با استفاده از احراز هویت مبتنی بر کلید SSH وارد شوید.
مرحله ۲ — کپی کردن کلید عمومی به سرور لینوکس
سریعترین راه برای انتقال کلید عمومی به میزبان Ubuntu، استفاده از ابزاری به نام ssh-copy-id است. به دلیل سادگی استفاده، این روش در صورت در دسترس بودن، به شدت توصیه میشود. اگر ابزار ssh-copy-id در دستگاه کلاینت شما موجود نیست، میتوانید از یکی از ۲ روش جایگزین ارائهشده در این بخش استفاده کنید (کپی کردن از طریق SSH مبتنی بر رمز عبور یا کپی دستی کلید).
کپی کردن کلید عمومی با استفاده از ssh-copy-id
ابزار ssh-copy-id به طور پیشفرض در بسیاری از سیستمهای عامل گنجانده شده است، بنابراین ممکن است در سیستم محلی شما در دسترس باشد. برای اینکه این روش کار کند، باید قبلاً دسترسی SSH مبتنی بر رمز عبور را به سرور خود داشته باشید. برای استفاده از این ابزار، میزبان دوردستی (ریموتی) که میخواهیم به آن متصل شویم و حساب کاربری که دسترسی SSH مبتنی بر رمز عبور به آن داریم را مشخص میکنیم. این حساب کاربری همان حسابی است که کلید SSH عمومی شما به آن کپی خواهد شد. دستور به شکل زیر است:
ممکن است پیام زیر را مشاهده کنید:
این یعنی رایانه محلی شما میزبان دوردست را نمیشناسد. این اتفاق در اولین اتصال شما به یک میزبان جدید رخ میدهد. «yes» را تایپ کرده و ENTER را فشار دهید تا ادامه کار انجام شود. سپس، ابزار مربوطه کلید id_rsa.pub را که قبلاً ایجاد کردیم در حساب محلی ما جستجو میکند. وقتی کلید را پیدا کند، رمز عبور حساب کاربری ریموت را از ما درخواست میکند:
رمز عبور را تایپ میکنیم (چیزی که تایپ کردهایم به دلایل امنیتی نمایش داده نمیشود) و سپس ENTER را فشار میدهیم. ابزار مربوطه به حساب کاربری روی میزبان دوردست با استفاده از رمز عبوری که فراهم کردیم، متصل میشود. سپس محتویات کلید ~/.ssh/id_rsa.pub ما را درون فایلی در دایرکتوری هوم ~/.ssh حساب دوردست به نام authorized_keys کپی میکند. حالا باید خروجی زیر را مشاهده کنیم:
در این مرحله، کلید id_rsa.pub ما به حساب دوردست آپلود شده است. حالا میتوانیم برای ادامه به مرحله ۳ برویم.
کپی کردن کلید عمومی با استفاده از SSH
اگر به ابزار ssh-copy-id دسترسی ندارید، اما به حسابی در سرورتان دسترسی SSH مبتنی بر رمز عبور دارید، میتوانید کلیدهای خود را با استفاده از روش معمول SSH بارگذاری کنید. این کار را با استفاده از دستور cat برای خواندن محتوای کلید SSH عمومی در رایانه محلیمان و انتقال آن از طریق اتصال SSH به سرور ریموت انجام میدهیم. در سمت دیگر، میتوانیم مطمئن شویم که دایرکتوری ~/.ssh وجود دارد و دارای مجوزهای صحیح تحت حسابی است که از آن استفاده میکنیم. سپس میتوانیم محتوایی را که درون فایلی به نام authorized_keys پایپ کردیم را در این دایرکتوری خروجی دهیم. از نماد تغییرمسیر >> برای افزودن محتوا به جای بازنویسی آن استفاده میکنیم. این امکان را به ما میدهد تا کلیدها را بدون از بین بردن کلیدهای قبلاً افزوده شده، اضافه کنیم. دستور کامل به این شکل است:
ممکن است با پیام زیر مواجه شوید:
این یعنی رایانه محلی شما میزبان دوردست را نمیشناسد. این اتفاق در اولین اتصال شما به میزبان جدید رخ میدهد. «yes» را تایپ کنید و ENTER را فشار دهید تا کار ادامه یابد. سپس، باید برای وارد کردن رمز عبور حساب کاربری دوردست از شما درخواست شود:
پس از وارد کردن رمز عبور، محتوای کلید id_rsa.pub شما به انتهای فایل authorized_keys حساب کاربر دوردست کپی خواهد شد. پس از آنکه این کار با موفقیت انجام شد، به مرحله ۳ بروید.
کپی کردن کلید عمومی به صورت دستی
اگر دسترسی SSH مبتنی بر رمز عبور به سرور خود ندارید، باید فرایند فوق را به صورت دستی انجام دهید. پس به صورت دستی محتوای فایل id_rsa.pub را به فایل ~/.ssh/authorized_keys در دستگاه دوردست اضافه میکنیم. برای نمایش محتوای کلید id_rsa.pub خود، این دستور را در کامپیوتر محلی خود تایپ کنید:
محتوای کلید نمایش داده میشود، که باید شبیه به خروجی زیر باشد:
با استفاده از هر روشی که در دسترس دارید، به میزبان دوردست دسترسی پیدا کنید. پس از دسترسی به حساب خود در سرور دوردست، باید مطمئن شوید که دایرکتوری ~/.ssh وجود دارد. این دستور، در صورت نیاز دایرکتوری را ایجاد میکند و اگر از قبل وجود داشته باشد، کاری انجام نمیدهد:
اکنون، میتوانید فایل authorized_keys را در این دایرکتوری ایجاد یا ویرایش کنید. میتوانید محتویات فایل id_rsa.pub خود را در انتهای فایل authorized_keys اضافه کنید، و در صورت نیاز آن را با استفاده از این دستور ایجاد کنید:
در دستور فوق، به جای public_key_string، خروجی دستور cat ~/.ssh/id_rsa.pub که در سیستم محلی خود اجرا کردهاید را قرار دهید. این خروجی باید با ssh-rsa AAAA… شروع شود. در نهایت، مطمئن میشویم که دایرکتوری ~/.ssh و فایل authorized_keys دارای مجوزهای مناسب هستند:
این دستور بهطور بازگشتی تمام مجوزهای «group» و «other» را برای دایرکتوری ~/.ssh حذف میکند. اگر از حساب روت برای تنظیم کلیدها برای حساب کاربری استفاده میکنید، مهم است که دایرکتوری ~/.ssh متعلق به یوزر باشد و نه متعلق به روت:
در این آموزش، کاربر ما «sammy» نام دارد اما شما باید نام کاربری مناسب را در دستور فوق جایگزین کنید. اکنون میتوانیم احراز هویت بدون رمز عبور با سرور Ubuntu خود را انجام دهیم.
گام سوم اتصال به ssh در لینوکس — احراز هویت در سرور Ubuntu با استفاده از کلیدهای SSH
اگر یکی از روشهای بالا را با موفقیت به پایان رساندهاید، حالا باید قادر به ورود به میزبان دوردست بدون ارائه رمز عبور حساب دوردست باشید. فرایند کلی یکسان است:
اگر این اولین بار است که به این میزبان متصل میشوید (اگر از آخرین روش بالا استفاده کردهاید)، ممکن است چیزی شبیه به خروجی زیر را مشاهده کنید:
این یعنی رایانه محلی شما میزبان دوردست را نمیشناسد و این اولین بار است که به آن متصل میشوید. «yes» را تایپ کنید و سپس ENTER را فشار دهید ادامه کار انجام شود. اگر برای کلید خصوصی خود عبارت عبوری (Passphrase) تعیین نکردهاید، بلافاصله وارد میشوید. اگر هنگام ایجاد کلید، عبارت عبوری برای کلید خصوصی تعیین کردهاید، اکنون از شما خواسته میشود که آن را وارد کنید (توجه داشته باشید که حروف وارد شده در سِشِن ترمینال به دلایل امنیتی نمایش داده نمیشوند). پس از احراز هویت، یک سشن شل جدید برای شما با حساب پیکربندی شده در سرور Ubuntu باز میشود. اگر احراز هویت مبتنی بر کلید موفقیتآمیز بوده است، مطالعه این مطلب را ادامه دهید تا یاد بگیرید چگونه با غیرفعال کردن احراز هویت رمز عبور، سیستم خود را بیشتر ایمن کنید.
گام چهارم — غیرفعال کردن احراز هویت با پسورد برای اتصال به سرور
اگر توانستید بدون استفاده از رمز عبور با استفاده از SSH به حساب خود وارد شوید، به این معناست که احراز هویت مبتنی بر کلید SSH را برای حساب خود به درستی پیکربندی کردهاید. با این حال، مکانیزم احراز هویت بر پایه رمز عبور همچنان فعال است، به این معنی که سرور شما هنوز در معرض حملات نیرومند (Brute-Force) قرار دارد. پیش از انجام مراحل این بخش، اطمینان حاصل کنید که یا احراز هویت مبتنی بر کلید SSH را برای حساب روت در این سرور پیکربندی کردهاید، یا بهتر اینکه، احراز هویت مبتنی بر کلید SSH را برای حساب غیر root در این سرور با امتیازات sudo پیکربندی کردهاید. این مرحله ورودهای مبتنی بر رمز عبور را محدود میکند، بنابراین تضمین اینکه همچنان قادر به دسترسی مدیریتی خواهید بود، حیاتی است. پس از تأیید اینکه حساب دوردست شما دارای امتیازات مدیریتی است، با استفاده از کلیدهای SSH، به سرور دوردست خود وارد شوید، چه به عنوان روت و چه با حسابی که دارای امتیازات سودو است. سپس، فایل پیکربندی دیمون SSH را باز کنید:
در داخل فایل، به دنبال دستورالعملی به نام PasswordAuthentication بگردید. این خط ممکن است با علامت # به صورت کامنت در آنده باشد. خط را با حذف #، Uncomment کنید و مقدار آن را به no تغییر دهید. این کار قابلیت ورود شما از طریق SSH با استفاده از رمزهای عبور حساب را غیرفعال میکند:
پس از اتمام کار، فایل را با فشار دادن CTRL+X و سپس Y برای تأیید ذخیرهسازی فایل و در نهایت با زدن ENTER برای خروج از nano ببندید. برای فعال کردن این تغییرات، باید سرویس sshd را مجدداً راهاندازی کنیم:
برای احتیاط، یک پنجره ترمینال جدید باز کنید و قبل از بستن سشن فعلی خود، تست کنید که سرویس SSH به درستی کار میکند یا خیر:
پس از تأیید اینکه سرویس SSH شما به درستی کار میکند، میتوانید تمام جلسات فعلی سرور را با خیال راحت ببندید. دیمون SSH در سرور اوبونتو شما اکنون فقط به احراز هویت مبتنی بر کلید SSH پاسخ میدهد و ورودهای مبتنی بر رمز عبور غیرفعال شدهاند.
جمعبندی
احراز هویت مبتنی بر کلید SSH یک رویکرد امنیتی استاندارد است که امکان دسترسی ایمن به سرورها را بدون نیاز به رمز عبور فراهم میآورد. با پیروی از دستورالعملهای ارائه شده، شما قادر به راهاندازی و مدیریت کلیدهای SSH برای ورود به سرور اوبونتو خود هستید. این روش نه تنها امنیت دسترسی به سرور را تقویت میکند، بلکه با کاهش خطر حملات نیرومند و سایر تهدیدات امنیتی، آرامش خاطر بیشتری را برای مدیران سیستم فراهم میآورد. پس از آنکه که احراز هویت مبتنی بر کلید پیکربندی شد، توصیه میشود اقدامات بعدی برای بهبود امنیت سیستم، مانند غیرفعال سازی احراز هویت مبتنی بر رمز عبور، انجام شود تا در برابر دسترسیهای ناخواسته از سرور حفاظت بیشتری داشته باشیم.
