SSH یا Secure Shell، پروتکل رمزنگاریشدهای است که برای مدیریت و ارتباط با سرورها استفاده میشود. هنگام کار با سرور اوبونتو، معمولاً بیشتر وقت خود را در سِشِن ترمینالی سپری میکنیم که از طریق SSH به آن متصل شدهایم. در این راهنما، ما بر اتصال به ssh در لینوکس از طریق راهاندازی کلیدهای SSH بر روی Ubuntu 20.04 تمرکز خواهیم کرد. کلیدهای SSH روشی امن برای ورود به سرور فراهم میکنند و استفاده از آنها به جای پسورد به تمام کاربران توصیه میشود.
گام اول اتصال به ssh در لینوکس — ایجاد جفت کلیدها
مرحله اول، ایجاد یک جفت کلید روی دستگاه کلاینت (معمولاً رایانه شخصی شما) است:
ssh-keygen
به طور پیشفرض، نسخههای اخیر ssh-keygen
یک جفت کلید RSA با طول ۳۰۷۲ بیت ایجاد میکنند که برای بیشتر کاربردها، امنیت کافی را فراهم میکند (در صورت تمایل، میتوانید با استفاده از پرچم -b 4096
یک کلید بزرگتر ۴۰۹۶ بیتی ایجاد کنید). پس از وارد کردن دستور، باید خروجی زیر را مشاهده کنید:
Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
برای ذخیره کردن جفت کلید در زیردایرکتوری .ssh/
در دایرکتوری home اینتر بزنید، یا مسیر دیگری مشخص کنید. اگر قبلاً یک جفت کلید 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 وارد شوید.
مرحله ۲ — کپی کردن کلید عمومی به سرور لینوکس
سریعترین راه برای انتقال کلید عمومی به میزبان Ubuntu، استفاده از ابزاری به نام 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
username@203.0.113.1's password:
رمز عبور را تایپ میکنیم (چیزی که تایپ کردهایم به دلایل امنیتی نمایش داده نمیشود) و سپس ENTER را فشار میدهیم. ابزار مربوطه به حساب کاربری روی میزبان دوردست با استفاده از رمز عبوری که فراهم کردیم، متصل میشود. سپس محتویات کلید ~/.ssh/id_rsa.pub
ما را درون فایلی در دایرکتوری هوم ~/.ssh
حساب دوردست به نام authorized_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
ما به حساب دوردست آپلود شده است. حالا میتوانیم برای ادامه به مرحله ۳ برویم.
کپی کردن کلید عمومی با استفاده از SSH
اگر به ابزار ssh-copy-id
دسترسی ندارید، اما به حسابی در سرورتان دسترسی SSH مبتنی بر رمز عبور دارید، میتوانید کلیدهای خود را با استفاده از روش معمول SSH بارگذاری کنید. این کار را با استفاده از دستور cat
برای خواندن محتوای کلید SSH عمومی در رایانه محلیمان و انتقال آن از طریق اتصال SSH به سرور ریموت انجام میدهیم.
در سمت دیگر، میتوانیم مطمئن شویم که دایرکتوری ~/.ssh
وجود دارد و دارای مجوزهای صحیح تحت حسابی است که از آن استفاده میکنیم. سپس میتوانیم محتوایی را که درون فایلی به نام authorized_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
حساب کاربر دوردست کپی خواهد شد. پس از آنکه این کار با موفقیت انجام شد، به مرحله ۳ بروید.
کپی کردن کلید عمومی به صورت دستی
اگر دسترسی 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
این دستور بهطور بازگشتی تمام مجوزهای «group» و «other» را برای دایرکتوری ~/.ssh
حذف میکند. اگر از حساب روت برای تنظیم کلیدها برای حساب کاربری استفاده میکنید، مهم است که دایرکتوری ~/.ssh
متعلق به یوزر باشد و نه متعلق به روت:
chown -R sammy:sammy ~/.ssh
در این آموزش، کاربر ما «sammy» نام دارد اما شما باید نام کاربری مناسب را در دستور فوق جایگزین کنید. اکنون میتوانیم احراز هویت بدون رمز عبور با سرور Ubuntu خود را انجام دهیم.
گام سوم اتصال به ssh در لینوکس — احراز هویت در سرور Ubuntu با استفاده از کلیدهای 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 را فشار دهید ادامه کار انجام شود.
اگر برای کلید خصوصی خود عبارت عبوری (Passphrase) تعیین نکردهاید، بلافاصله وارد میشوید. اگر هنگام ایجاد کلید، عبارت عبوری برای کلید خصوصی تعیین کردهاید، اکنون از شما خواسته میشود که آن را وارد کنید (توجه داشته باشید که حروف وارد شده در سِشِن ترمینال به دلایل امنیتی نمایش داده نمیشوند). پس از احراز هویت، یک سشن شل جدید برای شما با حساب پیکربندی شده در سرور Ubuntu باز میشود.
اگر احراز هویت مبتنی بر کلید موفقیتآمیز بوده است، مطالعه این مطلب را ادامه دهید تا یاد بگیرید چگونه با غیرفعال کردن احراز هویت رمز عبور، سیستم خود را بیشتر ایمن کنید.
گام چهارم — غیرفعال کردن احراز هویت با پسورد برای اتصال به سرور
اگر توانستید بدون استفاده از رمز عبور با استفاده از SSH به حساب خود وارد شوید، به این معناست که احراز هویت مبتنی بر کلید SSH را برای حساب خود به درستی پیکربندی کردهاید. با این حال، مکانیزم احراز هویت بر پایه رمز عبور همچنان فعال است، به این معنی که سرور شما هنوز در معرض حملات نیرومند (Brute-Force) قرار دارد.
پیش از انجام مراحل این بخش، اطمینان حاصل کنید که یا احراز هویت مبتنی بر کلید SSH را برای حساب روت در این سرور پیکربندی کردهاید، یا بهتر اینکه، احراز هویت مبتنی بر کلید SSH را برای حساب غیر root در این سرور با امتیازات sudo پیکربندی کردهاید. این مرحله ورودهای مبتنی بر رمز عبور را محدود میکند، بنابراین تضمین اینکه همچنان قادر به دسترسی مدیریتی خواهید بود، حیاتی است.
پس از تأیید اینکه حساب دوردست شما دارای امتیازات مدیریتی است، با استفاده از کلیدهای SSH، به سرور دوردست خود وارد شوید، چه به عنوان روت و چه با حسابی که دارای امتیازات سودو است. سپس، فایل پیکربندی دیمون SSH را باز کنید:
sudo nano /etc/ssh/sshd_config
در داخل فایل، به دنبال دستورالعملی به نام PasswordAuthentication
بگردید. این خط ممکن است با علامت #
به صورت کامنت در آنده باشد. خط را با حذف #، Uncomment کنید و مقدار آن را به no
تغییر دهید. این کار قابلیت ورود شما از طریق SSH با استفاده از رمزهای عبور حساب را غیرفعال میکند:
. . .
PasswordAuthentication no
. . .
پس از اتمام کار، فایل را با فشار دادن CTRL+X و سپس Y برای تأیید ذخیرهسازی فایل و در نهایت با زدن ENTER برای خروج از nano ببندید. برای فعال کردن این تغییرات، باید سرویس sshd
را مجدداً راهاندازی کنیم:
sudo systemctl restart ssh
برای احتیاط، یک پنجره ترمینال جدید باز کنید و قبل از بستن سشن فعلی خود، تست کنید که سرویس SSH به درستی کار میکند یا خیر:
ssh username@remote_host
پس از تأیید اینکه سرویس SSH شما به درستی کار میکند، میتوانید تمام جلسات فعلی سرور را با خیال راحت ببندید. دیمون SSH در سرور اوبونتو شما اکنون فقط به احراز هویت مبتنی بر کلید SSH پاسخ میدهد و ورودهای مبتنی بر رمز عبور غیرفعال شدهاند.
جمعبندی
احراز هویت مبتنی بر کلید SSH یک رویکرد امنیتی استاندارد است که امکان دسترسی ایمن به سرورها را بدون نیاز به رمز عبور فراهم میآورد. با پیروی از دستورالعملهای ارائه شده، شما قادر به راهاندازی و مدیریت کلیدهای SSH برای ورود به سرور اوبونتو خود هستید. این روش نه تنها امنیت دسترسی به سرور را تقویت میکند، بلکه با کاهش خطر حملات نیرومند و سایر تهدیدات امنیتی، آرامش خاطر بیشتری را برای مدیران سیستم فراهم میآورد. پس از آنکه که احراز هویت مبتنی بر کلید پیکربندی شد، توصیه میشود اقدامات بعدی برای بهبود امنیت سیستم، مانند غیرفعال سازی احراز هویت مبتنی بر رمز عبور، انجام شود تا در برابر دسترسیهای ناخواسته از سرور حفاظت بیشتری داشته باشیم.