نحوه تنظیم کلیدهای SSH در اوبونتو 20.04
SSH یا پوسته امن، یک پروتکل رمزگذاری شده است که برای مدیریت و برقراری ارتباط با سرورها استفاده می شود. هنگام کار با یک سرور اوبونتو، محتمل است که بیشتر وقت خود را در یک جلسه ترمینال که از طریق پروتوکل امنیتی SSH به سرور وصل است، بگذرانید.
در این راهنما، ما بر روی تنظیم کلیدهای SSH برای نصب اوبونتو 20.04 تمرکز خواهیم کرد. کلیدهای SSH یک راه امن برای ورود به سرور شما را فراهم می کند و به همه توصیه می شود.
مرحله 1 - ایجاد جفت کلید
اولین قدم این است که یک جفت کلید در دستگاه کلاینت (معمولاً رایانه شما) ایجاد کنید:
ssh-keygen
بهطور پیشفرض، نسخههای اخیر ssh-keygen یک جفت کلید RSA 3072 بیتی ایجاد میکنند که برای اکثر موارد به اندازه کافی امن است (میتوانید به صورت اختیاری پرچم -b 4096
را برای ایجاد یک کلید 4096 بیتی بزرگتر ارسال کنید).
پس از وارد کردن دستور زیر، باید خروجی زیر را مشاهده کنید:
Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
اینتر را فشار دهید تا جفت کلید را در زیر شاخه .ssh/
در فهرست اصلی خود ذخیره کنید، یا یک مسیر جایگزین را مشخص کنید.
اگر قبلاً یک جفت کلید SSH ایجاد کرده بودید، ممکن است پیام زیر را مشاهده کنید:
Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
اگر بخواهید کلید را روی هارد بازنویسی کنید، دیگر نمیتوانید با استفاده از کلید قبلی احراز هویت کنید. هنگام انتخاب بله
بسیار مراقب باشید، زیرا این یک فرآیند مخرب است که قابل برگشت نیست.
سپس باید پیام زیر را مشاهده کنید:
Output
Enter passphrase (empty for no passphrase):
در اینجا میتوانید به صورت اختیاری یک عبارت عبور امن وارد کنید که حتما توصیه میشود. یک رمز عبور یک لایه امنیتی اضافی را اضافه می کند تا از ورود کاربران غیرمجاز به سیستم جلوگیری کند. برای کسب اطلاعات بیشتر در مورد امنیت، به آموزش ما در مورد نحوه پیکربندی احراز هویت مبتنی بر کلید SSH در سرور لینوکس مراجعه کنید.
سپس باید خروجی مشابه زیر را مشاهده کنید:
Output
Your 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 مبتنی بر رمز عبور داشته باشید.
برای استفاده از این ابزار، هاست دور دست (remote host) که میخواهید به آن متصل شوید و حساب کاربری که دسترسی 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
username@203.0.113.1'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 'username@203.0.113.1'"
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
username@203.0.113.1'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 AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWW...JFX6TCmj6kmiFqv+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 را روی سرور خود پیکربندی کنید و این به شما امکان می دهد بدون ارائه رمز عبور حساب کاربری وارد شوید.
اگر میخواهید درباره کار با SSH بیشتر بدانید، به راهنمای ضروری SSH ما نگاهی بیندازید.
منبع DigitalOcean