SSH (مخفف Secure Shell) یک پروتکل متن باز و مورد اعتماد ترین پروتکلی است که برای ورود، لاگین یا اتصال به سرورهای ریموت (با استفاده از پسورد یا کلید) توسط برنامه ها و دستورات استفاده می شود. همچنین با استفاده از این روش برای انتقال فایل ها از کامپیوتری به کامپیوتر دیگر در شبکه با پروتکل SCP نیز میتوان استفاده کرد. در این مقاله ما به شما نشان خواهیم داد که چگونه در لینوکس RHEL/CentOS/Fedora و Debia/Ubuntu/Mint و ... با استفاده از ssh key ها (کلید) به سرورهای Linux بدون وارد کردن پسورد متصل شوید. لاگین بدون پسورد با کلید ssh، اعتماد بین سرورهای لینوکس را برای sync شدن و انتقال فایل ها را افزایش می دهد.
محیط عملیاتی من
اگر شما با تعدا دی سرور linux درگیر هستید، لاگین کردن بدون پسورد به سرور لینوکسی یکی از بهترین راه ها برای بک آپ گیری اتوماتیک با اسکریپت ها است، فایل ها را به طور همزمان با استفاده از scp و اجرای دستورات از راه دور اجرا کنید. در این مثال ما لاگین اتوماتیک بدون پسورد با SSH را از سیستم 172.16.17.10 با کاربر habili به سرور 172.16.17.91 با کاربر root را تنظیم خواهیم کرد.
مرحله اول : ایجاد کلید احراز هویت (SSH-Key) در سیستم کلاینت
ابتدا به سیستم کلاینت با آدرس 172.16.17.10 توسط کاربر habili لاگین کنید. سپس با استفاده از دستور زیر یک جفت public key (کلید SSH) ایجاد کنید.
مرحله دوم : ایجاد دایرکتوری .ssh در سرور یا هاست ریموت
با استفاده از SSH و یوزر root به سرور ریموت (172.16.17.91) وصل شوید. ابتدا با استفاده از دستور ls -la بررسی کنید که دایرکتوری .ssh را در مسیر /root/ دارید؟
نکته : در لینوکس دایرکتوری هایی که مخفی هستند، در ابتدای نام آنها یک نقطه "." نمایش داده میشود. دایرکتوری ssh هم مخفی است و در صورتیکه دستور ls را به تنهایی استفاده کنید شما قادر به دیدن این دایرکتوری نخواهید بود. به همین منظور جهت مشاهده دایرکتوری های مخفی از آپشن la را در کنار دستور ls استفاده میکنیم که دایرکتوری های مخفی (Hidden) را هم برای ما نشان دهد.
در صورتیکه دایرکتوری .ssh وجود داشت تغییری ندهید و به مرحله سوم بروید. اما اگر آن را نداشتید، با استفاده از دستور mkdir در مسیر /root دایرکتوری .ssh را ایجاد کنید و با استفاده از دستور chmod به دایرکتوری .ssh پرمیژن های لازم را بدهید.
مرحله سوم : آپلود کلیدهای ایجاد شده به سرور یا هاست ریموت
با استفاده از دستور scp فایل id_rsa.pub را به دایرکتوری .ssh در سرور ریموت تان منتقل کنید. زمانیکه فایل id_rsa.pub به سرور ریموت منتقل میشود در آنجا ما میبایست اسم آنرا به authorized_keys تغییر نام دهیم. برای راحتی و تسریع در کارها، من در انتهای دستور authorized_keys را وارد کردم که هنگام انتقال فایل id_rsa.pub به سرور ریموت، همزمان اسم آنرا به authorized_keys تغییر نام دهد.
اکنون، به سرور ریموت برگردید و با استفاده از دستور chmod به فایل authorized_keys پرمیژن 640 بدهید و بعد از آن سرویس sshd را ریستارت کنید. برای مشاهده پرمیژن فایل ها یا دایرکتوری ها شما میتوانید از دستور stat استفاده کنید.
نکته : در صورتیکه، یوزرهای دیگری در سرور میباشد، و میخواهید برای آنها هم به صورت جداگانه لاگین بدون پسورد را اعمال کنید، میتوانید فایل authorized_keys که در بالا ایجاد کردیم را هم به دایرکتوری .ssh هر کاربر کپی کنید. مثلا برای کاربر sara شما میبایست فایل authorized_keys را به مسیر /home/sara/.ssh/ کپی کنید.
مرحله چهارم : SSH کردن به سرور بدون وارد کردن Password
از این مرحله به بعد شما میتوانید بدون وارد کردن پسورد به سرور یا هاست ریموت خود وارد شوید.
نکته 1 : در مرحله اول زماینکه با استفاده از دستور ssh-keygen یک جفت کلید SSH ایجاد کردید، شما میتوانید فایل id_rsa را درون یک حافظه مانند USB یا هارد دیسک خود نگهداری کنید و هر زمان که نیاز شد از روی هر سیستمی که خواستید وصل شوید از این کلید استفاده کنید.
نکته 2 : زمانیکه شما دستور ssh-keygen را وارد میکنید در هنگام ایجاد کلید از شما یک پسورد میگیرد. در صورتیکه چیزی وارد نکنید کلیدهای ایجاد شده بدون پسورد هستند. اما اگر برای کلیدهای ایجاد شده پسورد وارد کنید، زمانیکه شما قصد دارید از این کلیدها استفاده کنید از شما پسورد میگیرد و در صورتیکه پسورد درست را وارد کنید اجازه استفاده از کلیدها صادر میشود. این کار برای امنیت کلیدها مفید است و در صورتیکه کلید شما به هر دلیلی بدست شخص دیگری برسد قادر به استفاده از کلیدها نخواهد بود.
مرحله پنجم : غیرفعال کردن احراز هویت با پسورد در سرور ریموت
خب تا اینجای کار شما موفق شدید که تنظیمات لاگین به سرور بدون پسورد و با استفاده از کلید (SSH Key) را انجام دهید اما نکته ای که وجود دارد هنوز روی سرور شما احراز هویت یا لاگین با پسورد فعال است و همین موضوع باعث قرار گرفتن سرور شما در برابر حملات brute-force میشود.
قبل از اینکه این مرحله را انجام دهید، مطمئن شوید که شما میتوانید به کاربر root (یا اکانت های دیگری که با آن به سرور وصل میشوید) بدون پسورد لاگین کنید. این مرحله لاگین/ورد بر اساس پسورد را غیرفعال میکند بنابراین حتما مطمئن شوید که دسترسی کاملی به سرور را دارید.
به سرور ریموت خود لاگین کنید و فایل تنظیمات سرویس SSH را با استفاده از ادیتور متن دلخواه خود باز کنید.
سپس درون فایل بالا دنبال خط PasswordAuthentication بگردید و آنرا پیدا کنید. این خط ممکن است کامنت باشد، در صورتیکه با استفاده از # یا ; کامنت بود آنرا از کامنت خارج کنید و مقدار no را برابر آن بگذارید. این گزینه ورود به سرور لینوکس را با استفاده از یوزر و پسورد غیرفعال میکند.
بعد از اینکه تغییرات را ذخیره کردید، سرویس sshd را ریستارت کنید.
بعد از اینکه سرویس ssh با موفقیت restart شد، کانکشن کنونی خود را نبندید و یک کانکشن جدید با سرور ریموت ایجاد کنید که مطمئن شوید تنظیمات تان درست است و با موفقیت وصل میشوید. در صورتیکه مشکلی در اتصال وجود نداشت، شما میتوانید تمام کانکشن هایی که با سرور دارید را ببندید. اکنون سرویس ssh شما فقط به درخواست هایی که دارای کلید (Key) باشند پاسخ میدهد و در برابر لاگین با یوزر و پسورد پاسخی نمیدهد.
همچنین توصیه میشود مطالعه کنید :
امنیت سرورهای لینوکس CentOS (بخش اول)
نحوه فعال کردن احراز هویت دو مرحله ای در لاگین SSH با استفاده از Google Authenticator
ارسال ایمیل هشدار برای ادمین سیستم ها هنگام ssh کردن با یوزر root
5 نمونه از بهترین روش ها برای امنیت و نگهداری سرورهای لینوکس
غیرفعال یا فعال کردن دسترسی login یوزر root به SSH
نمایش بنر هنگام SSH برای محافظت کردن از سرورهای لینوکس
فراموش نکنید نظرات ارزشمند خود را با ما به اشتراک بگذارید. در صورتیکه این مقاله مفید بوده لطفا آنرا با دیگران به اشتراک بگذارید.
محیط عملیاتی من
- سیستم کلاینت : 172.16.17.10
- سرور یا هاست ریموت : 172.16.17.91
اگر شما با تعدا دی سرور linux درگیر هستید، لاگین کردن بدون پسورد به سرور لینوکسی یکی از بهترین راه ها برای بک آپ گیری اتوماتیک با اسکریپت ها است، فایل ها را به طور همزمان با استفاده از scp و اجرای دستورات از راه دور اجرا کنید. در این مثال ما لاگین اتوماتیک بدون پسورد با SSH را از سیستم 172.16.17.10 با کاربر habili به سرور 172.16.17.91 با کاربر root را تنظیم خواهیم کرد.
مرحله اول : ایجاد کلید احراز هویت (SSH-Key) در سیستم کلاینت
ابتدا به سیستم کلاینت با آدرس 172.16.17.10 توسط کاربر habili لاگین کنید. سپس با استفاده از دستور زیر یک جفت public key (کلید SSH) ایجاد کنید.
کد PHP:
habili@RTP-Engine:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/habili/.ssh/id_rsa):
Created directory '/home/habili/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/habili/.ssh/id_rsa.
Your public key has been saved in /home/habili/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:pXwSVDdhEhsw1UEI7kx/sl6WPOLolw69OH0l4z9BbDY habili@RTP-Engine
The key's randomart image is:
+---[RSA 2048]----+
| ==*=Bo |
| o ..*.. |
| + o . |
| = = E |
| S + .+ . |
| + =o.o |
| ..+o*+ . |
| .*+=o.. |
| .++=. ... |
+----[SHA256]-----+
habili@RTP-Engine:~$
مرحله دوم : ایجاد دایرکتوری .ssh در سرور یا هاست ریموت
با استفاده از SSH و یوزر root به سرور ریموت (172.16.17.91) وصل شوید. ابتدا با استفاده از دستور ls -la بررسی کنید که دایرکتوری .ssh را در مسیر /root/ دارید؟
نکته : در لینوکس دایرکتوری هایی که مخفی هستند، در ابتدای نام آنها یک نقطه "." نمایش داده میشود. دایرکتوری ssh هم مخفی است و در صورتیکه دستور ls را به تنهایی استفاده کنید شما قادر به دیدن این دایرکتوری نخواهید بود. به همین منظور جهت مشاهده دایرکتوری های مخفی از آپشن la را در کنار دستور ls استفاده میکنیم که دایرکتوری های مخفی (Hidden) را هم برای ما نشان دهد.
کد PHP:
# ls -la /root/
در صورتیکه دایرکتوری .ssh وجود داشت تغییری ندهید و به مرحله سوم بروید. اما اگر آن را نداشتید، با استفاده از دستور mkdir در مسیر /root دایرکتوری .ssh را ایجاد کنید و با استفاده از دستور chmod به دایرکتوری .ssh پرمیژن های لازم را بدهید.
کد PHP:
# mkdir -p .ssh
# chmod 700 .ssh
مرحله سوم : آپلود کلیدهای ایجاد شده به سرور یا هاست ریموت
با استفاده از دستور scp فایل id_rsa.pub را به دایرکتوری .ssh در سرور ریموت تان منتقل کنید. زمانیکه فایل id_rsa.pub به سرور ریموت منتقل میشود در آنجا ما میبایست اسم آنرا به authorized_keys تغییر نام دهیم. برای راحتی و تسریع در کارها، من در انتهای دستور authorized_keys را وارد کردم که هنگام انتقال فایل id_rsa.pub به سرور ریموت، همزمان اسم آنرا به authorized_keys تغییر نام دهد.
کد PHP:
$ scp .ssh/id_rsa.pub root@172.16.17.91:/root/.ssh/authorized_keys
اکنون، به سرور ریموت برگردید و با استفاده از دستور chmod به فایل authorized_keys پرمیژن 640 بدهید و بعد از آن سرویس sshd را ریستارت کنید. برای مشاهده پرمیژن فایل ها یا دایرکتوری ها شما میتوانید از دستور stat استفاده کنید.
کد PHP:
# chmod 640 .ssh/authorized_keys
# systemctl restart sshd
نکته : در صورتیکه، یوزرهای دیگری در سرور میباشد، و میخواهید برای آنها هم به صورت جداگانه لاگین بدون پسورد را اعمال کنید، میتوانید فایل authorized_keys که در بالا ایجاد کردیم را هم به دایرکتوری .ssh هر کاربر کپی کنید. مثلا برای کاربر sara شما میبایست فایل authorized_keys را به مسیر /home/sara/.ssh/ کپی کنید.
مرحله چهارم : SSH کردن به سرور بدون وارد کردن Password
از این مرحله به بعد شما میتوانید بدون وارد کردن پسورد به سرور یا هاست ریموت خود وارد شوید.
کد PHP:
$ ssh root@172.16.17.91
نکته 1 : در مرحله اول زماینکه با استفاده از دستور ssh-keygen یک جفت کلید SSH ایجاد کردید، شما میتوانید فایل id_rsa را درون یک حافظه مانند USB یا هارد دیسک خود نگهداری کنید و هر زمان که نیاز شد از روی هر سیستمی که خواستید وصل شوید از این کلید استفاده کنید.
نکته 2 : زمانیکه شما دستور ssh-keygen را وارد میکنید در هنگام ایجاد کلید از شما یک پسورد میگیرد. در صورتیکه چیزی وارد نکنید کلیدهای ایجاد شده بدون پسورد هستند. اما اگر برای کلیدهای ایجاد شده پسورد وارد کنید، زمانیکه شما قصد دارید از این کلیدها استفاده کنید از شما پسورد میگیرد و در صورتیکه پسورد درست را وارد کنید اجازه استفاده از کلیدها صادر میشود. این کار برای امنیت کلیدها مفید است و در صورتیکه کلید شما به هر دلیلی بدست شخص دیگری برسد قادر به استفاده از کلیدها نخواهد بود.
مرحله پنجم : غیرفعال کردن احراز هویت با پسورد در سرور ریموت
خب تا اینجای کار شما موفق شدید که تنظیمات لاگین به سرور بدون پسورد و با استفاده از کلید (SSH Key) را انجام دهید اما نکته ای که وجود دارد هنوز روی سرور شما احراز هویت یا لاگین با پسورد فعال است و همین موضوع باعث قرار گرفتن سرور شما در برابر حملات brute-force میشود.
قبل از اینکه این مرحله را انجام دهید، مطمئن شوید که شما میتوانید به کاربر root (یا اکانت های دیگری که با آن به سرور وصل میشوید) بدون پسورد لاگین کنید. این مرحله لاگین/ورد بر اساس پسورد را غیرفعال میکند بنابراین حتما مطمئن شوید که دسترسی کاملی به سرور را دارید.
به سرور ریموت خود لاگین کنید و فایل تنظیمات سرویس SSH را با استفاده از ادیتور متن دلخواه خود باز کنید.
کد PHP:
# vim /etc/ssh/sshd_config
کد PHP:
PasswordAuthentication no
بعد از اینکه تغییرات را ذخیره کردید، سرویس sshd را ریستارت کنید.
کد PHP:
# systemctl restart sshd.service
همچنین توصیه میشود مطالعه کنید :
امنیت سرورهای لینوکس CentOS (بخش اول)
نحوه فعال کردن احراز هویت دو مرحله ای در لاگین SSH با استفاده از Google Authenticator
ارسال ایمیل هشدار برای ادمین سیستم ها هنگام ssh کردن با یوزر root
5 نمونه از بهترین روش ها برای امنیت و نگهداری سرورهای لینوکس
غیرفعال یا فعال کردن دسترسی login یوزر root به SSH
نمایش بنر هنگام SSH برای محافظت کردن از سرورهای لینوکس
فراموش نکنید نظرات ارزشمند خود را با ما به اشتراک بگذارید. در صورتیکه این مقاله مفید بوده لطفا آنرا با دیگران به اشتراک بگذارید.
کامنت