مقدمه
در این راهنما، روی تنظیم کلیدهای SSH برای سرور CentOS تمرکز داریم. کلیدهای SSH روشی ساده و امن برای ورود به سرور شما ارائه میدهند و برای همه کاربران توصیه میشوند.
SSH یا Secure Shell یک پروتکل رمزنگاریشده برای مدیریت و ارتباط با سرورها است. وقتی با سرور CentOS کار میکنید، احتمالاً بیشتر زمان خود را در یک جلسه ترمینال با اتصال SSH به سرور سپری خواهید کرد.
مراحل تنظیم کلیدهای SSH در CentOS
- ایجاد جفت کلید RSA
- کپی کردن کلید عمومی به سرور CentOS
- ورود به سرور CentOS با استفاده از کلیدهای SSH
- غیرفعال کردن احراز هویت مبتنی بر رمز عبور در سرور
مرحله اول: ایجاد جفت کلید RSA
اولین قدم، ایجاد یک جفت کلید در ماشین کلاینت (معمولاً کامپیوتر محلی شما) است:
ssh-keygen
بهصورت پیشفرض، دستور ssh-keygen یک جفت کلید RSA با طول 2048 بیت ایجاد میکند که برای اکثر موارد به اندازه کافی امن است. در صورت تمایل، میتوانید با پرچم -b 4096 یک کلید 4096 بیتی بزرگتر ایجاد کنید.
پس از وارد کردن دستور، باید خروجی زیر را ببینید:
Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):
کلید Enter را فشار دهید تا جفت کلید در زیرپوشه .ssh/ در دایرکتوری خانگی شما ذخیره شود، یا مسیر دیگری مشخص کنید.
اگر قبلاً جفت کلید SSH ایجاد کرده باشید، ممکن است این پیام را ببینید:
/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?
اگر کلید موجود را بازنویسی کنید، دیگر نمیتوانید با کلید قبلی احراز هویت کنید. هنگام انتخاب گزینه «بله»، بسیار مراقب باشید، زیرا این فرآیند غیرقابل بازگشت است.
سپس باید این پیام را ببینید:
Enter passphrase (empty for no passphrase):
در اینجا میتوانید بهصورت اختیاری یک passphrase امن وارد کنید که به شدت توصیه میشود. این لایه امنیتی اضافی از ورود غیرمجاز جلوگیری میکند.
بعد از آن، باید خروجی زیر را مشاهده کنید:
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=++. | +-----------------+
اکنون یک کلید عمومی و خصوصی دارید که میتوانید برای احراز هویت استفاده کنید. قدم بعدی، انتقال کلید عمومی به سرور برای استفاده از احراز هویت مبتنی بر کلید SSH است.
مرحله دوم: کپی کردن کلید عمومی به سرور CentOS
سریعترین راه برای کپی کلید عمومی به هاست CentOS استفاده از ابزار ssh-copy-id است. این روش در صورت دسترسی به شدت توصیه میشود. اگر ssh-copy-id روی ماشین کلاینت شما موجود نیست، میتوانید از یکی از دو روش جایگزین (کپی با SSH مبتنی بر رمز عبور یا کپی دستی) استفاده کنید.
کپی کلید عمومی با ssh-copy-id
ابزار ssh-copy-id در بسیاری از سیستمعاملها بهصورت پیشفرض موجود است. برای این روش، باید دسترسی SSH مبتنی بر رمز عبور به سرور داشته باشید.
برای استفاده، هاست ریموت و حساب کاربریای که دسترسی SSH مبتنی بر رمز عبور دارید را مشخص کنید:
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 را فشار دهید.
سپس، ابزار کلید 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 username@203.0.113.1's password:
رمز عبور را وارد کنید (به دلایل امنیتی نمایش داده نمیشود) و Enter را فشار دهید. ابزار با رمز عبور به حساب ریموت متصل شده و محتوای کلید ~/.ssh/id_rsa.pub را به فایل ~/.ssh/authorized_keys کپی میکند.
باید این خروجی را ببینید:
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 وجود دارد و مجوزهای صحیحی دارد. سپس محتوای انتقالیافته را به فایل 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"
ممکن است این پیام را ببینید:
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 را فشار دهید. سپس رمز عبور حساب ریموت را وارد کنید:
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
محتوای کلید نمایش داده میشود، چیزی شبیه به این:
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
محتوای فایل 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
اگر از حساب root برای تنظیم کلیدها برای یک کاربر استفاده میکنید، دایرکتوری ~/.ssh باید متعلق به کاربر باشد:
chown -R sammy:sammy ~/.ssh
کاربر ما در این آموزش sammy است، اما نام کاربری مناسب را جایگزین کنید.
مرحله سوم: ورود به سرور CentOS با کلیدهای 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 را فشار دهید. اگر در مرحله اول passphrase وارد نکرده باشید، بلافاصله وارد میشوید. اگر passphrase وارد کرده باشید، باید آن را وارد کنید. پس از احراز هویت، یک جلسه شل جدید باز میشود.
اگر احراز هویت مبتنی بر کلید موفق بود، ادامه دهید تا احراز هویت مبتنی بر رمز عبور را غیرفعال کنید.
مرحله چهارم: غیرفعال کردن احراز هویت مبتنی بر رمز عبور
اگر بدون رمز عبور وارد شدید، احراز هویت مبتنی بر کلید SSH را با موفقیت پیکربندی کردید. اما احراز هویت مبتنی بر رمز عبور هنوز فعال است و سرور شما در برابر حملات brute-force آسیبپذیر است.
قبل از ادامه، مطمئن شوید که احراز هویت مبتنی بر کلید برای حساب root یا حسابی با امتیازات sudo پیکربندی شده است. این مرحله ورود مبتنی بر رمز را غیرفعال میکند.
با کلیدهای SSH وارد سرور شوید و فایل پیکربندی دیمن SSH را باز کنید:
sudo vi /etc/ssh/sshd_config
دایرکتیو PasswordAuthentication را پیدا کنید. ممکن است با # کامنت شده باشد. کلید i را فشار دهید، خط را از حالت کامنت خارج کرده و مقدار را به no تنظیم کنید:
... PasswordAuthentication no ...
کلید ESC را فشار دهید و :wq را تایپ کنید تا تغییرات ذخیره شده و خارج شوید. سپس سرویس sshd را ریاستارت کنید:
sudo systemctl restart sshd
برای احتیاط، در یک ترمینال جدید بررسی کنید که سرویس SSH کار میکند:
ssh username@remote_host
پس از تأیید، میتوانید جلسات سرور را ببندید. دیمن SSH اکنون فقط به کلیدهای SSH پاسخ میدهد.
نتیجهگیری
اکنون احراز هویت مبتنی بر کلید SSH روی سرور شما پیکربندی شده است و میتوانید بدون رمز عبور وارد شوید.
برای اطلاعات بیشتر درباره SSH، به راهنمای SSH Essentials مراجعه کنید.
نکته: در صورت بروز مشکل، از پرچم -vv در دستور SSH برای حالت verbose استفاده کنید و ممکن است بخواهید فایل .ssh/config را برای اطمینان از انتخاب کلید خصوصی مناسب اضافه کنید.