یکی از ابزارهای ضروری برای تسلط به عنوان یک مدیر سیستم، SSH است. SSH یا Secure Shell پروتکلی است که برای ورود ایمن به سیستمهای ریموت استفاده میشود. این رایجترین راه برای دسترسی به سرورهای ریموت با سیستمعامل لینوکس است. در این راهنما نحوه اتصال به سرور با SSH را بررسی میکنیم تا ببینید چطور میتوان از یک کلید SSH برای اتصال به سرور مجازی لینوکس استفاده کرد.
ساختار اصلی دستورات برای اتصال به سرور با SSH
برای اتصال به یک سیستم راه دور با استفاده از SSH، از دستور ssh
استفاده میکنیم.
اگر از ویندوز استفاده میکنید، نیاز به نصب نسخهای از OpenSSH دارید تا بتوانید از طریق ترمینال به SSH متصل شوید. اگر ترجیح میدهید در PowerShell کار کنید، میتوانید با دنبال کردن مستندات مایکروسافت، OpenSSH را به PowerShell اضافه کنید. اگر تمایل دارید به یک محیط کامل لینوکس دسترسی داشته باشید، میتوانید WSL (سیستم زیرسیستم ویندوز برای لینوکس) را راهاندازی کنید که به طور پیشفرض شامل SSH است. همچنین، به عنوان یک گزینه سبک، میتوانید Git for Windows را نصب کنید که یک محیط ترمینال bash ویندوزی را فراهم میکند و شامل دستور SSH است. هر یک از این گزینهها به خوبی پشتیبانی میشوند و انتخاب بین آنها به سلیقه شما بستگی دارد.
اگر از مک یا لینوکس استفاده میکنید، دستور SSH به صورت پیشفرض در ترمینال شما موجود است.
سادهترین شکل این دستور به صورت زیر است:
ssh remote_host
در این مثال، remote_host
آدرس IP یا نام دامنهای است که میخواهید به آن متصل شوید.
این دستور فرض میکند که نام کاربری شما در سیستم راه دور همان نام کاربری شما در سیستم محلی است.
اگر نام کاربری شما در سیستم راه دور متفاوت است، میتوانید با استفاده از این دستور آن را مشخص کنید:
ssh remote_username@remote_host
پس از اتصال به سرور، ممکن است از شما خواسته شود که برای تأیید هویت خود، رمز عبور وارد کنید. در ادامه، نحوه تولید کلیدهایی که به جای رمز عبور استفاده میشوند را توضیح خواهیم داد.
برای خروج از جلسه SSH و بازگشت به local shell session خود، دستور زیر را تایپ کنید:
exit
SSH چگونه کار میکند؟
SSH با اتصال یک برنامه کلاینت به یک سرور ssh به نام sshd کار میکند. در قسمت قبل، ssh برنامه کلاینت بود. سرور ssh قبلا روی remote_host که ما مشخص کردیم در حال اجرا بود.
تقریبا در تمام محیطهای لینوکس، سرور sshd باید به طور خودکار راهاندازی شود. اگر به هر دلیلی این سرور اجرا نمیشود، احتمالا لازم است به طور موقت از طریق یک کنسول مبتنیبر وب یا کنسول سریال محلی به سرور خود دسترسی پیدا کنید.
فرایند موردنیاز برای راهاندازی سرور ssh به توزیع لینوکسی که استفاده میکند بستگی دارد. در اوبونتو میتوانید سرور ssh را با تایپ کردن دستور زیر راهاندازی کنید:
sudo systemctl start ssh
با اجرا این دستور، سرور sshd باید راهاندازی شود و سپس میتوانید به صورت ریموت اتصال به سرور با SSH را انجام دهید.
با تغییر پیکربندی SSH در واقع دارید تنظیمات سرور sshd را تغییر میدهید.
در اوبونتو، فایل اصلی پیکربندی sshd در مسیر etc/ssh/sshd_config/ قرار دارد.
قبل از ویرایش این فایل، از نسخه فعلی بکآپ بگیرید:
sudo cp /etc/ssh/sshd_config{,.bak}
سپس با استفاده از نانو یا ویرایشگر متن دلخواهتان فایل را باز کنید:
sudo nano /etc/ssh/sshd_config
توصیه میکنیم اکثر گزینههای موجود در این فایل را به حال خود رها کنید. بااینحال، چند مورد وجود دارد که ممکن است بخواهید بررسی کنید:
Port 22
اعلان پورت مشخص میکند که سرور sshd برای اتصالات به کدام پورت گوش (Listen) میکند. به طور پیشفرض، این عدد 22 است. احتمالا باید این گزینه را به حال خود رها کنید، مگر اینکه دلایل خاصی برای تغییر آن داشته باشید. اگر قصد دارید پورت خود را تغییر دهید، نحوه اتصال به پورت جدید را در ادامه مقاله مشاهده کنید.
HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key
اعلانهای کلید host مشخص میکنند که کجا به دنبال کلیدهای host گلوبال بگردیم. بعدا درباره چیستی کلید host بحث خواهیم کرد.
SyslogFacility AUTH LogLevel INFO
این دو مورد نشاندهنده سطح ورود به سیستم است که باید رخ بدهد.
اگر با SSH دچار مشکل هستید، افزایش میزان ورود به سیستم ممکن است به شناسایی مشکل کمک کند.
LoginGraceTime 120 PermitRootLogin yes StrictModes yes
این پارامترها چند مورد از اطلاعات ورود را مشخص میکنند.
LoginGraceTime مشخص میکند که بدون ورود موفقیتآمیز، اتصال برای چند ثانیه حفظ شود.
احتمالا ایده خوبی است که این زمان را فقط کمی بیشتر از مدت زمانی که در حالت عادی برای ورود به سیستم نیاز است تنظیم کنید.
PermitRootLogin انتخاب میکند که آیا کاربر روت مجاز به ورود به سیستم است یا خیر.
در بیشتر موارد، زمانی که حساب کاربری ایجاد کردهاید که به امتیازات بالاتری (از طریق su یا sudo) دسترسی دارد و میتواند از طریق SSH وارد شود، این گزینه باید به no تغییر کند تا خطر دسترسی روت به سرور شما به حداقل برسد.
strictModes یک محافظ امنیتی است که اگر فایلهای احراز هویت برای همه قابل خواندن باشد، از تلاش برای ورود به سیستم خودداری میکند.
این پارامتر از تلاش برای ورود به سیستم در شرایطی که فایلهای پیکربندی ایمن نیستند جلوگیری میکند.
X11Forwarding yes X11DisplayOffset 10
این پارامترها قابلیتی به نام X11 Forwarding را پیکربندی میکنند. با این کار میتوانید رابط کاربری گرافیکی یک سیستم ریموت را در سیستم لوکال خود مشاهده کنید.
اگر از یک VPS مانند سرور مجازی فرانسه استفاده میکنید این گزینه باید در سرور فعال شود و در هنگام اتصال با گزینه X- در اختیار کلاینت SSH قرار بگیرد.
پس از انجام تغییرات، فایل را ذخیره کنید و ببندید. اگر از ویرایشگر نانو استفاده میکنید، Ctrl+X را فشار دهید، سپس وقتی از شما خواسته شد دکمههای Y و سپس Enter را فشار دهید.
اگر تنظیماتی را در etc/ssh/sshd_config/ تغییر دادهاید، مطمئن شوید که سرور sshd را reload کنید تا تغییرات موردنظرتان اعمال شود:
sudo systemctl reload ssh
شما باید تغییرات خود را به طور کامل آزمایش کنید تا مطمئن شوید که مطابق انتظار شما عمل میکنند. ممکن است ایده خوبی باشد که در حین ایجاد تغییرات، چند سشن ترمینال باز باشد. این کار به شما اجازه میدهد تا در صورت لزوم پیکربندی را بدون اینکه محدود شوید بازگردانی (revert) کنید.
نحوه ورود به سرور با SSH
اگرچه ورود به سیستم ریموت با استفاده از رمزهایعبور یک روش کارامد است، اما اگر احراز هویت مبتنیبر کلید را تنظیم کنید، به روشی سریعتر و ایمنتر دسترسی خواهید داشت.
احراز هویت مبتنیبر کلید چگونه کار میکند؟ احراز هویت مبتنیبر کلید با ایجاد یک جفت کلید کار میکند؛ یک کلید خصوصی و یک کلید عمومی.
کلید خصوصی در دستگاه کلاینت قرار دارد و ایمن و مخفی نگه داشته میشود.
کلید عمومی میتواند به هر کسی داده شود یا در هر سروری که میخواهید به آن دسترسی داشته باشید قرار داده شود.
هنگامی که سعی میکنید با استفاده از یک جفت کلید متصل شوید، سرور از کلید عمومی برای ایجاد پیام برای کامپیوتر کلاینت استفاده میکند که فقط با کلید خصوصی قابل خواندن است.
سپس کامپیوتر کلاینت پاسخ مناسب را به سرور ارسال میکند که به سرور میگوید این کلاینت قانونی است.
این فرایند پس از اینکه کلیدهای خود را پیکربندی کردید به طور خودکار انجام میشود.
نحوه ایجاد کلیدهای SSH
کلیدهای SSH باید در کامپیوتری که میخواهید از آن وارد شوید ایجاد شود. این کامپیوتر معمولا همان دستگاه لوکال شماست.
موارد زیر را در خط فرمان وارد کنید:
ssh-keygen -t rsa
ممکن است از شما خواسته شود که یک رمزعبور برای فایلهای کلید تنظیم کنید، اما این یک عمل نسبتا غیرمعمول است و برای پذیرش حالتهای پیشفرض باید کلید Enter را فشار دهید. کلیدهای شما در ssh/id_rsa.pub./~ و ssh/id_rsa./~ ایجاد خواهد شد.
با تایپ کردن دستور زیر به دایرکتوری ssh. وارد شوید:
cd ~/.ssh
با دستور زیر به مجوز فایلها نگاهی بیندازید:
ls -l
Output -rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa -rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub
همانطور که میبینید فایل id_rsa فقط برای مالک قابل خواندن و نوشتن است. این ویژگی به مخفی نگه داشتن آن کمک میکند.
بااینحال، فایل id_rsa.pub را میتوان به اشتراک گذاشت و از مجوزهای مناسب برای این فعالیت برخوردار است.
نحوه انتقال کلید عمومی به سرور
اگر در حال حاضر یک سرور مجازی آلمان یا هر لوکیشن دیگری خریدهاید و براساس رمزعبور به آن دسترسی دارید، میتوانید با دستور زیر کلید عمومی خود را در سرور کپی کنید:
ssh-copy-id remote_host
با اجرای این دستور، یک سشن SSH شروع میشود. پس از اینکه رمزعبور خود را وارد کردید، کلید عمومی شما را در فایل کلیدهای مجاز سرور کپی میکند. این روش به شما اجازه میدهد تا دفعهی بعد بدون نیاز به وارد کردن رمزعبور به سرور وارد شوید.
گزینههای سمت کلاینت
تعدادی فلگ اختیاری وجود دارد که میتوانید هنگام اتصال به سرور با SSH ارائه دهید.
برخی از این فلگها ممکن است برای مطابقت با تنظیمات موجود در پیکربندی sshd میزبان ریموت لازم باشد.
به عنوان مثال، اگر شماره پورت را در پیکربندی sshd خود تغییر دادید، باید با تایپ کردن آن پورت در سمت کلاینت نیز مطابقت دهید:
ssh -p port_number remote_host
توجه: تغییر پورت ssh یک راه معقول برای تامین امنیت از طریق پنهانسازی است. اگر به طور معمول به اتصال SSH به یک سرور شناختهشده در پورت 22 اجازه اتصال میدهید و از احراز هویت مبتنیبر رمزعبور استفاده میکنید، احتمالا توسط بسیاری تلاشهای لاگین خودکار مورد حمله قرار خواهید گرفت.
استفاده انحصاری از احراز هویت مبتنیبر کلید و اجرای SSH در یک پورت غیر استاندارد، پیچیدهترین راهحل امنیتی موجود نیست اما تا حد امکان باید این موارد را به حداقل برسانید.
اگر میخواهید فقط یک فرمان را روی یک سیستم ریموت اجرا کنید، میتوانید آن را بعد از میزبان مشخص کنید. به مثال زیر دقت کنید:
ssh remote_host command_to_run
شما به دستگاه ریموت متصل میشوید، احراز هویت میکنید و دستور اجرا خواهد شد.
همانطور که قبلا گفتیم، اگر قابلیت X11 forwarding در هر دو کامپیوتر فعال باشد، میتوانید با تایپ کردن دستور زیر به آن عملکرد دسترسی پیدا کنید:
ssh -X remote_host
به شرط داشتن ابزارهای مناسب بر روی کامپیوتر، اکنون میتوانید به GUI یا رابط کاربری گرافیکی برنامههایی که در سیستم ریموت استفاده میکنید را در سیستم محلی خود دسترسی داشته باشید.
غیرفعال کردن احراز هویت رمزعبور
اگر کلیدهای SSH را ایجاد کردهاید، میتوانید با غیرفعال کردن احراز هویت فقط از طریق رمزعبور، امنیت سرور خود را افزایش دهید. به غیر از کنسول، تنها راه ورود به سرور شما از طریق کلید خصوصی است که با کلید عمومی که روی سرور نصب کردهاید جفت میشود.
هشدار: قبل از اینکه این مرحله را ادامه دهید، مطمئن شوید که یک کلید عمومی روی سرور خود نصب کردهاید. در غیراینصورت، دسترسی شما قفل خواهد شد.
به عنوان روت یا کاربر با امتیازات sudo، فایل پیکربندی sshd را باز کنید:
sudo nano /etc/ssh/sshd_config
خطی را که شامل احراز هویت رمزعبور است پیدا کرده و با حذف علامت # ابتدایی، آن را حذف کنید. سپس میتوانید مقدار آن را به no تغییر دهید:
PasswordAuthentication no
دو مورد دیگر که نیازی به تغییر ندارند (به شرطی که قبلا این فایل را تغییر نداده باشید) PubkeyAuthentication و ChallengeResponseAuthentication هستند. این دو مورد به طور پیشفرض تنظیم شدهاند و باید به صورت زیر خوانده شوند:
PubkeyAuthentication yes ChallengeResponseAuthentication no
پس از انجام تغییرات، فایل را ذخیره کنید و ببندید.
اکنون میتوانید دیمون SSH را reload کنید:
sudo systemctl reload ssh
احراز هویت رمزعبور اکنون باید غیرفعال باشد و سرور شما باید فقط از طریق احراز هویت کلید SSH قابل دسترس باشد.
جمعبندی
یادگیری روش اتصال به سرور با SSH برای تلاشهای آیندهی شما در زمینه پردازش ابری بسیار مفید خواهد بود. همانطور که از گزینههای مختلف استفاده میکنید، عملکردهای پیشرفتهتری را کشف خواهید کرد که میتواند زندگی شما را آسانتر کند. SSH همچنان محبوب باقی مانده است زیرا ایمن، سبک و در موقعیتهای مختلف مفید است.