نحوه نصب SSH Keys در Ubuntu 20.04
معرفی
SSH یا پوسته امن، یک پروتکل رمزگذاری شده است که برای مدیریت و برقراری ارتباط با سرورها استفاده می شود. هنگام کار با یک سرور اوبونتو، این احتمال وجود دارد که بیشتر وقت خود را در یک جلسه ترمینال که از طریق SSH به سرور خود متصل است، بگذرانید. با مقاه نحوه نصب SSH Keys در Ubuntu 20.04 با ما همراه باشید.
در این راهنما، ما بر روی تنظیم کلیدهای SSH برای نصب اوبونتو 20.04 تمرکز خواهیم کرد. کلیدهای SSH یک راه امن برای ورود به سرور شما را فراهم می کند و به همه کاربران توصیه می شود.
ایجاد DigitalOcean Droplet به شما این امکان را می دهد که فوراً کلیدهای SSH رایانه خود را اضافه کنید تا بتوانید به صورت خصوصی و ایمن متصل شوید.
مرحله 1 – ایجاد جفت کلید
اولین قدم این است که یک جفت کلید در دستگاه مشتری (معمولاً رایانه شما) ایجاد کنید:
$ ssh-keygen
بهطور پیشفرض، نسخههای اخیر ssh-keygen یک جفت کلید 3072 بیتی RSA ایجاد میکنند که برای اکثر موارد به اندازه کافی امن است (میتوانید به صورت اختیاری پرچم b 4096- را برای ایجاد یک کلید 4096 بیتی بزرگتر ارسال کنید).
پس از وارد کردن دستور، باید خروجی زیر را مشاهده کنید:
Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Enter را فشار دهید تا جفت کلید را در زیر شاخه /ssh. در فهرست اصلی خود ذخیره کنید، یا یک مسیر جایگزین را مشخص کنید.
اگر قبلاً یک جفت کلید SSH ایجاد کرده بودید، ممکن است اعلان زیر را مشاهده کنید:
Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
اگر بخواهید کلید را روی دیسک بازنویسی کنید، دیگر نمیتوانید با استفاده از کلید قبلی احراز هویت کنید. هنگام انتخاب (بله) بسیار مراقب باشید، زیرا این یک فرآیند مخرب است که قابل برگشت نیست.
سپس باید اعلان زیر را مشاهده کنید:
Output
Enter passphrase (empty for no passphrase):
در اینجا میتوانید به صورت اختیاری یک عبارت عبور امن وارد کنید، که بسیار توصیه میشود. یک عبارت عبور یک لایه امنیتی اضافی اضافه می کند تا از ورود کاربران غیرمجاز به سیستم جلوگیری کند. برای کسب اطلاعات بیشتر در مورد امنیت، به آموزش ما در مورد نحوه پیکربندی احراز هویت مبتنی بر کلید SSH در سرور لینوکس مراجعه کنید.
سپس باید خروجی مشابه زیر را مشاهده کنید:
OutputYour identification has been saved in /your_home/.ssh/id_rsa Your public key has been saved in /your_home/.ssh/id_rsa.pub The key fingerprint is: SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host The key's randomart image is: +---[RSA 3072]----+ | .| | + | | + | | . o . | |o S . o | | + o. .oo. .. .o| |o = oooooEo+ ...o| |.. o *o+=.*+o....| | =+=ooB=o.... | +----[SHA256]-----+
اکنون یک کلید عمومی و خصوصی دارید که می توانید از آن برای احراز هویت استفاده کنید. مرحله بعدی این است که کلید عمومی را روی سرور خود قرار دهید تا بتوانید از احراز هویت مبتنی بر کلید SSH برای ورود به سیستم استفاده کنید.
مرحله 2 – کپی کردن کلید عمومی در سرور اوبونتو
سریعترین راه برای کپی کردن کلید عمومی در هاست اوبونتو استفاده از ابزاری به نام ssh-copy-id است. به دلیل سادگی، این روش در صورت وجود بسیار توصیه می شود. اگر ssh-copy-id را در دستگاه مشتری خود در دسترس ندارید، می توانید از یکی از دو روش جایگزین ارائه شده در این بخش (کپی از طریق SSH مبتنی بر رمز عبور یا کپی دستی کلید) استفاده کنید.
کپی کردن کلید عمومی با استفاده از ssh-copy-id
ابزار ssh-copy-id به طور پیش فرض در بسیاری از سیستم عامل ها گنجانده شده است، بنابراین ممکن است آن را در سیستم محلی خود در دسترس داشته باشید. برای اینکه این روش کار کند، باید از قبل به سرور خود دسترسی SSH مبتنی بر رمز عبور داشته باشید.
برای استفاده از این ابزار، میزبان راه دوری که میخواهید به آن متصل شوید و حساب کاربری که دسترسی SSH مبتنی بر رمز عبور به آن دارید را مشخص میکنید. این حسابی است که کلید عمومی SSH شما در آن کپی می شود.
به این صورت:
$ ssh-copy-id username@remote_host
ممکن است پیام زیر را مشاهده کنید:
Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
این بدان معنی است که رایانه محلی شما میزبان راه دور را نمی شناسد. این اولین باری است که به یک هاست جدید متصل می شوید. “yes” را تایپ کرده و ENTER را برای ادامه فشار دهید.
در مرحله بعد، ابزار حساب محلی شما را برای یافتن کلید id_rsa.pub که قبلا ایجاد کرده بودیم اسکن می کند. وقتی کلید را پیدا کرد، رمز عبور حساب کاربری از راه دور را از شما می خواهد:
Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
رمز عبور را وارد کنید (تایپ شما برای اهداف امنیتی نمایش داده نمی شود) و ENTER را فشار دهید. ابزار با استفاده از رمز عبوری که شما ارائه کرده اید به حساب موجود در هاست راه دور متصل می شود. سپس محتویات کلید ssh/id_rsa.pub./~ شما را در فایلی در دایرکتوری خانه ssh./~ حساب راه دور به نام autorized_keys کپی می کند.
شما باید خروجی زیر را ببینید:
Output
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
در این مرحله، کلید id_rsa.pub شما در حساب راه دور آپلود شده است. می توانید به مرحله 3 ادامه دهید.
کپی کردن کلید عمومی با استفاده از SSH
اگر ssh-copy-id در دسترس ندارید، اما دسترسی SSH مبتنی بر رمز عبور به حسابی در سرور خود دارید، میتوانید کلیدهای خود را با استفاده از روش SSH معمولی آپلود کنید.
ما می توانیم این کار را با استفاده از دستور cat برای خواندن محتویات کلید عمومی SSH در رایانه محلی خود و لوله گذاری آن از طریق اتصال SSH به سرور راه دور انجام دهیم.
از طرف دیگر، میتوانیم مطمئن شویم که دایرکتوری ssh./~ وجود دارد و مجوزهای صحیحی را در حساب مورد استفاده ما دارد.
سپس میتوانیم محتوایی را که در فایلی به نام autorized_keys در این دایرکتوری وارد کردهایم، خروجی دهیم. ما از نماد << تغییر مسیر برای اضافه کردن محتوا به جای بازنویسی آن استفاده خواهیم کرد. این به ما امکان می دهد بدون از بین بردن کلیدهای اضافه شده قبلی، کلیدها را اضافه کنیم.
دستور کامل به شکل زیر است:
$ cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
ممکن است پیام زیر را مشاهده کنید:
Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
این بدان معنی است که رایانه محلی شما میزبان راه دور را نمی شناسد. این اولین باری است که به یک هاست جدید متصل می شوید. Yes را تایپ کرده و برای ادامه ENTER را فشار دهید.
پس از آن، باید از شما خواسته شود رمز عبور حساب کاربری راه دور را وارد کنید:
Output
[email protected]'s password:
پس از وارد کردن رمز عبور، محتوای کلید id_rsa.pub شما در انتهای فایل authorized_keys حساب کاربری از راه دور کپی میشود. در صورت موفقیت آمیز بودن، به مرحله 3 ادامه دهید.
کپی کردن کلید عمومی به صورت دستی
اگر دسترسی SSH مبتنی بر رمز عبور به سرور خود را ندارید، باید فرآیند فوق را به صورت دستی تکمیل کنید.
ما به صورت دستی محتوای فایل id_rsa.pub شما را به فایل ssh/authorized_keys./~ در دستگاه راه دور شما اضافه می کنیم.
برای نمایش محتوای کلید id_rsa.pub، این را در رایانه محلی خود تایپ کنید:
# cat ~/.ssh/id_rsa.pub
محتوای کلید را خواهید دید که باید چیزی شبیه به این باشد:
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
با هر روشی که در دسترس دارید به هاست راه دور خود دسترسی پیدا کنید.
هنگامی که به حساب خود در سرور راه دور دسترسی پیدا کردید، باید مطمئن شوید که دایرکتوری ssh./~ وجود دارد. این دستور در صورت لزوم دایرکتوری را ایجاد می کند یا اگر از قبل وجود داشته باشد کاری انجام نمی دهد:
$ mkdir -p ~/.ssh
اکنون میتوانید فایل authorized_keys را در این فهرست ایجاد یا تغییر دهید. می توانید محتویات فایل id_rsa.pub خود را به انتهای فایل authorized_keys اضافه کنید و در صورت لزوم با استفاده از این دستور آن را ایجاد کنید:
$ echo public_key_string >> ~/.ssh/authorized_keys
در دستور بالا، عبارت public_key_string را با خروجی دستور cat ~/.ssh/id_rsa.pub که در سیستم محلی خود اجرا کرده اید، جایگزین کنید. باید با ssh-rsa AAAA شروع شود….
در نهایت، ما مطمئن خواهیم شد که دایرکتوری ssh./~ و فایل authorized_keys دارای مجموعه مجوزهای مناسب هستند:
$ chmod -R go= ~/.ssh
این به صورت بازگشتی تمام مجوزهای “گروه” و “سایر” را برای دایرکتوری /ssh./~ حذف می کند.
اگر از حساب root برای تنظیم کلیدهای یک حساب کاربری استفاده می کنید، همچنین مهم است که دایرکتوری ssh./~ متعلق به کاربر باشد و نه روت:
chown -R sammy:sammy ~/.ssh
در این آموزش کاربر ما sammy نام دارد اما شما باید نام کاربری مناسب را با دستور بالا جایگزین کنید.
اکنون میتوانیم با سرور اوبونتو احراز هویت بدون رمز عبور را انجام دهیم.
مرحله 3 – احراز هویت به سرور اوبونتو با استفاده از کلیدهای SSH
اگر یکی از مراحل بالا را با موفقیت انجام داده اید، باید بتوانید بدون ارائه رمز عبور حساب راه دور وارد میزبان راه دور شوید.
روند اصلی یکسان است:
$ ssh username@remote_host
اگر این اولین بار است که به این هاست متصل می شوید (اگر از آخرین روش بالا استفاده می کنید)، ممکن است چیزی شبیه به این مشاهده کنید:
Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
این بدان معنی است که رایانه محلی شما میزبان راه دور را نمی شناسد. “yes” را تایپ کنید و سپس ENTER را برای ادامه فشار دهید.
اگر رمز عبور کلید خصوصی خود را ارائه نکرده اید، بلافاصله وارد سیستم خواهید شد. اگر هنگام ایجاد کلید یک عبارت عبور برای کلید خصوصی ارائه کرده اید، از شما خواسته می شود که آن را وارد کنید (توجه داشته باشید که ضربه های کلید شما در جلسه ترمینال برای امنیت نمایش داده نمی شود). پس از احراز هویت، یک جلسه پوسته جدید باید با حساب پیکربندی شده در سرور اوبونتو برای شما باز شود.
اگر احراز هویت مبتنی بر کلید موفقیت آمیز بود، ادامه دهید تا یاد بگیرید چگونه با غیرفعال کردن احراز هویت رمز عبور، سیستم خود را بیشتر ایمن کنید.
مرحله 4 – غیرفعال کردن احراز هویت رمز عبور در سرور شما
اگر توانستید با استفاده از SSH بدون رمز عبور وارد حساب خود شوید، احراز هویت مبتنی بر کلید SSH را با موفقیت در حساب خود پیکربندی کرده اید. با این حال، مکانیسم احراز هویت مبتنی بر رمز عبور شما هنوز فعال است، به این معنی که سرور شما همچنان در معرض حملات brute-force قرار دارد.
قبل از تکمیل مراحل این بخش، مطمئن شوید که یا احراز هویت مبتنی بر کلید SSH را برای حساب ریشه در این سرور پیکربندی کردهاید، یا ترجیحاً احراز هویت مبتنی بر کلید SSH را برای یک حساب غیر ریشه در این پیکربندی کردهاید. سرور با امتیازات sudo. این مرحله ورودهای مبتنی بر رمز عبور را قفل میکند، بنابراین اطمینان از اینکه همچنان بتوانید دسترسی مدیریتی داشته باشید بسیار مهم است.
هنگامی که تأیید کردید که حساب راه دور شما دارای امتیازات مدیریتی است، با کلیدهای SSH وارد سرور راه دور خود شوید، چه به صورت روت یا با یک حساب دارای امتیازات sudo. سپس، فایل پیکربندی SSH Daemon را باز کنید:
$ sudo nano /etc/ssh/sshd_config
در داخل فایل، دستورالعملی به نام PasswordAuthentication را جستجو کنید. این خط ممکن است با یک # در ابتدای خط توضیح داده شود. با حذف #، خط را از کامنت خارج کنید و مقدار را روی no قرار دهید. این قابلیت شما را برای ورود از طریق SSH با استفاده از رمزهای عبور حساب غیرفعال می کند:
/etc/ssh/sshd_config
. . .
PasswordAuthentication no
. . .
پس از اتمام کار، فایل را با فشار دادن CTRL+X و سپس Y برای تایید ذخیره فایل و در نهایت ENTER برای خروج از نانو، ذخیره کرده و ببندید. برای فعال کردن این تغییرات، باید سرویس sshd را مجددا راه اندازی کنیم:
$ sudo systemctl restart ssh
به عنوان یک اقدام احتیاطی، یک پنجره ترمینال جدید باز کنید و قبل از بستن جلسه فعلی خود تست کنید که سرویس SSH به درستی کار می کند:
# ssh username@remote_host
هنگامی که تأیید کردید سرویس SSH شما به درستی کار می کند، می توانید با خیال راحت تمام جلسات سرور فعلی را ببندید.
دیمون SSH در سرور اوبونتو شما اکنون فقط به احراز هویت مبتنی بر کلید SSH پاسخ می دهد. ورودهای مبتنی بر رمز عبور غیرفعال شده است.
نتیجه
اکنون باید احراز هویت مبتنی بر کلید SSH را روی سرور خود پیکربندی کنید و به شما امکان می دهد بدون ارائه رمز عبور حساب کاربری وارد شوید.