SSH که با نامهای Secure Shell یا Secure Socket Shell نیز شناخته میشود، یک پروتکل شبکه است که به کاربران، به ویژه مدیران سیستم، امکان دسترسی امن به رایانه از طریق یک شبکه ناامن را میدهد.
همچنین SSH به مجموعه ابزارهایی اشاره دارد که پروتکل SSH را پیادهسازی میکنند. Secure Shell ، امکان احراز هویت رمز عبور قوی و احراز هویت کلید عمومی و نیز ارتباطات داده رمزگذاری شده بین دو کامپیوتری که از طریق یک شبکه باز مانند اینترنت متصل میشوند را فراهم میکند.
علاوه بر ارائه رمزگذاری قوی، SSH به طور گسترده توسط مدیران شبکه برای مدیریت سیستمها و برنامههای کاربردی از راه دور استفاده میشود و آنها را قادر میسازد تا از طریق شبکه به رایانه دیگری وارد شوند، دستورات را اجرا کنند و فایلها را از یک رایانه به رایانه دیگر منتقل کنند.
SSH، هم به پروتکل شبکه رمزنگاری و هم به مجموعه ابزارهایی که آن پروتکل را پیادهسازی میکنند اشاره دارد. SSH از مدل client-server استفاده میکند و یک درخواست کلاینت پوسته امن که انتهای جلسهای است که نشان داده میشود را با یک سرور SSH که انتهای جلسهای است که اجرا میشود، متصل میکند.
پیادهسازی SSH معمولا شامل پشتیبانی از پروتکلهای کاربردی مورد استفاده برای شبیهسازی ترمینال یا انتقال فایل است.
SSH همچنین میتواند برای ایجاد تونلهای امن برای سایر پروتکلهای کاربردی استفاده شود. به عنوان مثال، برای اجرای ایمن جلسات گرافیکی X Window System از راه دور.
یک سرور SSH، به طور پیشفرض، به پورت ۲۲ پروتکل TCP گوش میدهد.
پروتکل SSH چگونه کار میکند؟
SSH برای جایگزینی برنامههای شبیهسازی ترمینال ناامن یا login سیستم، مانند Telnet، rlogin (ورود از راه دور) و rsh (پوسته از راه دور) ایجاد شد.
SSH نیز همان عملکردها را فعال میکند (ورود به سیستم و اجرای جلسات ترمینال در سیستمهای راه دور). SSH همچنین جایگزین برنامههای انتقال فایل مانند FTP (پروتکل انتقال فایل) و rcp (کپی از راه دور) میشود.
اساسیترین کاربرد SSH ، اتصال به یک میزبان راه دور برای یک نشست ترمینال است. شکل دستور به صورت زیر است:
ssh UserName@SSHserver.example.com
این دستور باعث میشود که client سعی کند با استفاده از شناسه کاربری (UserName) به سروری به نام server.example.com متصل شود.
اگر برای اولین بار است که مذاکره برای اتصال بین میزبان محلی و سرور انجام میشود، از کاربر خواسته میشود کلید واژه میزبان راه دور را دریافت کند و علیرغم اینکه قبلاً اتصالی وجود نداشته است، متصل شود.
SSH برای چه مواردی استفاده میشود؟
SSH در همه مراکز داده وجود دارد و به طور پیش فرض با هر سرور یونیکس، لینوکس و مک ارائه میشود. اتصالات SSH برای ایمنسازی انواع مختلف ارتباطات بین یک ماشین محلی و یک میزبان راه دور، از جمله دسترسی از راه دور امن به منابع، اجرای دستورات از راه دور، تحویل patchهای نرمافزاری، و بهروزرسانیها و سایر وظایف اداری یا مدیریتی استفاده میشوند.
علاوه بر ایجاد یک کانال امن بین کامپیوترهای محلی و راه دور، SSH برای مدیریت روترها، سخت افزار سرور، پلتفرمهای مجازیسازی، سیستمعاملها و مدیریت داخلی سیستمها و برنامههای کاربردی انتقال فایل استفاده میشود.
Secure Shell برای اتصال به سرورها، ایجاد تغییرات، انجام آپلود و خروج، یا با استفاده از ابزارها یا مستقیماً از طریق ترمینال استفاده میشود.
کلیدهای SSH میتوانند برای خودکارسازی دسترسی به سرورها استفاده شوند و اغلب در اسکریپتها، سیستمهای پشتیبانگیری و ابزارهای مدیریت پیکربندی استفاده میشوند.
کلیدهای SSH به گونهای طراحی شدهاند که راحت باشند و در سراسر سازمان کار کنند. کلیدهای SSH یک single sign-on (SSO) را ارائه میدهند تا کاربران بتوانند هر بار بدون تایپ رمز عبور، بین حسابهای خود سوئیچ کنند.
درحالیکه پروتکل SSH نقشهای محوری در مدیریت هویت و مدیریت دسترسی ایفا میکند، چیزی بیش از احراز هویت از طریق یک اتصال رمزگذاری شده را انجام میدهد.
تمام ترافیک SSH رمزگذاری شده است. کاربران چه در حال انتقال یک فایل، مرور وب یا اجرای یک دستور باشند، کلیه فعالیتهای آنها خصوصی خواهد بود.
با وجودی که امکان استفاده از SSH با شناسه کاربری و رمز عبور معمولی وجود دارد، SSH اغلب به جفت کلید عمومی برای احراز هویت میزبانها برای یکدیگر متکی است.
تک تک کاربران هنوز باید از شناسه کاربری و رمز عبور خود (یا سایر روشهای احراز هویت) برای اتصال به میزبان راه دور استفاده کنند، ولی ماشین محلی و ماشین راه دور به طور جداگانه به یکدیگر احراز هویت میشوند. این کار با ایجاد یک جفت کلید عمومی منحصر به فرد برای هر میزبان در ارتباط انجام میشود.
یک نشست به دو جفت کلید عمومی نیاز دارد: یک جفت کلید عمومی برای احراز هویت ماشین راه دور به ماشین محلی و یک جفت کلید عمومی برای احراز هویت ماشین محلی به ماشین راه دور.
قابلیتهای Secure Shell
قابلیتهایی که SSH ارائه میکند شامل موارد زیر است:
- دسترسی از راه دور ایمن به سیستمها یا دستگاههای شبکه دارای SSH، برای کاربران و همچنین فرآیندهای خودکار
- نشستهای انتقال فایل امن و تعاملی
- انتقال خودکار و ایمن فایل
- صدور امن دستورات در دستگاهها یا سیستمهای راه دور
- مدیریت ایمن اجزای زیرساخت شبکه
SSH را میتوان به صورت تعاملی برای فعال کردن نشستهای ترمینال نیز استفاده کرد. همچنین SSH معمولاً در اسکریپتها و سایر نرمافزارها استفاده میشود تا امکان دسترسی از راه دور و امن به دادهها و منابع توسط برنامهها و سیستمها را فراهم آورد.
تاریخچه SSH
اولین نسخه SSH در سال 1995 توسط Tatu Ylönen – که در آن زمان محققی در دانشگاه فناوری هلسینکی بود – طراحی شد. با گذشت زمان، نقصهای مختلفی در SSH-1 یافت شد. این نسخه در حال حاضر منسوخ شده و برای استفاده امن نیست.
SSH-2، نسخه فعلی پروتکلهای Secure Shell، در سال 2006 توسط کارگروه مهندسی اینترنت (IETF) به عنوان مشخصات Track استاندارد پذیرفته شد. SSH-2 با SSH-1 سازگار نیست و از تبادل کلید Diffie-Hellman و بررسی یکپارچگی قویتر برای بهبود امنیت استفاده میکند.
کلاینتها و سرورهای SSH میتوانند از چند روش رمزگذاری استفاده کنند، که بیشتر استاندارد رمزگذاری پیشرفته (AES) و Blowfish مورد استفاده قرار میگیرد.
هیچ آسیبپذیری قابل سوء استفاده شناخته شدهای در SSH-2 وجود ندارد، اگرچه اطلاعاتی که از Edward Snowden در سال 2013 به بیرون درز کرد نشان میدهد که آژانس امنیت ملی (NSA) ممکن است بتواند برخی از ترافیک SSH را رمزگشایی کند.
مسائل امنیتی Secure Shell
شرکتهایی که از SSH استفاده میکنند باید راههایی برای مدیریت کلیدهای میزبان ذخیرهشده در سیستمهای Client بیابند. این کلیدها میتوانند در طول زمان جمع شوند، به ویژه برای کارکنان IT که برای اهداف مدیریتی نیاز به دسترسی به میزبانهای راه دور دارند.
از آنجایی که دادههای ذخیره شده در فایل SSHknown_hosts را میتوان برای دسترسی تایید شده به سیستمهای راه دور مورد استفاده قرار داد، سازمانها باید از وجود این فایلها آگاه باشند و یک فرآیند استاندارد برای حفظ کنترل روی فایلها، حتی پس از خروج سیستم از مجموعه را داشته باشند، زیرا هارد دیسکها میتوانند این دادهها را در قالب یک متن ساده ذخیره کنند.
توسعه دهندگان باید هنگام ترکیب دستورات یا توابع SSH در یک اسکریپت یا نوع دیگری از برنامه، مراقب باشند. با وجودی که ممکن است یک فرمان SSH صادر شود که شامل شناسه کاربری و رمز عبور برای احراز هویت کاربر ماشین محلی به یک حساب در میزبان راه دور است، انجام این کار ممکن است اعتبار را در معرض یک مهاجم با دسترسی به کد منبع قرار دهد.
Shellshock (یک حفره امنیتی در پردازنده فرمان Bash)، میتواند از طریق SSH اجرا شود، اما این یک حفره امنیتی در Bash است، نه در SSH.
بزرگترین تهدید برای SSH، مدیریت ضعیف کلید است. بدون ایجاد تمرکز، سازمانها میتوانند کنترل خود بر اینکه چه کسی و چه زمانی به کدام منابع دسترسی دارد را از دست بدهند، بهویژه زمانی که SSH در فرآیندهای خودکار اپلیکیشن به اپلیکیشن استفاده میشود.
SSH و Telnet
Telnet یکی از اولین پروتکلهای برنامه کاربردی اینترنت است و برای شروع و حفظ یک نشست شبیهسازی ترمینال، در یک میزبان راه دور استفاده میشود.
SSH و Telnet از نظر عملکردی مشابه هستند، تفاوت اصلی در این است که پروتکل SSH از رمزنگاری کلید عمومی برای تأیید اعتبار نقاط پایانی هنگام تنظیم یک نشست ترمینال و همچنین برای رمزگذاری دستورات نشست و خروجی استفاده میکند.
Telnet عمدتاً برای شبیهسازی ترمینال استفاده میشود، درحالیکه SSH میتواند برای انجام شبیهسازی ترمینال (مشابه دستور rlogin) و همچنین برای صدور دستورات از راه دور مانند rsh، انتقال فایلها با استفاده از پروتکل انتقال فایل SSH ا(SFTP) و تونلزنی سایر برنامههای کاربردی مورد استفاده قرار گیرد.
SSH و SSL/TLS
پروتکل امنیت لایه انتقال (TLS) که پروتکل لایه سوکتهای امن (SSL) را بروز میکند، برای ایجاد امنیت در لایه انتقال طراحی شده است. پروتکل SSH نیز در لایه انتقال یا دقیقا در بالای آن عمل میکند، اما تفاوتهای مهمی بین این دو پروتکل وجود دارد.
با وجودی که هر دو به جفت کلید عمومی/خصوصی برای احراز هویت هاست متکی هستند، سرور فقط با یک جفت کلید تحت TLS احراز هویت میشود درحالیکه SSH از یک جفت کلید جداگانه برای احراز هویت هر اتصال استفاده میکند: یک جفت کلید برای اتصال از یک ماشین محلی به یک ماشین راه دور و یک جفت کلید برای تأیید اعتبار اتصال از ماشین راه دور به ماشین محلی.
تفاوت دیگر بین SSH و TLS در این است که TLS امکان رمزگذاری اتصالات را بدون احراز هویت یا احراز هویت بدون رمزگذاری را فراهم میکند، اما SSH همه اتصالات را رمزگذاری و احراز هویت میکند.
SSH به متخصصان IT و امنیت اطلاعات، مکانیزمی امن برای مدیریت کلاینتهای SSH از راه دور ارائه میدهد. SSH به جای نیاز به احراز هویت رمز عبور، برای راهاندازی ارتباط بین کلاینت و سرور SSH، خود دستگاهها را احراز هویت میکند.
این کار کارکنان IT را قادر میسازد تا با سیستمهای راه دور ارتباط برقرار کرده و پیکربندیهای SSH از جمله افزودن یا حذف جفتهای کلید میزبان را در فایل میزبانان شناخته شده، اصلاح کنند.
پیادهسازی پروتکل SSH
SSH یک پروتکل باز است و برای اکثر پلتفرمهای محاسباتی پیادهسازی شده است. اجرای OpenSSH منبع باز، یکی از رایجترین موارد در لینوکس، یونیکس و سایر سیستمعاملهای مبتنی بر توزیع نرمافزار، از جمله BSD و macOS است.
OpenSSH از سال 2015 برای اجرا در Windows PowerShell منتقل شد. در سال 2018، پشتیبانی اختیاری OpenSSH به ویندوز 10 اضافه شد.
درحالیکه SSH به طور پیشفرض در اکثر سیستمعاملهای شبه یونیکس مستقیماً قابل دسترسی است، نسخه پورت شده OpenSSH مایکروسافت باید به در تنظیمات ویندوز فعال شود.
PuTTY یکی دیگر از نرمافزارهای متن باز SSH است که در حال حاضر برای Windows ،macOS و Unix/BSD در دسترس است. PuTTY در ابتدا برای اجرا در ویندوز نوشته شده بود و مدتها یکی از گزینههای برتر برای استفاده از SSH در سیستم عامل ویندوز بود.
اکثر پیادهسازیهای مجموعه SSH شامل سه مزیت است:
- slogin (ورود ایمن)
- ssh
- scp (کپی امن)
اینها نسخههای امن ابزارهای ناامن قبلی یونیکس هستند: rlogin، rsh و rcp.
SSH از رمزنگاری کلید عمومی برای تأیید اعتبار رایانه راه دور استفاده میکند و آن را قادر میسازد تا در صورت لزوم کاربر را تأیید کند.
در حال حاضر دهها پیادهسازی SSH برای پلتفرمهای مختلف و تحت انواع مجوزهای منبع باز و اختصاصی موجود است.
دستورات SSH
با وجودی که پیادهسازیهای گرافیکی SSH وجود دارد، برنامه معمولاً در خط فرمان فراخوانی میشود یا به عنوان بخشی از یک اسکریپت اجرا میشود.
اجرای دستور ssh به تنهایی، بدون آرگومانهایی مانند میزبان مقصد یاID کاربر، لیستی از پارامترها و گزینههای دستور SSH را برمیگرداند.
ابتداییترین شکل دستور SSH فراخوانی برنامه و نام میزبان مقصد یا آدرس IP است:
ssh server.example.org
این دستور به مقصد، server.example.org متصل میشود. میزبان مقصد با درخواست رمز عبور برای ID کاربر حسابی که کلاینت تحت آن در حال اجرا است، پاسخ خواهد داد.
به عبارت دیگر، اگر ID کاربری در حال استفاده jsmith باشد، میزبان راه دور یک رمز عبور مرتبط با حساب کاربری jsmith را میخواهد.
در بسیاری از موارد، ID کاربری برای میزبان راه دور متفاوت خواهد بود، در این صورت دستور باید با ID کاربر میزبان راه دور صادر شود، مانند این:
ssh remote_host_userID@server.example.org
همچنین SSH میتواند از خط فرمان برای صدور یک فرمان واحد در میزبان راه دور و سپس خروج استفاده شود. به عنوان مثال:
ssh example.org ls
این دستور فرمان Unix ls را اجرا میکند که تمام محتویات دایرکتوری فعلی را در میزبان راه دور فهرست میکند. با وجودی که این مثال بسیار ساده است اما نشان میدهد که SSH میتواند برای اجرای دستورات جالبتر در یک میزبان راه دور استفاده شود.
برای مثال، دستوری که میتواند یک نمونه سرور را راهاندازی کند که به یک ماشین راه دور امکان دسترسی به یک فایل یا منابع دیگر را میدهد و پس از دسترسی به فایل توسط میزبان راه دور مشخصشده، نشست را خاتمه میدهد.
علاوه بر فایل اجرایی ssh، پروتکل SSH دستورات اجرایی دیگری نیز دارد که در خط فرمان برای توابع دیگری استفاده میشوند، از جمله موارد زیر:
- sshd سرور SSH را راهاندازی میکند، که منتظر درخواستهای اتصال SSH ورودی میشود و سیستمهای مجاز را قادر میسازد به میزبان محلی متصل شوند.
- ssh-keygen برنامهای برای ایجاد یک جفت کلید احراز هویت جدید برای SSH است که میتواند برای خودکارسازی login، پیادهسازی SSO و احراز هویت میزبان استفاده شود.
- ssh-copy-id برنامهای است که برای کپی، نصب و پیکربندی یک کلید SSH روی سرور به منظور خودکارسازی login بدون رمز عبور و SSO استفاده میشود.
- ssh-agent یک برنامه کمکی است که کلیدهای هویت و عبارات عبور آنها را ردیابی میکند و کاربر را قادر میسازد تا از کلیدهای هویت برای ورود به سرورهای مختلف بدون نیاز به وارد کردن مجدد رمز عبور یا عبارت عبور استفاده کند.
- ssh-add برای افزودن یک کلید به عامل احراز هویت SSH و با ssh-agent برای پیادهسازی SSO با استفاده از SSH استفاده میشود.
- scp برنامهای است که برای کپی کردن فایلها از یک کامپیوتر به کامپیوتر دیگر استفاده میشود و نسخه SSH ایمن شده rcp است.
- sftp برنامهای است که برای کپی فایلها از یک کامپیوتر به کامپیوتر دیگر استفاده میشود و یک نسخه SSH ایمن شده از ftp، پروتکل اصلی انتقال فایل است. SFTP به مکانیسم ترجیحی برای به اشتراک گذاری فایل از طریق اینترنت تبدیل شده و جایگزین FTP و FTP/S (FTP Secure) شده است.
SSH tunneling چیست؟
SSH tunneling که به نام انتقال پورت SSH نیز شناخته میشود، تکنیکی است که کاربر را قادر میسازد تا یک تونل امن بین یک میزبان محلی و یک میزبان راه دور باز کند.
ارسال پورت SSH ترافیک شبکه را به یک آدرس پورت/IP خاص redirect میکند تا میزبان راه دور مستقیماً توسط برنامههای میزبان محلی قابل دسترسی باشد. مقصد ممکن است در سرور SSH راه دور باشد، یا آن سرور ممکن است برای ارسال به یک میزبان راه دور دیگر پیکربندی شده باشد.
تونلهای SSH ابزارهای قدرتمندی برای مدیران فناوری اطلاعات و همچنین عوامل مخرب هستند، زیرا میتوانند از فایروالهای پیشرفته سازمانی عبور کنند بدون اینکه کشف شوند. در نتیجه، ابزارهایی برای جلوگیری از استفاده غیرمجاز از تونلهای SSH از طریق فایروالها وجود دارد.