SSH، یک پروتکل رمزنگاری شده است که برای مدیریت و ارتباط با سرورها استفاده میشود. هنگام کار با یک سرور مجازی لینوکس اوبونتو، احتمالاً اکثر وقت خود را در یک سشن ترمینال که از طریق پروتکل SSH به سرور متصل شدهاید صرف خواهید کرد. در این راهنما، ما به نحوه تنظیم کلیدهای SSH در اوبونتو 20.04 تمرکز خواهیم کرد. کلیدهای SSH راهی امن برای ورود به سرور شما فراهم میکنند.
نحوه تنظیم کلیدهای SSH در اوبونتو 20.04
مرحله اول: ایجاد جفت کلید
مرحله اول نحوه تنظیم کلیدهای SSH در اوبونتو، ایجاد جفت کلید (Key Pair) روی دستگاه کلاینت (معمولاً کامپیوتر شما) است:
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):
با فشردن دکمه Enter، جفت کلید را در ساب دایرکتوری .ssh/ دایرکتوری اصلی ذخیره کنید، یا مسیر جایگزینی مشخص کنید.
اگر قبلاً یک جفت از کلیدهای SSH در اوبونتو ایجاد کرده بودید، ممکن است به این خروجی برخورد کنید:
Output /home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?
اگر تصمیم به بازنویسی کلید در دیسک دارید، دیگر نمیتوانید با استفاده از کلید قبلی احراز هویت کنید. هنگام انتخاب “y” بسیار دقت کنید، زیرا این فرایند از نظر اثرات نابودکننده که قابل بازگشت نیستند، بسیار حساس است.
سپس باید به این سوال پاسخ دهید:
Output Enter passphrase (empty for no passphrase):
در اینجا شما به صورت اختیاری میتوانید یک رمز عبور امن وارد کنید که بسیار توصیه میشود. یک رمز عبور اضافی لایهای جدید از امنیت اضافه میکند تا از ورود کاربران غیرمجاز به سیستم جلوگیری شود.
سپس باید خروجی مشابه زیر را مشاهده کنید:
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 مبتنی بر رمز عبور به سرور خود داشته باشید.
برای استفاده از این ابزار، شما میتوانید به هاست ریموتی که میخواهید به آن متصل شوید و حساب کاربری که دسترسی 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 در حساب کاربری لوکال شما انجام خواهد داد. هنگامی که کلید را پیدا کند، از شما برای رمز عبور حساب کاربری ریموتی که میخواهید کلید عمومی SSH شما به آن کپی شود، از شما سوال خواهد کرد:
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 روی حساب کاربری ریموتی به نام authorized_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 وجود دارد و دارای مجوزهای صحیح تحت نظر حساب کاربری مورد استفاده ما قرار دارد.
محتوایی را که به فایلی به نام authorized_keys منتقل کردیم را می توانیم در دایرکتوری ~/.ssh خروجی بگیریم. ما از نماد تغییر مسیر >> استفاده میکنیم تا محتوا را به صورت الحاقی به فایل اضافه کنیم و محتواهای قبلی را از بین نبریم. این کار به ما امکان میدهد کلیدها را بدون از بین بردن کلیدهای قبلی اضافه کنیم.
دستور کامل به صورت زیر است:
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 را فشار دهید.
سپس، شما وادار می شوید تا رمز عبور حساب کاربری ریموت خود را که میخواهید کلید عمومی id_rsa.pub خود را به آن کپی کنید، وارد کنید:
Output [email protected]'s password:
پس از وارد کردن رمزعبور، محتوای کلید عمومی id_rsa.pub شما به انتهای فایلِ authorized_keys حساب کاربری ریموت کپی خواهد شد. اگر این عملیات موفقیتآمیز بود، به مرحله 3 ادامه دهید.
کپی کردن کلید عمومی به صورت دستی
اگر دسترسی SSH مبتنی بر رمز عبور به سرور خود ندارید، شما باید فرآیند فوق را به صورت دستی انجام دهید.
ما به صورت دستی محتوای کلید id_rsa.pub را به فایل authorized_keys در مسیر ~/.ssh به دستگاه ریموت اضافه میکنیم.
برای نمایش محتوای کلید 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 به user تعلق بگیرد و نه root:
chown -R sammy:sammy ~/.ssh
در این آموزش نام کاربری ما sammy است، اما شما باید نام کاربری مناسب خود را به جای sammy در دستور بالا قرار دهید.
حالا میتوانیم با سرور Ubuntu خود احراز هویت بدون نیاز به رمز عبور را انجام دهیم.
مرحله 3: احراز هویت در سرور Ubuntu با استفاده از کلیدهای SSH
اگر یکی از روشهای فوق را با موفقیت انجام دادهاید، باید بتوانید بدون نیاز به وارد کردن رمز عبور حساب کاربری ریموت، وارد سرور ریموت شوید.
فرآیند اصلی به صورت زیر است:
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 را فشار دهید تا ادامه یابد.
اگر هنگام ایجاد کلید خصوصی، رمز عبور برای آن نگذاشتید، به طور معمول وارد حساب خود می شوید، اما اگر رمز عبور برای کلید خصوصی خود انتخاب کرده اید هنگام ورود از شما رمز عبور را می پرسد.
اگر احراز هویت مبتنی بر کلید موفقیتآمیز بود، ادامه دهید و یاد بگیرید که چگونه سیستم خود را با غیرفعال کردن احراز هویت رمز عبور ایمنتر کنید.
مرحله 4: غیرفعال کردن احراز هویت رمزعبور در سرور شما
اگر توانستهاید با استفاده از SSH بدون نیاز به رمز عبور، به حساب کاربریتان وارد شوید، با موفقیت احراز هویت مبتنی بر کلیدهای SSH را به حساب کاربریتان پیکربندی کردهاید. با این حال، مکانیزم احراز هویت مبتنی بر رمزعبور هنوز فعال است، به این معنا که سرور شما هنوز نسبت به حملات بروت فورس (brute-force) آسیبپذیر است.
قبل از انجام مراحل این بخش، مطمئن شوید که احراز هویت مبتنی بر کلیدهای SSH برای حساب کاربری root در این سرور پیکربندی شده است و یا بهتر است که احراز هویت مبتنی بر کلیدهای SSH برای یک حساب کاربری غیر root با دسترسی sudo در این سرور پیکربندی شده باشد. این مرحله روش های مبتنی بر رمز عبور را مسدود خواهد کرد، بنابراین مطمئن شدن از دسترسی مدیریتی هنوز میتواند حیاتی باشد.
بعد از تأیید داشتن دسترسی مدیریتی به حساب کاربری ریموت خود، با استفاده از کلیدهای SSH وارد سرور ریموت شوید، یا به عنوان root یا با یک حساب کاربری دارای دسترسی sudo. سپس، فایل پیکربندی SSH daemon’s را باز کنید.
sudo nano /etc/ssh/sshd_config
در داخل فایل، به دنبال دستورالعملی به نام PasswordAuthentication بگردید. این خط ممکن است با علامت # در ابتدای خط کامنت شده باشد. با حذف علامت #، این خط را با حذف # از حالت کامنت در بیارید و مقدار آن را به no تنظیم کنید. این کار باعث غیرفعال شدن امکان ورود از طریق SSH با استفاده از رمز عبور حساب کاربری میشود:
/etc/ssh/sshd_config . . . PasswordAuthentication no . . .
پس از انجام تغییرات، فایل را ذخیره کرده و بستهاید. این کار را با فشردن CTRL+X، سپس Y برای تأیید ذخیره کردن فایل و در آخر ENTER برای خروج از نانو (nano) انجام دهید. برای اعمال این تغییرات، به ریست sshd نیاز داریم:
sudo systemctl restart ssh
به عنوان اقدام ایمن، یک پنجره ترمینال جدید باز کنید و تست کنید که سرویس SSH به درستی کار میکند، سپس نشستهای فعلی سرور را ببندید:
ssh username@remote_host
با تأیید عملکرد صحیح سرویس SSH، دیگر میتوانید تمام سشنهای فعلی سرور را با خیال راحت ببندید.
اکنون SSH daemon سرور Ubuntu شما تنها به احراز هویت مبتنی بر کلیدهای SSH در اوبونتو پاسخ میدهد. ورود با رمزعبور غیرفعال شده است.
جمع بندی:
اکنون شما باید احراز هویت مبتنی بر کلیدهای SSH را بر روی سرور خود پیکربندی کرده باشید، که به شما امکان ورود بدون نیاز به ارائه رمز عبور حساب کاربری میدهد. در این مطلب به هرآنچه باید در رابطه با تنظیم کلیدهای SSH در اوبونتو بدانید پرداختیم و نحوه انجام این کار را به صورت مرحله به مرحله انجام دهیم.