تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه تنظیم کلید های SSH در CentOS


۲۳ بهمن ۱۴۰۳

SSH یا (Secure Shell) یکی از پروتکل‌های رمزنگاری شده است که برای مدیریت و ارتباط با سرور‌ها از آن استفاده می‌شود. هنگام کار با یک سرور CentOS در بیشتر اوقات از طریق SSH به سرور متصل شده است و در یک محیط خط فرمان(ترمینال) فعالیت خواهید کرد.

در این مقاله از لیارا به نحوه تنظیم کلیدهای SSH برای یک سرور CentOS خواهیم پرداخت. کلید‌های SSH یکی از ساده و امن ترین روش‌هایی است که به همه کاربران برای تنظیم کلید های SSH در CentOS توصیه می‌شود.

👈🏻بیشتر بدانید: نحوه تنظیم کلیدهای SSH در سرور مجازی اوبونتو

مراحل تنظیم کلید های SSH در CentOS

  • ساخت کلید RSA
  • کپی کردن کلید عمومی به سرور CentOS
  • ورود به سرور با استفاده از کلیدی‌های SSH
  • غیر فعال کردن ورود با مرز عبور برای افزایش امنیت

مرحله اول: ساخت کلید RSA

در اولین مرحله در کامپیوتر شخصی خود (یا هر دستگاهی که قرار است با آن به سرور متصل شوید) یک جفت کلید SSH ایجاد کنید.

ssh-keygen

به صورت پیش فرض، دستور ssh-keygen یک جفت کلید RSA با اندازه 2048 بیتی را ایجاد می‌کند که برای بیشتر موارد امنیت کافی را دارد. با این حال، در صورت نیاز می‌توانید از گزینه -b 4096 استفاده کنید تا بتوانید کلیدی قوی‌تر با اندازه 4096 بیتی را بسازید.

بعد از اجرای این دستورات، پیام زیر را مشاهده خواهید کرد.

Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

برای ذخیره سازی جفت کلید در پوشه .ssh/ در دایرکتوری خود، کافی است که دکمهEnter را فشار دهید. در مواقعی که بخواهید کلید‌ها را در مسیر دیگر ذخیره‌سازی کنید، می‌توانید یک مسیر جایگزین را برای آن مشخص کنید. اگر در قبل جفت کلید SSH را ایجاد کرده باشید پیام زیر را مشاهده خواهید کرد.

Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

اگر قصد بازنویسی یا ویرایش کلید‌های قبلی را دارید، دیگر نمی‌توانید از آن برای احراز هویت استفاده کنید. بنابراین در هنگام انتخاب گزینهYes بسیار دقت داشته باشید، این عمل غیرقابل بازگشت است و می‌تواند باعث از دست رفتن دسترسی شما به سرور شود.

مراحل تنظیم کلید های SSH در CentOS

بعد از این مرحله، پیام زیر نمایش داده می‌شود.

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:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

در حال حاضر شما یک کلید عمومی و یک کلید خصوصی دارید که می‌توانید از آن‌ها برای ورود امن به سرور استفاده کنید.

مرحله دوم: کپی کردن کلید عمومی به سرور CentOS

برای انتقال سریع کلید عمومی در سرور CentOS، بهترین روش استفاده از ابزار ssh-copy-id است. اگر این روش در دسترس شما وجود داشته باشد و از آن استفاده کنید بسیار راحت و امن برای شما خواهد بود. اگر این ابزار در دسترس شما نباشد، می‌توانید از دو روش دیگر (کپی کردن از طریق SSH، با رمز عبور یا کپی کردن دستی کلید) استفاده کنید.

کپی کلید عمومی با استفاده از ssh-copy-id

ابزار ssh-copy-id به‌صورت پیش فرض در اکثر سیستم‌ها موجود است و امکان دارد که در سیستم شما هم وجود داشته باشد. برای استفاده کردن از این روش باید قبل از آن با رمز عبور خود به سرور متصل شده باشید.

برای استفاده از این ابزار، کافی است که آدرس سرور با نام کاربری‌تان را وارد کنید. این کار باعث می‌شود تا کلید‌های عمومی نیز به حساب کاربری مورد نظر شما بر روی سرور انتقال داده شود.

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 را فشار دهید.

در مرحله بعدی ابزار ssh-copy-id حساب کاربری شما را برای پیدا کردن کلید 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:
کلید عمومی را در سرور CentOS کپی کنید

در این مرحله باید رمز خود را وارد کنید (تایپ شما برای حفظ امنیت نشان داده نمی‌شود) بعد از آن دکمهEnter را بزنید. ابزار ssh-copy-id با استفاده از رمز عبور شما به حساب کاربری سرور متصل می‌شود و بعد از آن کلید عمومی شما را از فایل ~/.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 را وارد کنید.

کپی کلید عمومی با استفاده از SSH

بعد از آنکه از شما خواسته می‌شود رمز عبور حساب کاربری از راه دور را وارد کنید.

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== sammy@host

با استفاده از هر روشی که برای وارد شدن به سرور از راه دور دارید به آن وارد شوید. بعد از ورود به حساب کاربری خود روی سرور، باید مطمئن شوید که پوشه~/.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 متعلق به همان کاربر باشد و نه به حساب root:

chown -R sammy:sammy ~/.ssh

در این این بخش نام کاربری ما summy است که باید شما نام کاربری خود را در دستور بالا وارد کنید. در نتیجه می‌توانید با استفاده از احراز هویت با کلید، به سرور CentOS وارد شوید.

مرحله سوم: ورود به سرور با استفاده از کلیدی های 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 را بزنید.

اگر زمان ساخت جفت کلیدها در مرحله 1، رمز عبور وارد نکرده باشید، بلافاصله وارد سیستم خواهید شد. اگر رمز عبور وارد کرده باشید، از شما خواسته می‌شود که آن را وارد کنید. پس از تایید، یک شل جدید برای شما باز می‌شود و به حساب کاربری تنظیم شده در سرور CentOS متصل خواهید شد.

اگر احراز هویت با کلید موفقیت‌آمیز بود، می‌توانید ادامه دهید و نحوه افزایش امنیت سیستم خود را با غیرفعال کردن احراز هویت بر پایه رمز عبور را ادامه دهید.

مرحله چهارم: غیر فعال کردن ورود با مرز عبور برای افزایش امنیت

اگر توانستید با استفاده از کلید SSH به حساب کاربری خود وارد شوید و نیازی به وارد کردن رمز عبور را نداشته‌اید، به این معنا است که احراز هویت شما با کلید SSH به‌درستی انجام شده است. اما همچنان امکان ورود با رمز عبور برای شما فعال است که به سرور اجازه می‌دهد تا در معرض حملات brute-force قرار بگیرد.

قبل از انجام این مرحله، ابتدا اطمینان حاصل کنید که برای حساب root خود از سرور احراز هویت با کلید SSH استفاده کرده‌اید یا یک حساب کاربری غیر از root را با دسترسی sudo برای انجام عملیات اداری در نظر گرفته‌اید. در این مرحله، ورود با رمز عبور را غیرفعال می‌کند، بنابراین ابتدا اطمینان حاصل کنید که هنوز امکان دسترسی به مدیریت سرور را دارید یا خیر.

غیر فعال کردن ورود با مرز عبور برای افزایش امنیت

پس از آنکه اطمینان حاصل کردید دسترسی اداری را در اختیار دارید، با استفاده از کلید SSH به سرور خود وارد شوید، چه به‌ عنوان root و چه با حساب کاربری که دسترسی sudo دارد. سپس، فایل تنظیمات سرویس SSH را باز کنید:

sudo vi /etc/ssh/sshd_config

در فایل به دنبال دستور PasswordAuthentication بگردید. در این خط امکان دارد که علامت # کانت شده باشد. برای رفتن به حالت ویرایشگرvi کلیدi را فشار دهید. بعد از آن خط مربوط به آن را از حالت کامنت خارج کنید و مقدار آن را به no تغییر دهید. این امر امکان ورود به سیستم با استفاده از رمز عبور SSH را برای شما غیرفعال می‌کند.

...
PasswordAuthentication no
...

پس از ایجاد و انجام تغییرات کلید ESC را فشار دهید و سپس دستور wq: را وارد کنید تا تمامی تغییرات ذخیره شود. حال می‌توانید از ویرایشگر خارج شوید. برای اعمل این تغییرات، باید سرویسSSH را ریستارت (Restart) کنید.

sudo systemctl restart sshd

برای احتیاط یک پنجره ترمینال دیگری را باز کنید و قبل از بسته شدن پنجره فعلی، مطمئن شوید که سرویس SSH به درستی کار کند.

بعد از اینکه مطمئن شدید سرویس SSH به درستی کار می‌کند، می‌توانید با خیال راحت تمام جلسات فعلی سرور را ببندید.

ssh username@remote_host

اکنون، سرویس SSH سرور CentOS شما فقط از طریق کلیدهای SSH وارد می‌شود و دسترسی با استفاده از رمز عبور به طور کامل غیرفعال شده است.

بیشتر بخوانید: مبانی SSH: کار با سرور‌ها، کلاینت‌ها و کلیدهای SSH

ورود به سرور با استفاده از کلیدی های SSH

جمع بندی

در نتیجه شما آموختید که چگونه می‌توان تنظیم کلید‌های SSH در CentOS را بر روی سرور خود انجام دهید و به راحتی می‌توانید بدون وارد کردن رمز عبور وارد سرور بشوید. این روش امنیت سرور شما را افزایش داده و از حملات در برابر شما جلوگیری خواهد کرد. اگر تمایل به یادگیری بیشتر در مورد SSH ها را دارید و می‌خواهید قابلیت‌های بیشتری را کسب کنید پیشنهاد می‌کنیم راهنمای مبانی کار با ssh را از دست ندهید.