نحوه پیکربندی احراز هویت مبتنی بر کلید SSH در سرور لینوکس
SSH یا پوسته امن ، یک پروتکل رمزگذاری شده است که برای مدیریت و ارتباط با سرورها استفاده می شود. هنگام کار با یک سرور لینوکس ، ممکن است بیشتر اوقات خود را در یک سشن ترمینال متصل از طریق SSH به سرور خود صرف کنید.
در حالی که چند روش مختلف برای ورود به یک سرور SSH وجود دارد ، در این راهنما ، ما بر تنظیم کلیدهای SSH تمرکز خواهیم کرد. کلیدهای SSH راهی بسیار امن برای ورود به سرور شما فراهم می کنند. به همین دلیل ، این روشی است که ما برای همه کاربران توصیه می کنیم.
کلیدهای SSH چگونه کار می کنند؟
یک سرور SSH می تواند با استفاده از روش های مختلف ، مشتری را تأیید کند. ابتدایی ترین آنها تأیید اعتبار گذرواژه است که استفاده از آن آسان است اما ایمن ترین نیست.
اگرچه گذرواژه ها به روشی ایمن به سرور ارسال می شوند ، اما به طور کلی پیچیده و طولانی نیستند تا در برابر مهاجمان مداوم و مداوم مقاومت کنند. قدرت پردازش مدرن همراه با اسکریپت های خودکار ، مجوز بی رحمانه یک حساب محافظت شده با رمز عبور را بسیار امکان پذیر می کند. اگرچه روشهای دیگری برای افزودن امنیت اضافی (fail2ban و غیره) وجود دارد ، اما ثابت می شود که کلیدهای SSH یک گزینه مطمئن هستند.
جفت کلیدهای SSH دو کلید امن رمزنگاری هستند که می توانند برای احراز هویت سرویس گیرنده به یک سرور SSH مورد استفاده قرار گیرند. هر جفت کلید از یک کلید عمومی و یک کلید خصوصی تشکیل شده است.
کلید خصوصی توسط مشتری حفظ می شود و باید کاملاً مخفی نگه داشته شود. هرگونه مصالحه با کلید خصوصی به مهاجم اجازه می دهد بدون احراز هویت اضافی ، به سرورهایی که با کلید عمومی مرتبط پیکربندی شده اند وارد شود. به عنوان یک اقدام احتیاطی اضافی ، می توان کلید را با عبارت عبور روی دیسک رمزگذاری کرد.
کلید عمومی مرتبط می تواند آزادانه و بدون عواقب منفی به اشتراک گذاشته شود. از کلید عمومی می توان برای رمزگذاری پیام هایی استفاده کرد که فقط کلید خصوصی می تواند رمزگشایی کند. این ویژگی به عنوان روشی برای احراز هویت با استفاده از جفت کلید به کار می رود.
کلید عمومی در یک سرور راه دور بارگذاری می شود که می خواهید بتوانید با SSH وارد آن شوید. کلید به یک پرونده خاص در حساب کاربری اضافه می شود که به آن وارد می شوید و در مسیر ~/.ssh/authorized_keys
قرار میگیرد.
هنگامی که یک مشتری سعی می کند با استفاده از کلیدهای SSH احراز هویت شود ، سرور می تواند مشتری را بررسی کند که آیا کلید خصوصی را در اختیار دارد یا خیر. اگر مشتری بتواند ثابت کند که کلید خصوصی را در اختیار دارد ، یک جلسه shell ایجاد می شود یا دستور درخواستی اجرا می شود.
مرحله 1 - ایجاد کلیدهای SSH
اولین قدم برای پیکربندی احراز هویت کلید SSH برای سرور ، ایجاد یک جفت کلید SSH در رایانه محلی است.
برای این کار می توانیم از یک ابزار ویژه به نام ssh-keygen
استفاده کنیم که به همراه مجموعه استاندارد OpenSSH ارائه می شود. به طور پیش فرض ، این یک جفت کلید 3072 بیتی RSA ایجاد می کند.
در رایانه محلی خود ، با تایپ کردن یک جفت کلید SSH ایجاد کنید:
$ ssh-keygen
# OUTPUT
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):
این ابزار از شما می خواهد مکانی را برای کلیدهای تولید شده انتخاب کنید. به طور پیش فرض ، کلیدها در دایرکتوری ~ / .ssh
در دایرکتوری home کاربر ذخیره می شوند. کلید خصوصی id_rsa و کلید عمومی مرتبط id_rsa.pub نامیده می شوند.
معمولاً بهتر است در این مرحله با مکان پیش فرض همراه باشید. با انجام این کار به مشتری SSH شما اجازه می دهد کلیدهای SSH شما را هنگام تأیید اعتبار به طور خودکار پیدا کند. اگر می خواهید یک مسیر غیراستاندارد انتخاب کنید ، اینجا تایپ کنید، در غیر این صورت ، ENTER را فشار دهید تا پیش فرض را بپذیرید.
اگر قبلاً یک جفت کلید SSH ایجاد کرده اید ، ممکن است یک اعلان مشاهده کنید که به این شکل است:
# OUTPUT
/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?
اگر انتخاب کنید که کلید را روی دیسک بازنویسی کنید ، دیگر نمی توانید با استفاده از کلید قبلی احراز هویت کنید. هنگام انتخاب بله بسیار مراقب باشید ، زیرا این یک روند مخرب است که قابل برگشت نیست.
# OUTPUT
Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
در مرحله بعدی ، از شما خواسته می شود که یک عبارت عبور برای کلید وارد کنید. این یک عبارت عبور اختیاری است که می تواند برای رمزگذاری پرونده کلید خصوصی روی دیسک استفاده شود.
شاید از خود بپرسید که اگر همچنان به وارد کردن عبارت عبور نیاز دارید ، کلید SSH چه مزایایی را برای شما فراهم می کند. برخی از مزایا عبارتند از:
- کلید خصوصی SSH (بخشی که می تواند با عبارت عبور محافظت شود) هرگز در شبکه نمایش داده نمی شود. عبارت عبور فقط برای رمزگشایی کلید در ماشین محلی استفاده می شود. این بدان معنی است که brute force مبتنی بر شبکه در برابر عبارت عبور امکان پذیر نیست.
- کلید خصوصی در یک فهرست محدود نگهداری می شود. مشتری SSH کلیدهای خصوصی را که در فهرست های محدود نگهداری نمی شوند ، تشخیص نخواهد داد. کلید نیز باید دارای مجوزهای محدود باشد (فقط خواندن و نوشتن فقط برای مالک در دسترس است). این بدان معناست که سایر کاربران موجود در سیستم نمی توانند اسنپ کنند.
- هر مهاجمی که بخواهد رمزعبور کلید خصوصی SSH را شکست ، باید از قبل به سیستم دسترسی داشته باشد. این بدان معناست که آنها از قبل به حساب کاربری شما یا حساب ریشه دسترسی خواهند داشت. اگر در این موقعیت قرار دارید ، عبارت عبور می تواند از ورود سریع مهاجم به سایر سرورهای شما جلوگیری کند. امیدوارم این زمان برای ایجاد و پیاده سازی یک جفت کلید جدید SSH و حذف دسترسی از کلید به خطر افتاده به شما فرصت دهد.
از آنجا که کلید خصوصی هرگز در معرض شبکه قرار نمی گیرد و از طریق مجوزهای پرونده محافظت می شود ، این فایل هرگز به غیر از شما (و کاربر root) قابل دسترسی نیست. عبارت عبور به عنوان یک لایه محافظت اضافی در صورت به خطر افتادن این شرایط عمل می کند.
passphrase یک افزودنی اختیاری است. اگر یکی را وارد کنید ، باید هر بار که از این کلید استفاده می کنید آن را تهیه کنید (مگر اینکه از نرم افزار عامل SSH که کلید رمزگشایی شده را ذخیره می کند) استفاده کنید. ما توصیه می کنیم از یک عبارت عبور استفاده کنید ، اما اگر نمی خواهید یک عبارت عبور تنظیم کنید ، می توانید ENTER را فشار دهید تا این درخواست را دور بزنید.
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CAjsV9M/tt5skazroTc1ZRGCBz+kGtYUIPhRvvZJYBs username@hostname
The key's randomart image is:
+---[RSA 3072]----+
|o ..oo.++o .. |
| o o +o.o.+... |
|. . + oE.o.o . |
| . . oo.B+ .o |
| . .=S.+ + |
| . o..* |
| .+= o |
| .=.+ |
| .oo+ |
+----[SHA256]-----+
اکنون یک کلید عمومی و خصوصی دارید که می توانید برای تأیید اعتبار استفاده کنید. مرحله بعدی قرار دادن کلید عمومی بر روی سرور خود است تا بتوانید از اعتبار سنجی کلید SSH برای ورود به سیستم استفاده کنید.
مرحله 2 - کپی کردن کلید عمومی SSH در سرور خود
چندین روش برای بارگذاری کلید عمومی خود در سرور SSH از راه دور وجود دارد. روشی که استفاده می کنید بستگی زیادی به ابزارهای موجود و جزئیات پیکربندی فعلی شما دارد.
روش های زیر همه نتیجه نهایی یکسانی دارند. ابتدا ساده ترین و خودکارترین روش شرح داده شده است و روشهایی که از آن پیروی می کنند هرکدام به مراحل دستی اضافی نیاز دارند. فقط درصورتی که قادر به استفاده از روشهای قبلی نیستید باید این موارد را دنبال کنید.
کپی کردن کلید عمومی خود با استفاده از ssh-copy-id
ساده ترین راه برای کپی کردن کلید عمومی خود در یک سرور موجود ، استفاده از ابزاری به نام ssh-copy-id است. به دلیل سادگی ، این روش در صورت وجود توصیه می شود.
ابزار ssh-copy-id در بسیاری از توزیع ها در بسته های OpenSSH گنجانده شده است ، بنابراین ممکن است از قبل آن را در سیستم محلی خود داشته باشید. برای کارایی این روش ، در حال حاضر باید به 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
این بدان معنی است که رایانه محلی شما میزبان از راه دور را تشخیص نمی دهد. این اولین باری است که به یک میزبان جدید متصل می شوید. بله را تایپ کنید و برای ادامه 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
شما را در فایلی در فهرست remote / .ssh
حساب کاربری از راه دور به نام مجاز_کلیک ها کپی می کند.
خروجی را مشاهده خواهید کرد که به این شکل است:
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 در دسترس نیست ، اما به SSH مبتنی بر رمز عبور به یک حساب در سرور خود دسترسی دارید ، می توانید کلیدهای خود را با استفاده از یک روش معمول SSH بارگذاری کنید.
ما می توانیم این کار را با خروجی دادن محتوای کلید عمومی SSH بر روی رایانه محلی خود و انتقال آن از طریق اتصال SSH به سرور از راه دور انجام دهیم. در طرف دیگر ، می توانیم اطمینان حاصل کنیم که پوشه ~ / .ssh در زیر حسابی که ما از آن استفاده می کنیم وجود دارد و سپس محتوایی را که ما آن را لوله کردیم ، به پرونده ای به نام مجاز_کلیدهای موجود در این فهرست منتقل می کنیم.
ما برای پیوستن محتوا به جای رونویسی از نماد >> استفاده خواهیم کرد. با این کار می توانیم کلیدها را بدون تخریب کلیدهای قبلی اضافه کنیم.
دستور کامل به صورت زیر خواهد بود:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.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 را فشار دهید.
پس از آن ، از شما رمز ورود حسابی که می خواهید به آن متصل شوید از شما خواسته می شود:
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+tXfJ7mIrKNxOOwxIxvcBF8P
XSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0
OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6N
NzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAI
nVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL
/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U
/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8
/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== username@hostname
با استفاده از هر روشی که در اختیار دارید به میزبان از راه دور خود دسترسی پیدا کنید. این ممکن است یک کنسول تحت وب باشد که توسط ارائه دهنده زیرساخت شما ارائه شده است.
پس از دسترسی به حساب خود در سرور راه دور ، باید از ایجاد دایرکتوری / .ssh اطمینان حاصل کنید. در صورت لزوم ، این دستور دایرکتوری را ایجاد می کند یا اگر از قبل موجود باشد کاری انجام نمی دهد:
mkdir -p ~/.ssh
اکنون ، می توانید فایل authorized_keys
را در این فهرست ایجاد یا اصلاح کنید. با استفاده از این می توانید محتویات پرونده id_rsa.pub
خود را به انتهای پرونده مجاز_ کلیدها اضافه کنید ، در صورت لزوم آن را ایجاد کنید:
echo public_key_string >> ~/.ssh/authorized_keys
در دستور بالا ، public_key_string
را با خروجی دستور cat ~ / .ssh / id_rsa.pub
که روی سیستم محلی خود اجرا کرده اید جایگزین کنید. باید با ssh-rsa AAAA ...
یا موارد مشابه شروع شود.
اگر این کار کرد ، می توانید برای آزمایش احراز هویت جدید SSH مبتنی بر کلید خود اقدام کنید.
مرحله 3 - احراز هویت به سرور خود با استفاده از کلیدهای 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 را برای یک حساب در این سرور با دسترسی sudo پیکربندی کرده اید. این مرحله ورودهای مبتنی بر رمز عبور را قفل می کند ، بنابراین اطمینان از اینکه همچنان می توانید دسترسی اداری داشته باشید ضروری است.
پس از صحت شرایط فوق ، با کلیدهای SSH به سرور راه دور خود وارد شوید ، یا به عنوان root یا با حسابی با امتیاز sudo. فایل پیکربندی SSH daemon را باز کنید:
sudo nano /etc/ssh/sshd_config
در داخل پرونده ، بخواهید بخاطر بخشنامه ای به نام PasswordAuthentication مراجعه کنید. این ممکن است کامنت شده باشد. با حذف هر # در ابتدای خط ، خط را از حالت کامنت درآورید و مقدار را روی no تنظیم کنید. با این کار توانایی ورود به سیستم از طریق SSH با استفاده از گذرواژه های حساب غیرفعال می شود:
PasswordAuthentication no
پس از اتمام پرونده ، آن را ذخیره و بسته کنید. برای اجرای واقعی تغییراتی که ما الان ایجاد کردیم ، باید سرویس را دوباره راه اندازی کنید.
در اکثر توزیع های لینوکس ، می توانید دستور زیر را برای این کار صادر کنید:
sudo systemctl restart ssh
پس از اتمام این مرحله ، شما با موفقیت SSH daemon خود را انتقال داده اید تا فقط به کلیدهای SSH پاسخ دهد.