مقدمه
پوسته امن یا همان SSH یک پروتکل رمزگذاری شده است که از آن برای مدیریت و تعامل با سرویسها استفاده میشود. در بیشتر مواقعی که با سرور Ubuntu کار میکنید، معمولاً در یک ترمینال سشن متصل به سرور از طریق SSH خواهید بود. در ادامه به شما آموزش میدهیم که چگونه روی سرور Ubuntu 20.04 خود SSH-key نصب کنید. با وان سنتر همراه باشید.
مرحله اول – ایجاد یک جفت SSH-key
مرحله اول برای ایجاد یک جفت SSH-key در دستگاه (که معمولا کامپیوتر شما است) به شکل زیر میباشد:
ssh-ketgen
آخرین نسخههای ssh-keygen به صورت پیشفرض یک جفت SSH-key ۳۰۷۲ بیتی RSA ایجاد میکند که برای اکثر موارد استفاده به اندازه کافی امنیت دارد. (میتوانید با ارسال فلگ یا پرچم b 4096- یک SSH-key بزرگتر ۴۰۹۶ بیتی ایجاد کنید.)
بعد از وارد کردن دستور، باید یک خروجی به شکل زیر ببینید:
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
دکمه ENTER را بزنید تا SSH-key ایجاد شده را در زیرشاخه /ssh. دایرکتوری اصلی خود ذخیره کرده یا یک مسیر جایگزین برای آن تعیین کنید.
اگر قبلا یک جفت SSH-key تولید کرده باشید، چیزی به شکل زیر خواهید دید:
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
اگر SSH-key را روی جایگزینی (overwrite) کنید، دیگر نمیتوانید از SSH-key قبلی برای احراز هویت استفاده کنید. درصورتی که میخواهید yes را انتخاب کنید، خیلی مراقب باشید چون این پروسه قابل بازگشت هم نیست.
در ادامه چیزی به شکل زیر خواهید دید:
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
در اینجا میتوانید یک عبارت عبور امن به دلخواه خود بنویسید؛ این کار به شدت توصیه میشود. عبارت عبور یک لایه به لایههای امنیتی سرور اضافه می کند تا از ورود کاربران غیرمجاز جلوگیری کند.
در ادامه باید خروجی شبیه به زیر را ببینید:
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-key شخصی و عمومی را برای احراز هویت در اختیار دارید. در مرحله بعد روش قرار دادن SSH-key عمومی در سرور خود برای احراز هویت بر اساس SSH-key را به شما آموزش میدهیم. با وان سنتر همراه باشید.
مرحله دوم – کپی کردن SSH-key عمومی در سرور Ubunuto
سریعترین راه برای کپی کردن SSH-key عمومی در هاست Ubuntu، استفاده از ابزار ssh-copy-id است. این روش چون خیلی ساده است، در صورتی که در دسترس باشد، به شدت توصیه میشود. اگر ابزار ssh-copy-id را در کامپیوتر خود ندارید، میتوانید از دو روشی که در ادامه آنها را توضیح میدهیم، استفاده کنید. (کپی کردن از طریق کلمه عبور بر اساس SSH، یا کپی کردن SSH-key به صورت دستی)
کپی کردن SSH-key عمومی با استفاده از ابزار ssh-copy-id
ابزار ssh-copy-id به صورت پیشفرض در بیشتر سیستمهای عامل وجود دارد. بنابراین احتمالا شما در سیستم خود این ابزار را دارید. برای اینکه بتوانید از این روش استفاده کنید، باید دسترسی SSH بر اساس کلمه عبور به سرور خود داشته باشید.
برای استفاده از این ابزار باید هاست ریموتی که میخواهید با آن وصل شوید، را تعیین کنید. همچنین باید حساب کاربری که دسترسی SSH بر اساس کلمه عبور دارد، را مشخص کنید؛ این حساب کاربری همان حسابی است که SSH-key عمومی شما در آن کپی خواهد شد.
سینتکس اینگونه است:
ssh-copy-id username@remote_host
در ادامه احتمالا چیزی به شکل زیر خواهید دید:
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 را بزنید.
در ادامه ابزاری که از آن استفاده می کنید یعنی ssh-copy-id، حساب کاربری شما را برای پیدا کردن key id_rsa.pub که قبلا ایجاد کردید، اسکن میکند. سپس به محض پیدا کردن، از شما میخواهد که کلمه عبور حساب کاربری ریموت را وارد کنید:
/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-copy-id با استفاده از همین کلمه عبور به حساب کاربری شما در هاست ریموت وصل خواهد شد. در ادامه محتوای ~/.ssh/id_rsa.pub key را داخل یک فایل در دایرکتوری ssh./~ حساب کاربری ریموت، به اسم authorized_keys کپی میکند.
در ادامه باید خروجی زیر را ببینید:
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 key شما در حساب کاربری ریموت آپلود شده است و میتوانید وارد مرحله سوم نصب SSH-key روی سرور Ubuntu 20.04 شوید.
کپی کردن SSH-key عمومی با استفاده از SSH
اگر ابزار ssh-copy-id را ندارید ولی دسترسی SSH به یک حساب کاربری در سرور خود با استفاده از کلمه عبور را دارید، میتوانید SSH-key خود را از روش متداول SSH برای آپلود کردن SSH-key خود استفاده کنید.
میتوانید این کار را با دستور cat انجام دهید تا محتوای SSH-key داخل کامپیوتر خود را بخوانید و آن را از طریق یک اتصال SSH به سرور ریموت متصل کنید. از طرفی دیگر میتوانید مطمئن شوید که دایرکتوری ssh./~ موجود است و در حساب کاربری که از آن استفاده میکنید، دسترسیهای درستی دارد.
در ادامه میتوانید از محتوایی که در فایل authorized_key داخل دایرکتوری منتقل کردید، خروجی بگیرید. به جای جانویسی یا اوررایت (overwrite) از علامت ریدایرکت (redirect) یا همان << برای اضافه کردن محتوا استفاده کنید. با این کار میتوانید SSH-key خود را بدون از بین بردی SSH-key قبلی اضافه کنید.
صورت کامل دستور به شکل زیر است:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
در ادامه پیغام زیر خواهد آمد:
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 را بزنید.
در ادامه باید کلمه عبور حساب کاربری ریموت را وارد کنید.
[email protected]'s password:
بعد از وارد کردن کلمه عبور، محتوای id_rsa.pub key شما در آخر فایل authorized_keys حساب کاربری ریموت شما کپی میشود. بعد از این کار میتوانید وارد مرحله سوم نصب SSH-key روی سرور Ubuntu 20.04 شوید.
کپی کردن SSH-key عمومی به صورت دستی
اگر دسترسی SSH با کلمه عبور به سرور ندارید، باید پروسهای که در قسمت قبل توضیح دادیم را به صورت دستی انجام دهید. با انجام این پروسه، شما محتوای فایل id_rsa.pub خود را به فایل ssh/authorized_keys./~ دستگاه ریموت خود اضافه خواهید کرد.
برای دیدن محتوای id_rsa.pub key خود دستور زیر را وارد کنید:
cat ~/.ssh/id_rsa.pub
در ادامه شما محتوای id_rsa.pub key را خواهید دید، که چیزی شبیه به شکل زیر خواهد بود:
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-key روی یک حساب کاربری استفاده میکنید، خیلی مهم است که بدانید دایرکتوری ssh./~ باید متعلق به کاربر باشد نه به روت:
chown -R username:username ~/.ssh
در این دستور شما باید نام کاربری حسابی که SSH-key را روی آن نصب میکنید، به جای username بنویسید.
حالا میتوانید بدون احراز هویت کلمه عبور وارد سرور Ubuntu خود شوید. در ادامه به شما آموزش میدهیم که چگونه با استفاده از SSH-key در سرور Ubuntu احراز هویت کنید. با وان سنتر همراه باشید.
مرحله سوم – احراز هویت در سرور Ubuntu با استفاده از SSH-key
بعد از انجام یکی از سه پروسهای که در مرحله دوم توضیح دادیم، باید بتوانید بدون وارد کردن کلمه عبور حساب کاربری ریموت وارد هاست ریموت شوید.
پروسه اصلی ورود به هاست ریموت هم همینگونه است:
ssh username@remote_host
وقتی که برای اولین بار وارد این هاست شوید (اگه از روش آخری که در مرحله دوم توضیح دادیم، استفاده کرده باشید)، چیزی به شکل زیر خواهید دید:
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 را بزنید.
اگر برای SSH-key شخصی خود عبارت عبور تعیین نکرده باشید، بلافاصله وارد سرور خواهید شد. اما اگر در زمان ایجاد SSH-key، عبارت عبور برای SSH-key شخصی خود تعیین کرده باشید، برای ورود به سرور باید عبارت عبور را وارد کنید. توجه داشته باشید که به دلایل امنیتی نوشته شدن عبارت عبور در ترمینال سشن نشان داده نمیشود.
بعد از احراز هویت، یک شل سشن (shell session) جدید با حساب کاربری پیکربندی شده در سرور Ubuntu برای شما باز میشود.
اگر احراز هویت با SSH-key با موفقیت انجام شد، میتوانید وارد مرحله چهارم شوید؛ در این مرحله به شما آموزش خواهیم داد که چگونه با غیرفعال کردن احراز هویت کلمه عبور، امنیت سیستم خود را بالا ببرید. با وان سنتر همراه باشید.
مرحله چهارم – غیرفعال کردن احراز هویت کلمه عبور در سرور
اگر توانسته باشید که با استفاده از SSH-key و بدون کلمه عبور وارد حساب کاربری خود شوید، پیکربندی احراز هویت با SSH-key در حساب کاربری شما با موفقیت انجام شده است. البته مکانیزم احراز هویت با کلمه عبور شما همچنان فعال است که نشان میدهد هنوز سرور شما در معرض حملات brute-force قرار دارد.
قبل از انجام مراحل این قسمت، باید احراز هویت با SSH-key برای حساب کاربری روت در این سرور، پیکر بندی شده باشد. اگر هم برای حساب روت این کار را انجام نشده، برای یک حساب کاربری به غیر از روت که دسترسیهای sudo دارد، احراز هویت با SSH-key پیکر بندی شده باشد. این مرحله ورودهای با کلمه عبور را محدود میکند. بنابراین بسیار مهم است که بتوانید دسترسی مدیریتی داشته باشید.
اول مطمئن شوید که حساب کاربری ریموت شما دسترسیهای مدیریتی دارد. حالا با حساب کاربری روت یا با حساب کاربری که دسترسی sudo دارد، با استفاده از SSH-key وارد سرور ریموت شوید. بعد از ورود، فایل پیکربندی SSH daemon را باز کنید:
sudo nano /etc/ssh/sshd_config
در داخل فایل، دستوری به اسم PasswordAuthentication را پیدا کنید. این خط ممکن است که با # شروع شده باشد. این خط را با حذف # از حالت comment خارج کنید و ارزش آن را روی no تنظیم کنید. با این کار قابلیت ورود از طریق SSH با استفاده از کلمه عبور غیر فعال میشود:
. . .
PasswordAuthentication no
. . .
بعد از انجام این کار، با زدن CTRL+X فایل را ذخیره کنید و از آن خارج شوید. سپس برای تایید ذخیره فایل Y را بزنید و در آخر با زدن ENTER از nano خارج شوید. برای اینکه این تغییرات فعال شوند باید سرویس sshd را مجدد اجرا کنید:
sudo systemctl restart ssh
برای احتیاط، یک ترمینال جدید باز کنید و سرویس SSH را امتحان کنید تا از عملکرد درست آن مطمئن شوید. بعد از این کار سشن فعلی را ببنید:
ssh username@remote_host
وقتی که از عملکرد درست سرویس SSH مطمئن شدید، میتوانید همه سشنهای فعلی سرور را ببندید. از این به بعد SSH daemon در سرور Ubuntu شما فقط در صورت احراز هویت با SSH-key کار خواهد کرد. همچنین ورودهای با کلمه عبور غیرفعال شدهاند.
حالا روی سرور شما احراز هویت با SSH-key پیکربندی شده است و میتوانید بدون ارائه کلمه عبور حساب کاربری وارد سرور شوید.