پروتکل SSH یا Secure Shell روشی برای ارسال دستورات به کامپیوترها به صورت امن روی شبکههای عمدتا ناامن است. SSH برای برقراری ارتباط میان دستگاههای مختلف از تکنیکهای کریپتوگرافی برای احرازهویت و رمزنگاری استفاده میکند.
استفادههای اصلی SSH عمدتا کنترل سرورها به صورت ریموت، مدیریت زیرساخت و انتقال فایل است. اما تمامی این موارد از طریق مراحل و پروسههای نسبتا پیچیدهای انجام میشوند. برای درک چیستی و چگونه کار کردن SSH نیاز است با مفاهیم مختلفی آشنا شویم که هدف این مطلب از وبلاگ همروش دقیقا همین است.
SSH چه کاری انجام میدهد؟
برقراری ارتباطات رمزنگاریشده: اصلیترین استفاده SSH ایجاد امکان دسترسی به کامپیوترهای ریموت (دور از جایی که کاربر قرار دارد) است. سرورها نمونه گستردهای از این کامپیوترها هستند. SSH هر دادهای که بین کلاینت و سرور منتقل میشود را به صورت کامل رمزنگاری میکند تا امنیت دادهها حفظ شود. به همین دلیل افراد خارج از این رابطه بسیار به سختی میتوانند در این ارتباط مداخلهای داشته باشند.
تونلزنی یا Tunneling: تونلینگ یک فناوری شبکه است که امکان برقراری ارتباط دو کامپیوتر را از طریق یک کامپیوتر میانی فراهم میکند. از این روش برای ساخت شبکههای خصوصی مجازی یا VPN استفاده میکنند. SSH برای پیادهسازی این حالت از تکنیکی به نام Port Forwarding استفاده میکند. در ادامه این مقاله آن را بررسی خواهیم کرد.
SSH چگونه کار میکند؟
- تبادل کلید: هنگامی که یک اتصال SSH آغاز میشود، ابتدا یک عملیات تبادل کلید رمزنگاری بین میزبان (سرور) و مشتری (کلاینت) انجام میشود. این فرآیند شامل ایجاد یک کانال ارتباطی امن است که اطلاعات را قبل از شروع ارتباط واقعی، به صورت رمزنگاری شده منتقل میکند.
- احراز هویت: پس از برقراری یک کانال ارتباطی امن، مرحله بعدی احراز هویت کاربر است. SSH از چندین روش احراز هویت پشتیبانی میکند: از جمله احراز هویت بر پایه رمزعبور، کلید عمومی (public key) و روشهای احراز هویت بر پایه GSSAPI.
- ارتباط امن: پس از احراز هویت موفق، یک کانال ارتباطی امن برقرار میشود. دادههای منتقل شده بین کلاینت و سرور به صورت رمزنگاری شده هستند و این بدان معناست که حتی اگر دادهها توسط افراد دیگری دزدیده شوند، بدون داشتن کلید رمزگشایی، قابل فهم نخواهند بود.
- دسترسی از راه دور یا انتقال فایل: پس از برقراری اتصال امن، کاربران میتوانند به صورت ریموت به سرور دسترسی پیدا کنند. برای انجام انتقال فایل، SSH از پروتکلهایی مانند SCP (Secure Copy Protocol) یا SFTP (SSH File Transfer Protocol) استفاده میکند.
SSH با استفاده از الگوریتمهای رمزنگاری پیشرفته، مانع از شنود، تغییر دادهها و حملات مرد میانی (Man-in-the-Middle) میشود. در نتیجه هدف و شیوه کاری آن ایجاد یک ارتباط با حداکثر میزان امنیت است.
منظور از Port Forwarding در SSH چیست؟
Port Forwarding در SSH به معنای انتقال اطلاعات از یک پورت روی یک سیستم به پورت دیگری روی سیستم دیگر از طریق یک کانال ارتباطی امن (معمولاً یک اتصال SSH) است. این فرایند اجازه میدهد ترافیک شبکه که برای یک پورت خاص در نظر گرفته شده است به طور امن از طریق یک سرور میانی، که میتواند برای دور زدن محدودیتهای شبکه یا دسترسی ایمن به شبکههای داخلی از راه دور مفید باشد، منتقل شود.
در SSH، تکنیک Port Forwarding به دو شکل اصلی وجود دارد:
- Local Port Forwarding: این روش برای دسترسی ایمن به یک سرور از راه دور از طریق یک سرور میانی استفاده میشود. کاربر، یک پورت محلی روی دستگاه خود باز میکند که ترافیک را به یک پورت خاص روی سرور مقصد از طریق اتصال SSH منتقل میکند.
- Remote Port Forwarding: این روش برای اجازه دادن به کاربران ریموت، برای دسترسی به سرویسهای محلی روی دستگاه شما از طریق یک سرور میانی استفاده میشود. در این حالت، یک پورت روی سرور میانی باز میشود که ترافیک را به یک پورت خاص روی دستگاه شما از طریق اتصال SSH منتقل میکند.
Port Forwarding در SSH اغلب برای موارد زیر استفاده میشود:
- دسترسی امن به اپلیکیشنهای وب پشت یک فایروال یا شبکه خصوصی
- تونلزنی امن برای پروتکلهایی مانند HTTP ،SMTP و FTP
- دور زدن فایروالها و فیلترهای شبکه برای دسترسی به سرویسها
مزایا و معایب استفاده از SSH
مزایا:
- امنیت بالا: SSH از رمزنگاری قوی برای اطمینان از امنیت دادههای انتقالی استفاده میکند، که از دسترسی و خوانش اطلاعات توسط افراد غیرمجاز جلوگیری میکند.
- جلوگیری از حملات man-in-the-middle: فناوری SSH از قابلیت احرازهویت مبتنی بر رمزنگاری استفاده میکند که از حملات ایجاد شده توسط افرادی که قصد دارند ارتباط بین دو سیستم را به دست بگیرند، جلوگیری میکند.
- پورت فورواردینگ: این ویژگی امکان انتقال امن دادهها را بین مشتری و سرور فراهم میکند، حتی از طریق شبکههایی که به طور پیشفرض ایمن نیستند.
- قابلیت استفاده گسترده: SSH در سیستمعاملهای مختلف مانند Linux ،Windows و macOS پشتیبانی میشود و کاربردهای متنوعی دارد: از جمله مدیریت سرور، انتقال فایل، و موارد دیگر.
معایب:
- پیکربندی و مدیریت: راهاندازی اولیه و مدیریت کلیدهای SSH میتواند پیچیده باشد، بهخصوص در محیطهایی که تعداد زیادی سرور و کاربر وجود دارد.
- خطرات امنیتی ناشی از مدیریت نامناسب: استفاده نادرست از کلیدهای SSH یا نگهداری ضعیف از آنها میتواند باعث نفوذهای امنیتی شود. این شامل استفاده از کلیدهای SSH باز و بدون پسورد و یا نگهداری نکردن بهروزرسانیهای امنیتی است.
- محدودیتهای عملکردی: اگرچه SSH برای امنیت طراحی شده است، اما استفاده از رمزنگاری میتواند بر عملکرد شبکه تأثیر بگذارد، بهویژه در انتقال فایلهای بزرگ یا در شبکههای با پهنای باند پایین.
- وابستگی به نرمافزار: برای استفاده از SSH، هر دو سرور و کلاینت باید نرمافزارهای مربوطه را نصب کرده باشند. این موضوع میتواند در محیطهایی که از تجهیزات قدیمیتر یا سیستمعاملهای خاص استفاده میکنند، محدودیت ایجاد کند.
آموزش استفاده از SSH
برای استفاده از SSH نیاز است که آن را ابتدا روی سیستم خودتان به صورت نصب شده داشته باشید. در سیستمعاملهای لینوکس، ویندوز و مک، به صورت پیشفرض و بدون نیاز به ابزاری خاص میتوانید از طریق خط فرمان PowerShell یا Terminal به دستور ssh
دسترسی داشته باشید.
البته در ارتباط با کامپیوترهای سرور این قضیه متفاوت است که ما قصد نداریم راجع به آن صحبت کنیم. در ادامه چند دستور ساده و کاربردی ssh را بررسی خواهیم کرد.
دسترسی به سرور از طریق SSH
برای دسترسی به یک سرور از طریق SSH، میتوانید از دستور زیر در ترمینال یا کنسول خود استفاده کنید:
ssh username@hostname
در این مثال username
نام کاربری است که شما روی سرور دارید و hostname
آدرس IP یا نام دامنه سرور مورد نظر است.
انتقال فایل با استفاده از SCP
SCP یکی از ابزارهای SSH است برای انتقال فایل بین دو کامپیوتر استفاده میشود. مثلاً برای کپی یک فایل از سیستم محلی به سرور، میتوانید از دستور زیر استفاده کنید:
scp path/to/local/file username@hostname:path/to/remote/directory
و برای انتقال فایل از سرور به سیستم محلی میتوانید به شکل زیر عمل کنید:
scp username@hostname:path/to/remote/file path/to/local/directory
ایجاد کلیدهای SSH برای ورود بدون رمز عبور
با ایجاد کلیدهای SSH میتوانید بدون وارد کردن رمز عبور وارد سرور شوید. این کار با اجرای دستور زیر در سیستم محلی شما انجام میشود:
ssh-keygen -t rsa
پس از ایجاد کلیدها، باید کلید عمومی خود را به فایل ~/.ssh/authorized_keys
در سرور اضافه کنید.
اجرای دستورات روی سرور
برای اجرای دستورات روی یک سرور از طریق SSH، میتوانید از ساختار زیر استفاده کنید:
ssh username@hostname "command_to_run"
برای مثال، برای بهروزرسانی پکیجها روی یک سرور Ubuntu، میتوانید دستور زیر را اجرا کنید:
ssh username@hostname "sudo apt-get update && sudo apt-get upgrade -y"
جمعبندی
SSH را میتوان یکی از ضروریترین ابزارهای مدیریت سرور دانست که بسیاری از متخصصین حوزههای مختلف نرمافزار روزانه از آن استفاده میکنند. در این مطلب از وبلاگ همروش ما به صورت کامل SSH را بررسی کردیم و همچنین با ساختار و شیوه کارکرد آن آشنا شدیم. برای درک عمیق