نحوه ایجاد کلید در سرور مجازی و سرور اختصاصی لینوکس
مقدمه: چرا رمز عبور دیگر امن نیست؟
آیا تا به حال فکر کردهاید که اگر رمز عبور سرور شما لو برود، چه فاجعهای رخ میدهد؟ تمام دادهها، سایتها و زحمات شما در چند ثانیه از دست میرود. در مقاله قبلی یاد گرفتیم که چطور به سرور وصل شویم، اما واقعیت تلخ این است: رمزهای عبور (Passwords) تکنولوژی مربوط به قرن گذشته هستند.
هکرها امروزه با استفاده از لیستهای میلیونی از رمزهای عبور و حملات Brute-force، میتوانند رمزهای ساده و حتی متوسط را در چند ساعت بشکنند. اما راه حل چیست؟ پاسخ SSH Key (کلیدهای رمزنگاری شده) است.
در این روش، به جای اینکه یک کلمه را حفظ کنید، یک فایل دیجیتالی بسیار پیچیده (شامل هزاران کاراکتر ریاضی) دارید. این فایل مانند یک “کلید فیزیکی خاص” عمل میکند که فقط در جیب شماست و هیچ هکری نمیتواند آن را حدس بزند.
در این مقاله جامع، قدمبهقدم یاد میگیرید که چگونه این کلیدها را بسازید و امنیت سرور خود را بیمه کنید.
مفهوم کلید عمومی و خصوصی (Public & Private Key)
قبل از اینکه دست به کار شویم، باید یک مفهوم حیاتی را درک کنید. سیستم SSH Key از یک جفت کلید استفاده میکند:
کلید عمومی (Public Key): این کلید حکم “قفل” را دارد. شما این فایل را روی سرور خود (یا هر سروری که میخواهید به آن وصل شوید) قرار میدهید. افشا شدن این کلید هیچ خطری ندارد (مثل اینکه قفل درب خانه شما را همه ببینند).
کلید خصوصی (Private Key): این کلید حکم “کلید واقعی” را دارد که در دست شماست. این فایل روی کامپیوتر شخصی شما میماند و هرگز، تحت هیچ شرایطی نباید آن را به کسی بدهید.
وقتی میخواهید وصل شوید، سرور (قفل) یک سوال ریاضی پیچیده میپرسد که فقط کلید خصوصی شما (کلید) میتواند به آن پاسخ دهد. اگر پاسخ درست بود، درب باز میشود.
بخش اول: آموزش ساخت کلید SSH (Generate Keys)
بسته به اینکه سیستم عامل کامپیوتر شما چیست (ویندوز یا لینوکس/مک)، روش ساخت کلید متفاوت است. ما هر دو روش را بررسی میکنیم.
۱. ساخت کلید در لینوکس و مک (Terminal)
اگر از سیستمعاملهای لینوکسی (مثل اوبونتو) یا macOS استفاده میکنید، همه چیز آماده است. ابزار ssh-keygen به صورت پیشفرض نصب است.
مراحل ساخت:
۱. ترمینال را باز کنید.
۲. دستور زیر را وارد کنید تا یک کلید قدرتمند (RSA 4096 bit) ساخته شود:
ssh-keygen -t rsa -b 4096 -C "VPS-IRPOWER"
۳. سیستم از شما میپرسد فایل را کجا ذخیره کنم؟ Enter file in which to save the key (/home/user/.ssh/id_rsa): معمولاً کافیست Enter را بزنید تا در مسیر پیشفرض ذخیره شود یا آدرس مد نظر خود را وارد نمایید.
۴. سپس از شما یک Passphrase میخواهد. Enter passphrase (empty for no passphrase):
نکته امنیتی: اگر اینجا رمز بگذارید، حتی اگر فایل کلید خصوصی شما دزدیده شود، دزد نمیتواند از آن استفاده کند چون رمز آن را ندارد. اما اگر میخواهید ورودتان کاملاً خودکار باشد، میتوانید آن را خالی بگذارید و Enter بزنید.

حالا شما دو فایل در پوشه .ssh/ دارید که با نام پیش فرض id_rsa است:
id_rsa (کلید خصوصی – محرمانه)
id_rsa.pub (کلید عمومی – قابل آپلود روی سرور)
اما در مثال تصویر بالا، آدرس کلید ها به VPSIRPOWER تغییر یافته است لذا در پوشه .ssh فایل ها به شکل زیر خواهند بود:
VPSIRPOWER (کلید خصوصی – محرمانه)
VPSIRPOWER.pub (کلید عمومی – قابل آپلود روی سرور)
جدول پارامترهای مهم دستور ssh-keygen
برای اینکه بتوانید کلیدهای سفارشی بسازید، در اینجا مهمترین سوئیچهای این دستور را در قالب یک جدول کاربردی آوردهایم:
| پارامتر / فلگ | کاربرد | مثال |
|---|---|---|
-t [Type] |
تعیین الگوریتم رمزنگاری (rsa یا ed25519) | ssh-keygen -t ed25519 |
-b [Bits] |
تعیین طول کلید (امنیت بیشتر با عدد بزرگتر) | ssh-keygen -t rsa -b 4096 |
-C [Comment] |
نوشتن یک یادداشت (مثل ایمیل) برای شناسایی کلید | -C "[email protected]" |
-f [Filename] |
ذخیره کلید با نام دلخواه (غیر از نام پیشفرض) | -f ~/.ssh/vpsirpower |
-p |
تغییر رمز عبور (Passphrase) یک کلید قدیمی | ssh-keygen -p -f id_rsa |
۲. ساخت کلید در ویندوز (با ابزار PuTTYgen)
کاربران ویندوز معمولاً از نرمافزار PuTTY استفاده میکنند. برای ساخت کلید، باید ابزار جانبی آن یعنی PuTTYgen را باز کنید (این برنامه معمولاً همراه با PuTTY نصب میشود).
مراحل گامبهگام:
۱. برنامه PuTTYgen را اجرا کنید.
۲. در پایین پنجره، بخش Parameters، نوع کلید را روی RSA و مقدار بیت را روی ۴۰۹۶ قرار دهید (یا گزینه EDSA و سپس Ed25519 را انتخاب کنید که مدرنتر است).
۳. روی دکمه بزرگ Generate کلیک کنید.
۴. سپس برنامه از شما میخواهد موس را به صورت تصادفی در فضای خالی پنجره حرکت دهید. این کار باعث تولید اعداد تصادفی واقعی (Randomness) برای ساخت کلید میشود. موس را آنقدر تکان دهید تا نوار سبز پر شود.
۵. پس از تکمیل نوار سبز، در بخش Key و Public Key به شما محتوای کلید عمومی را نمایش می دهد که می توانید این محتوا را به فایل کلیدهای احراز شده یعنی فایل authorized_keys منتقل فرمایید. همچنین حتما توصیه می شود در بخش Key Comment، نام کلید را وارد نمایید، به طور مثال در تصویر زیر VPSIRPOWER وارد شده است.
نکته مهم: جهت تکمیل موارد امنیتی کلیدها، پیشنهاد اکید می شود با یک رمز مناسب بخش Key passphrase و Confirm passphrase را تکمیل فرمایید تا بر روی کلیدها رمز دسترسی نیز اعمال شود.
۶. در انتها نیز با کلیک بر روی Save private key ، کلید خصوصی و محرمانه را در جای امنی از سیستم خود با فرمت .ppk قرار دهید و با استفاده از دکمه Save public key نیز کلید عمومی و قابل انتقال به سرور را نیز با فرمت .pub در جایی از سیستم خود قرار دهید.

تفاوت فرمتهای کلید (OpenSSH vs PPK)
یکی از گیجکنندهترین موارد برای کاربران تازه کار، تفاوت فرمتهاست:
فرمت OpenSSH: استانداردی که لینوکس، مک و پاورشل ویندوز ۱۰/۱۱ میفهمند (معمولاً بدون پسوند یا با پسوند .pem).
فرمت PPK: فرمت اختصاصی نرمافزار PuTTY.
نکته: اگر کلید را در لینوکس ساختید و میخواهید در PuTTY استفاده کنید، باید آن را تبدیل (Convert) کنید. و اگر در PuTTYgen ساختید و میخواهید در لینوکس استفاده کنید، باید از منوی Conversions گزینه “Export OpenSSH key” را بزنید.
بخش دوم: نصب قفل روی سرور
اکنون که “کلید” (Private Key) را در جیب خود دارید، نوبت آن است که “قفل” (Public Key) را روی درب سرور نصب کنید. تا زمانی که کلید عمومی شما روی سرور قرار نگیرد، سرور شما را نخواهد شناخت.
در سیستمعامل لینوکس، تمام کلیدهای مجاز در یک فایل متنی ساده به نام authorized_keys ذخیره میشوند. این فایل در پوشه مخفی .ssh/ در خانه کاربر (Home Directory) قرار دارد.
ما دو روش برای انجام این کار داریم: روش سریع (مخصوص لینوکس/مک) و روش دستی (مخصوص ویندوز و همه سیستمها).
روش اول: انتقال اتوماتیک با دستور ssh-copy-id (سریعترین راه)
اگر روی کامپیوتر خودتان از لینوکس یا مک استفاده میکنید، نیازی نیست درگیر کپی کردن دستی متنها شوید. یک دستور جادویی وجود دارد که همه کارها را برای شما انجام میدهد.
مراحل انجام کار:
۱. ترمینال کامپیوتر خود را باز کنید.
۲. دستور زیر را تایپ کنید (به جای root و IP مشخصات سرور خود را بنویسید):
ssh-copy-id root@IP
همچنین در صورتی که کلید عمومی شما با نام دیگری غیر از id_rsa پیش فرض ساخته شده است مانند VPSIRPOWER، می توانید از دستور زیر استفاده فرمایید:
ssh-copy-id -i ~/.ssh/VPSIRPOWER.pub root@IP
۳. از شما یک بار رمز عبور فعلی سرور خواسته میشود. آن را وارد کنید.
تمام شد! سیستم به صورت خودکار محتوای فایل کلید عمومی شما را برداشته، به سرور متصل شده و آن را در انتهای فایل authorized_keys سرور اضافه میکند. حالا میتوانید بدون رمز وارد شوید.
روش دوم: انتقال دستی (مخصوص کاربران ویندوز و PuTTY)
اگر از ویندوز استفاده میکنید یا به هر دلیلی دستور بالا کار نکرد، باید آستینها را بالا بزنید و این کار را دستی انجام دهید. نترسید، کار سادهای است.
مراحل گامبهگام:
۱. فایل کلید عمومی خود را (که در مرحله قبل ساختید) با Notepad باز کنید و کل محتویات آن را کپی کنید. (انتهای نام فایل .pub است).
۲. با استفاده از رمز عبور کاربر سرور مجازی خود، به سرور SSH وصل شوید (با PuTTY یا CMD).
۳. حالا باید مطمئن شویم پوشه .ssh وجود دارد. دستور زیر را بزنید: mkdir -p ~/.ssh
۴. حالا باید فایل کلیدها را ایجاد یا ویرایش کنیم. می توانید از ویرایشگر nano یا vi استفاده کنید:
nano ~/.ssh/authorized_keys
۵. متنی که در مرحله ۱ مربوط به کلید عمومی کپی کرده بودید را اینجا Paste کنید. (در PuTTY معمولاً با راستکلیک موس پیست میشود).
نکته مهم: کلید باید حتماً به صورت یک خط بلند نوشته شود و نباید با زدن دکمه Enter وسط عبارت به خط بعدی برود.
۶. فایل را ذخیره کنید (Ctrl + O سپس Enter) و خارج شوید (Ctrl + X).
نکته مهم در مجوزهای دسترسی (Permissions)
یکی از رایجترین دلایلی که SSH Key کار نمیکند، تنظیم نبودن “مجوزهای دسترسی” است. لینوکس در مورد امنیت پوشه .ssh بسیار سختگیر است. اگر این پوشه برای “دیگران” قابل خواندن باشد، لینوکس به کلید شما اعتماد نمیکند و اجازه ورود نمیدهد.
بنابراین، حتماً بعد از ساخت فایل، دستورات زیر را روی سرور اجرا کنید:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
جدول راهنمای مجوزهای ضروری SSH
برای اینکه درک بهتری داشته باشید که چرا این دستورات را میزنیم، جدول زیر را بررسی کنید:
| فایل / پوشه | مجوز (Permission) | دستور اجرا | معنی فنی |
|---|---|---|---|
پوشه .ssh/ |
۷۰۰ (drwx——) | chmod 700 ~/.ssh |
فقط صاحب پوشه حق خواندن، نوشتن و ورود دارد (بقیه هیچ!). |
فایل authorized_keys |
۶۰۰ (-rw——-) | chmod 600 ... |
فقط صاحب فایل میتواند آن را بخواند یا ویرایش کند. |
فایل id_rsa (روی سیستم شما) |
۶۰۰ | (خودکار تنظیم میشود) | کلید خصوصی شما باید شدیداً محافظت شود. |
فایل id_rsa.pub |
۶۴۴ | مهم نیست | کلید عمومی حساسیت امنیتی ندارد. |
بخش سوم: نحوه اتصال به سرور با استفاده از کلید
حالا که کلید بر روی سرور نصب شد، در ادامه نحوه اتصال با کلید را بررسی خواهیم نمود. همچنین آموزش زیر به شما در اتصال به سرور از طریق SSH کمک خواهد نمود:
دسترسی به سرورهای لینوکس از طریق SSH
۱. اتصال در ترمینال (لینوکس، مک، ویندوز ۱۰/۱۱)
اگر فایل کلید خصوصی شما در مسیر پیشفرض (~/.ssh/id_rsa) باشد، دستور اتصال هیچ تغییری نمیکند: ssh [email protected] سیستم خودکار کلید را پیدا کرده و استفاده میکند.
اما اگر نام کلید را تغییر دادهاید یا فایل در جای دیگری است، باید از سوئیچ -i (مخفف Identity) استفاده کنید:
ssh -i /my/keys/my_private_key [email protected]
۲. اتصال با نرمافزار PuTTY (ویندوز)
کافی است فایل کلید خصوصی که در مراحل قبل با فرمت .ppk ایجاد شده را با دوبار کلیک اجرا کنید تا بهطور خودکار به کلیدهای برنامه PuTTY اضافه شود. اگر این کار روی سیستم شما با کلیک اجرا نشد، میتوانید روی آیکون برنامه Pageant کنار ساعت راستکلیک کرده و گزینه Add Keys را انتخاب کنید. سپس با انتخاب فایل .ppk، کلید خصوصی به لیست برنامه PuTTY اضافه میشود.
در صورتی که هر یک از این روشها را بهدرستی انجام دهید، با راستکلیک روی Pageant و انتخاب گزینه View Keys، کلید خصوصی اضافهشده را مشاهده خواهید کرد.

حالا طبق تصویر بالا، با کلیک راست بر روی برنامه pageant و کلیک بر روی New Session، آیپی و پورت SSH سرور را وارد کرده و Open را بزنید.
اگر همه چیز درست باشد، از شما نام کاربر (معمولا root) خواسته می شود که وارد نمایید و در نهایت بدون اینکه رمز عبوری تایپ کنید، وارد سرور میشوید! (اگر هنگام ساخت کلید Passphrase گذاشته باشید، آن رمز را از شما میپرسد).
عیبیابی: چرا هنوز رمز عبور میخواهد؟
اگر تمام مراحل را رفتید اما سرور همچنان از شما Password میخواهد، چکلیست زیر را بررسی کنید:
مجوزها: آیا دستور chmod 600 را روی فایل authorized_keys سرور اجرا کردید؟ (مهمترین دلیل).
فرمت کلید: آیا کلید عمومی را در یک خط ممتد کپی کردید؟ باز شدن فایل در Word یا برخی ویرایشگرها باعث شکسته شدن خطوط میشود.
فایل صحیح: مطمئن شوید که فایل .ppk را درست در PuTTY لود کردهاید.
تنظیمات SSH: گاهی اوقات تنظیمات SSH سرور دستکاری شده است. فایل /etc/ssh/sshd_config را چک کنید که عبارت PubkeyAuthentication روی yes تنظیم باشد.
بخش سوم: نکات حیاتی و تست نهایی (قبل از قطع ارتباط!)
بسیاری از کاربران دقیقا در همین نقطه دچار یک اشتباه مهلک میشوند: پس از تنظیم کلید، بلافاصله پنجره SSH را میبندند تا دوباره وارد شوند. دست نگه دارید! اگر اشتباهی در تنظیمات رخ داده باشد، با بستن این پنجره، شما برای همیشه دسترسی به سرور را از دست میدهید (مگر اینکه دسترسی کنسول یا VNC داشته باشید).
قانون طلایی تغییرات SSH:
“هرگز پنجره فعلی را نبندید، مگر اینکه در یک پنجره جدید موفق به ورود شده باشید.”
قبل از خروج، یک ترمینال یا پنجره PuTTY جدید باز کنید و سعی کنید با کلید وارد شوید. اگر موفق شدید، تبریک میگویم! حالا میتوانید پنجرههای قبلی را ببندید.
مدیریت فایلهای کلید
حالا که شما صاحب یک کلید دیجیتال هستید، مسئولیت امنیت آن با شماست. برخلاف رمز عبور که اگر لو رفت میتوان آن را تغییر داد، اگر فایل کلید خصوصی شما دزدیده شود و روی آن Passphrase نگذاشته باشید، هکر برای همیشه به سرور دسترسی خواهد داشت (مگر اینکه کلید عمومی را از سرور پاک کنید).
جدول مقایسه انواع الگوریتمهای کلید
شاید هنگام ساخت کلید نامهای مختلفی دیده باشید. کدام یک برای شما مناسبتر است؟
| الگوریتم (Type) | امنیت و سرعت | توضیحات |
|---|---|---|
RSA (4096-bit) |
بسیار عالی (استاندارد) | پشتیبانی در تمام سرورهای قدیمی و جدید. رایجترین انتخاب. |
ED25519 |
فوقالعاده (مدرن) | جدیدترین استاندارد. کلیدها کوتاهتر اما بسیار امنتر و سریعتر هستند. |
DSA / ECDSA |
متوسط / ضعیف | توصیه نمیشود. در نسخههای جدید OpenSSH ممکن است غیرفعال باشند. |
۳ نکته برای نگهداری از کلیدها:
بکاپ بگیرید: اگر ویندوز خود را عوض کنید و فایل .ppk یا id_rsa پاک شود، دیگر نمیتوانید وارد سرور شوید. حتماً یک کپی از کلید را در فلش مموری یا فضای ابری امن داشته باشید.
سطح دسترسی (Permissions): همانطور که گفته شد، فایل کلید خصوصی در لینوکس/مک حتماً باید دسترسی ۶۰۰ داشته باشد، وگرنه سیستم اجازه استفاده از آن را نمیدهد.
یک کلید برای همه؟ خیر! اگر ۱۰ سرور دارید، آیا باید برای هر کدام یک کلید جدا ساخت؟
روش امنیتی بالا: بله، برای هر سرور یک کلید جدا بسازید. اگر یکی لو رفت، بقیه امن میمانند.
روش راحت: یک کلید بسازید و کلید عمومی (Public) آن را روی همه سرورها پخش کنید. (ریسک بیشتر، راحتی بیشتر).
قدم بعدی: بستن درب قدیمی (Disable Password)
تبریک میگویم! شما اکنون با موفقیت سیستم SSH Key را راهاندازی کردید و میتوانید بدون تایپ کردن رمز عبور، سریع و امن وارد سرور شوید.
اما یک مشکل امنیتی هنوز پابرجاست: سرور شما همچنان رمز عبور را هم قبول میکند. یعنی اگر هکری کلید شما را نداشته باشد، هنوز میتواند شانس خود را با حدس زدن رمز عبور امتحان کند.
برای اینکه امنیت سرور را به ۱۰۰٪ برسانید، باید به سرور بگویید: “از این لحظه به بعد، هیچ رمز عبوری را قبول نکن و فقط با کلید اجازه ورود بده.”
این کار نیازمند دقت بسیار بالایی است و تغییرات حساسی در فایل sshd_config دارد که اگر اشتباه انجام شود، دسترسی شما قطع خواهد شد. به همین دلیل، اکیدا توصیه می شود با دقت انجام شود، زیرا ممکن است منجر به عدم دسترسی به سرور از طریق SSH شود و در نهایت مجبور به استفاده از VNC یا نصب مجدد سیستم عامل شوید.
با استفاده از دستور زیر در سرور مجازی یا سرور اختصاصی لینوکس خود، وارد تنظیمات ssh شوید:
sudo nano /etc/ssh/sshd_config
به دنبال مقادیر زیر بگردید و بر روی تنظیمات زیر قرار دهید:
PubkeyAuthentication yes
PasswordAuthentication no
systemctl reload sshd
service ssh restart
در این مقاله آموختیم که SSH Key فقط یک ابزار راحتی برای تایپ نکردن رمز نیست، بلکه استانداردی جهانی برای امنیت سرورهاست. ما مراحل ساخت کلید در ویندوز و لینوکس، نحوه انتقال آن به سرور و رفع خطاهای رایج (Permission Denied) را بررسی کردیم.
حالا سرور شما کلید را میشناسد. در مرحله بعد، باید با خیالی آسوده سیستم تایید هویت با رمز عبور را خاموش کنید تا سرور شما تبدیل به یک دژ نفوذناپذیر شود. دسترسی به سرور و مدیریت آن نیاز به اطلاعات فنی و تجربه بالایی دارد. در صورتی که اطلاعات کافی از این موضوع ندارید، کافی است مدیریت سرور خود را به ما بسپارید.