SSH Key چیست و چگونه به امنیت سرور کمک میکند؟
کلیدهای SSH نه تنها امنیت را بهبود میبخشد، بلکه اتوماسیون فرآیندهای متصل، single sign-on (SSO) و مدیریت هویت و دسترسی را در مقیاسی که کسب و کارهای امروزی به آن نیاز دارند، امکان پذیر میکنند. در این مطلب به معرفی SSH Key و بررسی ویژگیهای آن خواهیم پرداخت.
SSH یکی از قدیمیترین پروتکلهایی است که در شبکه برای ارتباطات رمزگذاری شده ایمن بین دو سیستم و مدیریت از راه دور سرورها استفاده میشود. از زمان معرفی، آنها توسط تیمهای فناوری اطلاعات در سازمانهای سراسر جهان برای مدیریت داراییهای خود استفاده شده است. کلیدهای SSH نقش مهمی در اعطای دسترسی ایمن به سیستمهای کامپیوتری ایفا میکنند و با رونق محاسبات ابری، نقشهای مهمتری هم خواهند داشت.
پروتکل SSH چگونه کار میکند؟
پروتکل SSH برای دسترسی ریموت به یک سیستم از طریق سیستم دیگر استفاده میشود. سیستمی که کاربر سعی دارد به آن دسترسی پیدا کند، میزبان (Host) و سیستم مورد استفاده برای دسترسی به آن، کلاینت (Client) نامیده میشود.
برای اینکه یک کلاینت از راه دور به میزبان دسترسی داشته باشد، هر دو سیستم باید بتوانند اطلاعات به یکدیگر ارسال و دریافت کنند. پروتکل SSH از تکنیکهای کریپتوگرافی برای رمزگذاری این ارتباط استفاده میکند. این پروتکل از کلیدهای متقارن (symmetric) و نامتقارن (asymmetric) برای امنیت استفاده مینماید.
در رمزگذاری کلید متقارن، هم رمزگذاری و هم رمزگشایی با یک کلید انجام میشود یا میتوان کلید رمزگشایی را از کلید رمزگذاری تولید کرد. در مورد رمزگذاری نامتقارن، کلید عمومی (public key) فقط میتواند برای رمزگذاری پیام استفاده شود. برای رمزگشایی پیام به کلید خصوصی (private key) نیاز دارید.
مذاکره رمزگذاری سرور
هنگامی که یک سرور درخواست اتصال SSH را دریافت کرد، مذاکره رمزگذاری سرور آغاز میشود. در طول این فرآیند، پروتکل از یک فرآیند رمزگذاری نامتقارن با الگوریتم تبادل کلید Diffie-Hellman (DH) برای تشکیل یک secret key مشترک برای اتصال SSH استفاده میکند.
کلاینت و میزبان بر روی یک پروتکل رمزگذاری و همچنین دو عدد توافق میکنند. با استفاده از دو عدد و شمارهای که توسط دو موجود جداگانه انتخاب شده است، دو ماشین آن را به معادلهای که فقط بین آنها شناخته شده است اعمال کرده و بعد نتیجه نهایی بین دو دستگاه رد و بدل میشود. سپس با استفاده از نتیجه دریافت شده از دیگری، ماشینها محاسبه دیگری را برای تشکیل یک کلید مشترک مخفی (secret shared key) انجام میدهند. این کلید مشترک مخفی برای ایجاد یک ارتباط امن بین میزبان و کلاینت استفاده میشود. اما این بدان معنا نیست که کاربر به سرور دسترسی پیدا میکند. قبل از این، کاربر باید احراز هویت شود.
احراز هویت کاربر
اگر از روش نام username/password استفاده میکنید، احراز هویت یک کاربر بسیار ساده است. کاربر نام کاربری و رمز عبور را وارد کرده که رمزگذاری شده و از کلاینت به میزبان ارسال میشود و در صورت قبولی، کاربر به سرور دسترسی پیدا میکند.
از آنجایی که رمز عبور رمزگذاری شدهاند، شخص ثالث نمیتواند آن را بفهمد حتی اگر به پیامها دسترسی داشته باشد. اما باید توجه کنیم که یک رمز عبور، به اندازه قدرتش امن است. اگر مهاجم بتواند رمز عبور را حدس بزند، بازی تمام شده است. روش ایمنتر استفاده از کلید SSH یا جفت کلید SSH است.
کلید SSH چیست؟
کلید SSH یک اعتبار دسترسی ایمن است که در پروتکل SSH استفاده میشود. جفتهای کلید SSH از فناوری زیرساخت کلید عمومی (PKI)، استاندارد طلایی برای احراز هویت و رمزگذاری هویت دیجیتال استفاده میکنند تا روشی امن و مقیاسپذیر برای احراز هویت ارائه کنند.
از آنجایی که پروتکل SSH به طور گسترده برای ارتباطات در سرویسهای ابری، محیطهای شبکه، ابزارهای انتقال فایل، ابزارهای مدیریت پیکربندی و سایر سرویسهای وابسته به کامپیوتر استفاده میشود، اکثر سازمانها از این نوع احراز هویت مبتنی بر کلید برای تایید هویت و محافظت از آن سرویسها در برابر سوء استفاده یا حملات مخرب استفاده میکنند.
جفت کلید (Key pair) - کلیدهای عمومی و خصوصی
کلید SSH متکی به استفاده از دو کلید مرتبط اما نامتقارن است، یک کلید عمومی (public key) و یک کلید خصوصی (private key) که با هم یک جفت کلید (Key pair) را ایجاد کرده که به عنوان اعتبار دسترسی ایمن استفاده میشود. کلید خصوصی مخفی (secret) و فقط برای کاربر شناخته شده است و باید رمزگذاری شده و به طور ایمن ذخیره شود. کلید عمومی را می توان آزادانه با هر سرور SSH که کاربر مایل به اتصال به آن است به اشتراک گذاشت. این کلیدها معمولا توسط تیم فناوری اطلاعات سازمان ، یا بهتر است بگوییم، با کمک یک مرجع معتبر صدور گواهی (CA) برای اطمینان از ذخیره ایمن آنها مدیریت میشوند.
برای ایجاد هویت دیجیتال، کلید عمومی و خصوصی هر دو تولید میشوند و این جفت با استفاده از یک الگوریتم رمزنگاری کلید عمومی قوی با یکدیگر مرتبط میشوند. رایج ترین الگوریتم های ریاضی مورد استفاده برای تولید کلید عبارتند از Rivest-Shamir-Adleman (RSA) و Elliptic Curve Digital Signature Algorithm (ECDSA) که یک کاربرد منحنی بیضوی DSA است.
این الگوریتمها از روشهای محاسباتی مختلفی برای تولید ترکیبهای عددی تصادفی با طولهای مختلف استفاده میکنند تا نتوان از آنها با یک حمله brute force بهرهبرداری کرد. اندازه کلید یا طول بیت به تعیین قدرت محافظت کمک میکند. کلیدهای 2048 بیتی RSA یا کلیدهای 521 بیتی ECDSA دارای قدرت رمزنگاری کافی برای جلوگیری از شکستن الگوریتم توسط هکرها هستند.
کلیدهای SSH چگونه کار میکنند؟
جفت کلید SSH برای احراز هویت کاربر یا فرآیندی استفاده میشود که میخواهد با استفاده از پروتکل SSH به یک سیستم راه دور دسترسی پیدا کند. کلید عمومی هم توسط کاربر و هم سرور ریموت برای رمزگذاری پیامها استفاده میشود. در سمت سرور ریموت، در یک فایل کلید عمومی ذخیره میشود. در سمت کاربر، در نرم افزار مدیریت کلید SSH یا در یک فایل در کامپیوتر آنها ذخیره میشود. کلید خصوصی فقط روی سیستمی که برای دسترسی به سرور ریموت استفاده میشود باقی مانده و برای رمزگشایی پیامها استفاده میشود.
هنگامی که یک کاربر یا فرآیند درخواست اتصال به سرور راه دور را با استفاده از سرویس گیرنده SSH میکند، یک دنباله چالش-پاسخ (challenge-response) برای تکمیل احراز هویت آغاز میشود. سرور SSH تشخیص میدهد که یک اتصال در حال درخواست است و یک درخواست چالش رمزگذاری شده را با استفاده از اطلاعات کلید عمومی shared ارسال میکند. سپس کلاینت SSH پیام چالش را رمزگشایی کرده و به سرور پاسخ میدهد. کاربر یا فرآیند باید به چالشی که به آن اجازه دسترسی داده شود پاسخ صحیح دهد. این دنباله چالش-پاسخ به طور خودکار بین سرویس گیرنده SSH و سرور بدون هیچ گونه اقدام دستی توسط کاربر اتفاق میافتد.
مقایسه احراز هویت کلید عمومی SSH و رمز عبور
SSH keys با کنترل دسترسی مانند رمزهای عبور عمل میکنند. اما درست همین جا است که شباهت به پایان میرسد. هویتهای دیجیتال باید قوی باشند تا نتوان آنها را به سرقت برد، راحت باشد تا دسترسی سریع بوده و هرگز قطع نشود و آیندهنگر باشد تا شرکتها بتوانند از تهدیدات احتمالی جلوتر باشند.
رمزهای عبور برای افزایش امنیت استفاده میشدند، اما دیگر به اندازه گذشته موثر نیستند. به این دلیل که بازیگران بد به طور فزایندهای در سرقت رمزهای عبور از طریق اینترنت، برداشتن آنها از مخازن و به دست آوردن آنها از طریق حملات brute force مهارت پیدا کردهاند.
این خطرات و مسائل امنیتی با عامل انسانی ترکیب میشوند: اینکه مردم از رمزهای عبور تکراری استفاده میکنند، رمز عبور را به اشتراک میگذارند یا مدام آن را فراموش میکنند. هزینه برای کسب و کارها بالا است، نه تنها به دلیل از دست دادن داده و به خطر افتادن اطلاعات، بلکه به این دلیل که ورود با رمزهای عبور زمانبر است، نیاز به منابع پشتیبانی قابل توجهی دارد و ممکن است مدام نیاز به ریست داشته باشد.
با استفاده از قدرت رمزنگاری و روشهای احراز هویت PKI، کلیدهای SSH مستعد حملات مخرب نیستند و اگر سروری در معرض خطر قرار گرفته باشد، اعتبارنامههای معتبر در معرض خطر قرار نمیگیرند. رمزنگاری PKI به طور مداوم بهبود مییابد و هویتهای آینده را در برابر تهدیدات جدید و در حال تکامل محافظت میکند.
احراز هویت SSH key هم راحتتر از احراز هویت با رمز عبور است. کلیدها با شروع احراز هویت و اعطای دسترسی خودکار، کاربران و فرآیندها را به سرور متصل میکنند، بنابراین کاربران مجبور نیستند رمز عبور خود را برای هر سیستمی به خاطر بسپارند یا وارد کنند.
همانطور که گفته شد، شما همیشه باید کلیدهای خصوصی SSH خود را با رمز عبور محافظت کنید، یا آنها را برای امنیت بیشتر در یک توکن سخت افزاری ذخیره کنید.
کلیدهای SSH خود را کجا پیدا کنید
قبل از اینکه بتوانید از کلیدهای SSH استفاده کنید، باید بررسی کنید که حساب کاربری شما آنها را دارد و در غیر این صورت، باید آنها را ایجاد کنید. چندین راه برای انجام این کار وجود دارد، مانند استفاده از Yubikeys یا سایر راهکارهای امنیت سخت افزاری، که اغلب امن ترین راه هستند. با این حال، برای راه اندازی اولیه ، می توانید از دایرکتوری ssh. استفاده کنید.
اگر استفاده از دایرکتوری ssh. را انتخاب کنید، میتوانید جفت کلید SSH خود را با دنبال کردن این مراحل پیدا کنید:
- دنبال دایرکتوری SSH بگردید. برای Linux و MacOS، مکان پیشفرض دایرکتوری ssh~/. و در ویندوز، C:\Users\
\.ssh است. - به دنبال دو فایل با نامهای مشابه باشید که یکی از آنها پسوند pub. داشته باشد ( مثال id_rsa.pub و id_rsa). فایل pub. کلید عمومی و دیگری کلید خصوصی است. کلید عمومی ممکن است همیشه وجود نداشته باشد زیرا برای کارکردن به کلاینت نیازی نیست.
اگر این فایلها را در دایرکتوری پیدا نکردید یا اصلا آن دایرکتوری را ندارید، باید کلیدهای SSH را ایجاد کنید.
آموزش تولید کلید SSH
برای تولید جفت کلید عمومی/خصوصی SSH، میتوان این کار را به صورت دستی انجام داد یا از یک سیستم مدیریت گواهی خودکار استفاده کرد.
تولید و ذخیره کلیدهای SSH جدید به صورت دستی در رایج ترین سیستم عاملها قابل انجام است. در سیستمهای ویندوز، آنها را می توان با استفاده از ابزار خط فرمان ssh-keygen یا یک کلاینت SSH مانند PuTTy تولید کرد. در سیستم های MacOS و لینوکس، آنها با استفاده از ترمینال تولید میشوند.
برای تولید یک کلید SSH، مراحل خط فرمان زیر را انجام دهید:
- دستور زیر را وارد کنید
key gen command $ ssh-keygen -t rsa
- نام فایلی را وارد کنید که در آن کلیدها ذخیره شوند. به طور معمول، کلیدهای ذخیره شده در دایرکتوری home یا دایرکتوری ssh~/. هستند. پس از انتخاب نام فایل Enter را فشار دهید.
- یک رمز (passphrase) وارد کرده یا خالی بگذارید. توجه: رمز عبور، یک لایه اضافی محافظت از رمز عبور برای جفت کلید فراهم میکند، ولی کاربر باید هر بار که از جفت کلید استفاده میشود، passphrase را تایپ کند.
پس از ایجاد جفت (pair)، مرحله بعدی قرار دادن کلید عمومی در سرور ریموت است. یک مدیر سیستم میتواند کلید عمومی SSH را با استفاده از دستور ssh-copy-id در فایل authorized_keys سرور ریموت کپی کند. همچنین، میتوانید مانند نمونه زیر کلیدها را با استفاده از دستور شل پیست کنید.
cat ~/.ssh/id_rsa.pub | ssh username@IP address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys"
این مراحل به شما امکان میدهد از فایل کلید خصوصی برای احراز هویت SSH استفاده کنید.
پیکربندی SSH
شما می توانید SSH را با تغییر فایل پیکربندی system-wide در سرور پیکربندی کنید. معمولا نام فایل etc/ssh/sshd_config/ است.
هنگامی که به فایل etc/ssh/sshd_config/ دسترسی پیدا کردید، میتوانید از آن برای کنترل اینکه کدام کاربران و چه گروههایی به SSH دسترسی دارند، استفاده کنید.
به طور مشابه، پیکربندی کلاینت لوکال را میتوان در یک فایل ssh/config. انجام داد. از طریق این فایل، کاربر میتواند پیکربندی خاصی را بر اساس هر میزبان اضافه کند، از جمله، تنظیم کلید خصوصی برای استفاده از کدام سرور و نام کاربری و راهاندازی تانلهای SSH.
مدیریت کلید SSH
مدیریت صحیح کلید SSH برای سازمانها ضروری است زیرا این کلیدها به سیستمها و دادههای تجاری حیاتی دسترسی دارند. با این حال، مدیریت آنها به صورت دستی می تواند زمان بر و مستعد خطا باشد. با این واقعیت که سازمانها معمولا هزاران، اگر نگوییم میلیونها کلید در سرتاسر محیط خود ذخیره میکنند، پیچیدهتر میشود. اگر سیاستهای پیکربندی، تدارک و خاتمه وجود نداشته باشد و به طور فعال مدیریت نشود، میتواند به راحتی امنیت را تضعیف کند.
به عنوان مثال، هنگامی که کلیدهای صادر شده دیگر مورد نیاز نیست، مانند زمانی که کارکنان سازمان را ترک میکنند، کارکنان IT ممکن است فراموش کنند که آنها را terminate ککند. کشف چنین کلیدهای یتیم تقریبا غیرممکن است، که خطر وجود آنها را در سیستمهایی که از نزدیک کنترل نمیشوند ایجاد مینماید. اگر این کلیدهای یتیم محافظت نشده باشند، میتوانند توسط یک عامل مخرب سرقت شوند، که سپس میتواند از اعتبارنامههای هنوز فعال برای دسترسی به سیستمها و دادههای مهم تجاری شما استفاده کند.
راه حلهای اختصاصی مدیریت کلید SSH با استفاده از برنامه کمکی ssh-agent برای تهیه، پیکربندی و terminate کلیدها در دسترس هستند. استفاده از این راه حلها به طور قابل توجهی بهتر از مدیریت دستی است، اما این رویکرد مستلزم آن است که کارکنان پرمشغله IT علاوه بر راه حلهای امنیتی و اداری موجود، از ابزار مدیریت دیگری نیز استفاده کنند. در عوض، تیمهای فناوری اطلاعات باید از یک راهحل مدیریت گواهی متمرکز استفاده کنند که به طور خودکار تمام گواهیهای مبتنی بر PKI را مدیریت میکند. استفاده از یک رویکرد منحصر به فرد برای مدیریت گواهی به کارکنان فناوری اطلاعات اجازه می دهد تا تمام وظایف مدیریتی کلیدی خود را در یک داشبورد انجام دهند.
خرید سرور مجازی لینوکس در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
چرا احراز هویت با استفاده از کلید SSH به جای رمز عبور؟
بدون شک، مزیت اصلی احراز هویت با استفاده از کلید عمومی SSH نسبت به احراز هویت با استفاده از رمز عبور امنیت خواهد بود. مهم نیست که یک رمز عبور چقدر طولانی یا پیچیده باشد، هرگز نمیتواند با قدرت رمزنگاری که کلید عمومی SSH ارائه میدهد برابری کند.
رمز عبور مستعد حمله brute-force توسط یک کاربر مخرب است یا بدتر از آن، رمز عبور حتی میتواند توسط شخصی که اطلاعات شخصی کاربر را میداند بازیابی و استفاده شود.
علاوه بر این، استفاده از کلید عمومی SSH نیاز کاربران را برای به خاطر سپردن رمزهای عبور پیچیده یا تایپ آنها از بین میبرد.
احراز هویت کلید عمومی همچنین امکان ورود غیرتعاملی را در صورتی که کاربر نیاز داشته باشد چندین بار به یک سرور، دسترسی داشته باشد بدون نیاز به ورود رمز عبور در هر بار ورود به سیستم را فراهم میکند. همچنین برای خودکار کردن فرآیندهایی که نیاز به احراز هویت دارند و از یک ماشین راه دور میآیند، مفید است.
پارسدو برای افزایش امنیت سرورهای مجازی قابلیت استفاده از SSH Key را در صفحه مدیریت سرور برای کاربران خود ایجاد کرده است.
پس از ورود به صفحه مدیریت سرور مجازی و کلیک روی دکمه «تغییر رمز عبور root لینوکس»، پنجره زیر باز میشود که علاوه بر تنظیم رمز عبور جدید، میتوانید از زبانه SSH KEY کلید عمومی خود را وادر کرده و ذخیره نمائید.
کلاینت PuTTY SSH برای ویندوز از فرمت کلید مشابه با کلاینت OpenSSH استفاده نمیکند. اگر میخواهید از PuTTY استفاده کنید، باید یک کلید عمومی و خصوصی جدید SSH با استفاده از ابزار PuTTYgen ایجاد یا یک کلید خصوصی OpenSSH موجود را تبدیل کنید.