نحوه تنظیم کلید های 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
بسیار دقت داشته باشید، این عمل غیرقابل بازگشت است و میتواند باعث از دست رفتن دسترسی شما به سرور شود.

بعد از این مرحله، پیام زیر نمایش داده میشود.
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:

در این مرحله باید رمز خود را وارد کنید (تایپ شما برای حفظ امنیت نشان داده نمیشود) بعد از آن دکمه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 را وارد کنید.

بعد از آنکه از شما خواسته میشود رمز عبور حساب کاربری از راه دور را وارد کنید.
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 در CentOS را بر روی سرور خود انجام دهید و به راحتی میتوانید بدون وارد کردن رمز عبور وارد سرور بشوید. این روش امنیت سرور شما را افزایش داده و از حملات در برابر شما جلوگیری خواهد کرد. اگر تمایل به یادگیری بیشتر در مورد SSH ها را دارید و میخواهید قابلیتهای بیشتری را کسب کنید پیشنهاد میکنیم راهنمای مبانی کار با ssh را از دست ندهید.