برای اتصال به یک سرور لینوکسی با SSH الزاماً مجبور نیستید هر بار Password سرور را وارد کنید.
روش بهتر برای بسیاری از سرورها استفاده از SSH Key Authentication است؛ یعنی روی کامپیوتر ویندوزی خودتان یک جفت کلید میسازید:
Private Key + Public KeyPublic Key روی سرور قرار میگیرد، اما Private Key باید فقط روی کامپیوتر خودتان باقی بماند و نباید آن را برای شخص دیگری ارسال کنید.
بعد از تنظیم صحیح، هنگام اتصال SSH سرور بررسی میکند آیا شما Private Key متناظر با Public Key ثبتشده را در اختیار دارید یا خیر.
در Windows 10 و Windows 11 میتوان این فرایند را مستقیماً با ابزارهای OpenSSH و دستور ssh-keygen انجام داد و برای ساخت Key نیازی به نصب PuTTY ندارید؛ البته OpenSSH Client باید روی Windows نصب باشد.
مایکروسافت OpenSSH Client را در Windows 10 و 11 بهعنوان قابلیت قابل استفاده/Optional Feature ارائه میکند.
SSH Key چیست؟
SSH Key در واقع یک Key Pair یا جفت کلید رمزنگاری است.
این جفت شامل دو بخش است:
Private Key
کلید خصوصی روی دستگاه Client، یعنی در این آموزش روی کامپیوتر Windows شما، نگهداری میشود.
نمونه نام فایل:
id_ed25519این فایل را:
روی سایت Upload نکنید
داخل Git Repository قرار ندهید
برای دیگران ارسال نکنید
در Ticket پشتیبانی Paste نکنید
همراه Public Key برای کسی نفرستید
اگر کسی به Private Key شما دسترسی پیدا کند، بسته به تنظیمات Server ممکن است بتواند با هویت شما به Server متصل شود.
Public Key :
Public Key را میتوان روی Server قرار داد.
نام آن معمولاً پسوند .pub هست:
id_ed25519.pubمحتوای آن چیزی شبیه این است:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@computerدر Serverهای Linux معمولاً Public Key کاربر در فایل:
~/.ssh/authorized_keysقرار میگیرد.
خلاصه:
Windows PC
Private Key
│
│ SSH Authentication
▼
Linux Server
Public Keyمایکروسافت نیز در مستندات OpenSSH تأکید میکند که برای Key-based Authentication ابتدا یک جفت Public/Private Key ساخته میشود و ssh-keygen ابزار اصلی تولید این کلیدها در Windows است.
چرا بهجای Password از SSH Key استفاده کنیم؟
Password Authentication هنوز در بسیاری از سرورها استفاده میشود، اما SSH Key چند مزیت مهم دارد.
در برابر حدس زدن Password مقاومتر است
سروری که Password Login آن برای اینترنت باز است، ممکن است مرتباً با تلاشهای خودکار برای Login مواجه شود.
SSH Key باعث میشود Authentication فقط به یک Password قابل حدس وابسته نباشد.
برای مدیریت چند Server مناسبتر است
اگر چند VPS داشته باشید، Key Authentication مدیریت دسترسی را راحتتر میکند.
میتوانید Private Key را با Passphrase محافظت کنید
در این حالت حتی اگر فایل Private Key به دست فرد دیگری برسد، برای استفاده از آن به Passphrase هم نیاز خواهد بود.
برای Automation مناسب است
ابزارهای Deployment و Automation نیز معمولاً میتوانند از SSH Key استفاده کنند.
اما یک نکته مهم:
SSH Key امنیت را بهصورت جادویی تضمین نمیکند.
Private Key باید بهدرستی نگهداری شود و دسترسیهای Server، Firewall، Updateها و سایر تنظیمات امنیتی همچنان اهمیت دارند.
پیشنیازهای ساخت SSH Key در Windows
برای این آموزش کافی است:
Windows 10 یا Windows 11 داشته باشید
OpenSSH Client نصب باشد
PowerShell، CMD یا Windows Terminal داشته باشید
Windows Terminal الزامی نیست؛ همان PowerShell یا CMD هم کافی است.
ابتدا بهتر است بررسی کنیم SSH روی سیستم شما قابل استفاده است یا خیر.
مرحله ۱: بررسی نصب OpenSSH در Windows
PowerShell یا CMD را باز کنید و دستور زیر را اجرا کنید:
ssh -Vاگر OpenSSH نصب باشد، خروجیای شامل نسخه OpenSSH مشاهده خواهید کرد.
برای بررسی ssh-keygen نیز میتوانید اجرا کنید:
ssh-keygen -?اگر Command شناخته شد، ابزار موردنیاز را دارید.
در Windowsهای جدید، OpenSSH Client در مسیر استاندارد Windows قرار میگیرد و مایکروسافت مسیر پیشفرض ابزارها را:
C:\Windows\System32\OpenSSHاعلام کرده است.
اگر ssh یا ssh-keygen پیدا نشد چه کنیم؟
اگر خطایی شبیه:
'ssh' is not recognized as an internal or external commandیا:
ssh-keygen is not recognizedدریافت کردید، ابتدا وضعیت OpenSSH Client را بررسی کنید.
در PowerShell با دسترسی Administrator:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'اگر مقابل Client نوشته شده باشد:
State : NotPresentمیتوانید OpenSSH Client را نصب کنید:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0مایکروسافت همین روش را برای نصب OpenSSH Client بهعنوان Windows Capability مستند کرده است.
از رابط Windows هم میتوانید به:
Settings
→ Optional Features
→ OpenSSH Clientبروید و در صورت نصب نبودن، آن را اضافه کنید.
بعد از نصب، Terminal را ببندید و دوباره باز کنید و:
ssh -Vرا امتحان کنید.
مرحله ۲: ساخت SSH Key با ssh-keygen
حالا میتوانیم Key Pair بسازیم.
برای بیشتر کاربردهای جدید، یک انتخاب مناسب Ed25519 است.
در PowerShell، CMD یا Windows Terminal اجرا کنید:
ssh-keygen -t ed25519خود OpenSSH for Windows از الگوریتمهایی مانند RSA، ECDSA و Ed25519 پشتیبانی میکند و طبق مستندات فعلی Microsoft، اگر Algorithm مشخص نشود نیز Ed25519 بهصورت پیشفرض استفاده میشود.
من ترجیح میدهم نوع Key را صریح بنویسیم تا مشخص باشد چه چیزی در حال ساخته شدن است:
ssh-keygen -t ed25519مرحله ۳: محل ذخیره SSH Key را انتخاب کنید
بعد از اجرای دستور، پیامی شبیه این مشاهده میکنید:
Generating public/private ed25519 key pair.
Enter file in which to save the key
(C:\Users\USERNAME\.ssh\id_ed25519):اگر مسیر پیشفرض برایتان مناسب است، فقط:
Enterرا بزنید.
Keyها معمولاً داخل:
C:\Users\USERNAME\.ssh\ذخیره میشوند.
در پایان دو فایل خواهید داشت:
id_ed25519
id_ed25519.pubیادتان باشد:
id_ed25519Private Key است.
و:
id_ed25519.pubPublic Key است.
مرحله ۴: برای Private Key یک Passphrase انتخاب کنید
مرحله بعد:
Enter passphrase (empty for no passphrase):است.
در این قسمت میتوانید برای Private Key یک Passphrase قرار دهید.
اگر Passphrase تعیین کنید، حتی در صورت دسترسی فرد دیگری به فایل Private Key، استفاده مستقیم از آن سختتر میشود.
برای Serverهای مهم و دسترسیهای شخصی، استفاده از Passphrase انتخاب خوبی است.
بعد دوباره از شما میخواهد آن را تأیید کنید:
Enter same passphrase again:Passphrase خود را مجدداً وارد کنید.
آیا میتوان Passphrase را خالی گذاشت؟
از نظر فنی بله.
اگر فقط Enter بزنید:
Enter passphrase (empty for no passphrase):Key بدون Passphrase ساخته میشود.
این کار ممکن است برای بعضی Automationها یا محیطهای کنترلشده کاربرد داشته باشد، اما برای Key شخصی که روی Laptop یا PC نگهداری میشود، استفاده از Passphrase لایه محافظتی اضافهای ایجاد میکند.
مرحله ۵: مطمئن شوید Keyها ساخته شدهاند
در PowerShell بنویسید:
Get-ChildItem $env:USERPROFILE\.sshباید فایلهایی مثل اینها را ببینید:
id_ed25519
id_ed25519.pubبرای مشاهده Public Key:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pubخروجی معمولاً یک خط بلند است که با:
ssh-ed25519شروع میشود.
همین Public Key چیزی است که میتوانید روی Server ثبت کنید.
کدام فایل را باید روی Server قرار دهیم؟
فقط:
id_ed25519.pubیا محتوای آن.
هیچوقت این فایل را Upload نکنید:
id_ed25519چون Private Key شماست.
یک قانون ساده:
.pub
→ قابل اشتراک با Server
بدون .pub
→ خصوصی و فقط برای شمامایکروسافت نیز در راهنمای اتصال Linux VM تأکید میکند که Public Key روی VM قرار میگیرد و Private Key روی سیستم Local باقی میماند و نباید به اشتراک گذاشته شود.
مرحله ۶: Public Key را روی VPS لینوکسی قرار دهید
برای اینکه Server بتواند شما را با Key شناسایی کند، Public Key باید برای User موردنظر داخل:
~/.ssh/authorized_keysقرار بگیرد.
فرض کنیم اطلاعات Server اینها هستند:
User: deploy
IP: 203.0.113.10یک روش ساده از PowerShell این است:
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh deploy@203.0.113.10 "umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys"در اولین اجرا ممکن است Password همان User روی Server از شما درخواست شود.
این Command:
Public Key را از Windows میخواند
با SSH به Server وصل میشود
پوشه
.sshرا در صورت نیاز میسازدKey را به
authorized_keysاضافه میکندPermissionهای مناسب را تنظیم میکند
اگر این Command را چند بار اجرا کنید، همان Public Key ممکن است چند بار داخل
authorized_keysاضافه شود؛ پس فقط زمانی اجرا کنید که واقعاً نیاز دارید Key را ثبت کنید.
اگر پنل سرویس شما هنگام ساخت VPS امکان وارد کردن SSH Public Key دارد، حتی بهتر است Public Key را همان زمان در پنل ثبت کنید.
روش دستی اضافه کردن Public Key
اگر ترجیح میدهید مرحلهبهمرحله انجام دهید، ابتدا Public Key را در Windows نمایش دهید:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pubکل خط را Copy کنید.
بعد با Password وارد Server شوید:
ssh deploy@SERVER_IPپوشه را بسازید:
mkdir -p ~/.sshPermission:
chmod 700 ~/.sshفایل را باز کنید:
nano ~/.ssh/authorized_keysPublic Key را در یک خط کامل Paste کنید.
بعد:
chmod 600 ~/.ssh/authorized_keysرا اجرا کنید.
مرحله ۷: اتصال با SSH Key را تست کنید
حالا از Windows:
ssh -i "$env:USERPROFILE\.ssh\id_ed25519" deploy@203.0.113.10اگر SSH روی Port دیگری است:
ssh -p 2222 -i "$env:USERPROFILE\.ssh\id_ed25519" deploy@203.0.113.10اگر Key در نام و مسیر پیشفرض قرار داشته باشد، OpenSSH معمولاً خودش آن را پیدا میکند و ممکن است فقط این کافی باشد:
ssh deploy@203.0.113.10اگر برای Key، Passphrase تعیین کرده باشید، ممکن است Passphrase خود Key از شما خواسته شود.
این Passphrase با Password User روی Server فرق دارد.
قبل از غیرفعال کردن Password Login این کار را انجام دهید
این مرحله بسیار مهم است.
اگر تصمیم دارید بعداً Password Authentication را روی VPS غیرفعال کنید:
اول Key Login را در یک Terminal جدید تست کنید.
Terminal فعلی Server را باز نگه دارید.
مثلاً:
ssh deploy@SERVER_IPاگر Login جدید موفق بود، مطمئن میشوید Key درست ثبت شده است.
تا قبل از این تست، تنظیماتی مثل:
PasswordAuthentication noرا اعمال نکنید.
در غیر این صورت یک اشتباه ساده میتواند دسترسی شما به Server را قطع کند.
SSH Agent در Windows چیست؟
اگر Private Key شما Passphrase دارد، وارد کردن Passphrase در هر اتصال میتواند آزاردهنده باشد.
ssh-agent برای نگهداری امن Keyهای فعال در Session سیستم استفاده میشود.
OpenSSH for Windows ابزارهای ssh-agent و ssh-add را برای همین کار ارائه میکند.
در PowerShell با دسترسی Administrator میتوانید وضعیت سرویس را ببینید:
Get-Service ssh-agentدر صورت نیاز:
Set-Service -Name ssh-agent -StartupType Automatic
Start-Service ssh-agentسپس Key را اضافه کنید:
ssh-add "$env:USERPROFILE\.ssh\id_ed25519"Passphrase را وارد کنید.
برای مشاهده Keyهای اضافهشده:
ssh-add -lحالا OpenSSH میتواند از Key موجود در Agent برای اتصال استفاده کند.
Ed25519 بهتر است یا RSA؟
برای بیشتر Serverهای مدرن، Ed25519 انتخاب بسیار خوبی است:
ssh-keygen -t ed25519اما ممکن است Environment قدیمی یا سیاست امنیتی خاصی داشته باشید که نیاز به RSA داشته باشد.
در چنین شرایطی میتوانید مثلاً:
ssh-keygen -t rsa -b 4096استفاده کنید.
اما Algorithm را فقط بهدلیل اینکه یک Tutorial قدیمی RSA استفاده کرده، انتخاب نکنید.
برای سرویسهای جدید ابتدا Compatibility مقصد را بررسی کنید.
چگونه برای Serverهای مختلف Key جدا بسازیم؟
الزامی نیست همه Serverها از یک Private Key استفاده کنند.
مثلاً میتوانید برای Production یک Key جدا بسازید:
ssh-keygen -t ed25519 -f "$env:USERPROFILE\.ssh\netzo-production"در این حالت ساخته میشوند:
netzo-production
netzo-production.pubبرای اتصال:
ssh -i "$env:USERPROFILE\.ssh\netzo-production" deploy@SERVER_IPاین روش برای جداسازی دسترسیهای:
Personal
Production
Staging
Git
Companyمیتواند مدیریت Keyها را سادهتر کند.
استفاده از فایل SSH Config در Windows
اگر مرتب به یک Server متصل میشوید، لازم نیست هر بار این Command طولانی را بنویسید:
ssh -p 2222 -i C:\Users\User\.ssh\netzo-production deploy@203.0.113.10OpenSSH Client در Windows بهطور پیشفرض Configuration کاربر را از:
%USERPROFILE%\.ssh\configمیخواند.
مثلاً فایل زیر را بسازید:
C:\Users\USERNAME\.ssh\configو داخل آن قرار دهید:
Host netzo-server
HostName 203.0.113.10
User deploy
Port 2222
IdentityFile ~/.ssh/netzo-productionحالا اتصال تبدیل میشود به:
ssh netzo-serverاین قابلیت زمانی که چند VPS دارید بسیار کاربردی است.
خطای Permission denied (publickey) را چگونه رفع کنیم؟
اگر هنگام اتصال ببینید:
Permission denied (publickey)معمولاً یکی از این موارد مشکل دارد:
Public Key برای User اشتباه ثبت شده است
اگر با:
deployوصل میشوید، Key باید برای همان User ثبت شده باشد.
فایل authorized_keys اشتباه است
روی Linux بررسی کنید:
cat ~/.ssh/authorized_keysPublic Key موردنظر باید داخل آن وجود داشته باشد.
Permissionها اشتباه هستند
معمولاً:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keysرا بررسی کنید.
Private Key اشتباهی استفاده میکنید
آن را صریح مشخص کنید:
ssh -i "$env:USERPROFILE\.ssh\id_ed25519" user@SERVER_IPUsername اشتباه است
Key متعلق به یک User است؛ صرفاً متعلق به کل Server نیست.
مثلاً:
ssh root@SERVER_IPو:
ssh deploy@SERVER_IPدو Account متفاوت هستند.
برای عیبیابی SSH از حالت Verbose استفاده کنید
یکی از کاربردیترین روشهای عیبیابی:
ssh -v user@SERVER_IPاست.
برای جزئیات بیشتر:
ssh -vv user@SERVER_IPیا:
ssh -vvv user@SERVER_IPدر خروجی میتوانید ببینید OpenSSH چه Keyهایی را بررسی میکند و Authentication در کدام مرحله Fail شده است.
مثلاً دنبال عبارتهایی شبیه:
Offering public keyیا:
Authentications that can continueباشید.
مطالعه پیشنهادی: آموزش اتصال SSH به سرور لینوکس با CMD ویندوز
اگر Private Key لو رفت چه کنیم؟
اگر احتمال میدهید Private Key شما:
Upload شده
داخل Repository قرار گرفته
برای فرد دیگری ارسال شده
از سیستم سرقت شده
به آن Key دیگر اعتماد نکنید.
یک Key Pair جدید بسازید:
ssh-keygen -t ed25519Public Key جدید را روی Server قرار دهید و Public Key قدیمی را از authorized_keys حذف کنید.
صرفاً پاککردن Private Key از کامپیوتر باعث لغو دسترسی آن نمیشود.
Server هنوز Public Key متناظر را قبول میکند تا زمانی که آن را حذف کنید.
آیا میتوان یک SSH Key را روی چند VPS استفاده کرد؟
بله، از نظر فنی یک Public Key را میتوان روی چند Server ثبت کرد.
اما برای Environmentهای حساس، داشتن Keyهای جدا میتواند مدیریت Revocation و دسترسی را سادهتر کند.
مثلاً:
Personal VPS
→ Key A
Production
→ Key B
Company Infrastructure
→ Key Cدر این حالت اگر یک Key Compromise شود، لازم نیست دسترسی تمام Serverها را تغییر دهید.
PuTTYgen هنوز لازم است؟
برای کاربران Windows 10 و Windows 11 که از OpenSSH استفاده میکنند، برای ساخت SSH Key الزاماً نیازی به PuTTYgen نیست.
میتوانید مستقیماً از:
ssh-keygenاستفاده کنید.
PuTTY همچنان ابزار معتبری است و در بعضی Workflowها استفاده میشود، اما فرمت Private Key آن (.ppk) با فایلهای OpenSSH یکی نیست و هنگام جابهجایی بین ابزارها ممکن است نیاز به Import/Conversion داشته باشید.
اگر هدف شما اتصال با دستور:
sshدر Windows Terminal، PowerShell یا CMD است، استفاده مستقیم از OpenSSH مسیر سادهتری است.
چکلیست ساخت SSH Key در Windows
اگر فقط مراحل اصلی را میخواهید:
با
ssh -Vنصب OpenSSH را بررسی کردمبا
ssh-keygen -t ed25519Key ساختمPrivate Key را امن نگه داشتم
برای Private Key Passphrase در نظر گرفتم
فقط فایل
.pubرا روی Server ثبت کردمPermission پوشه
.sshرا بررسی کردمPermission فایل
authorized_keysرا بررسی کردمLogin با Key را در Terminal جدید تست کردم
قبل از غیرفعال کردن Password Login مطمئن شدم Key کار میکند
در صورت نیاز
ssh-agentرا تنظیم کردماز Private Key Backup امن دارم
جمعبندی
برای ساخت SSH Key در Windows 10 و Windows 11 لازم نیست ابزار پیچیدهای نصب کنید.
اگر OpenSSH Client روی سیستم فعال باشد، کافی است اجرا کنید:
ssh-keygen -t ed25519سپس دو فایل خواهید داشت:
id_ed25519
→ Private Key
id_ed25519.pub
→ Public KeyPublic Key را روی VPS در:
~/.ssh/authorized_keysقرار میدهید و Private Key روی Windows باقی میماند.
بعد میتوانید اتصال را با:
ssh -i "$env:USERPROFILE\.ssh\id_ed25519" user@SERVER_IPتست کنید.
مهمترین نکته این آموزش خود Command نیست:
Private Key را هیچوقت در اختیار دیگران قرار ندهید و قبل از غیرفعال کردن Password Login، ورود با Key را در یک Session جداگانه تست کنید.
اگر تازه VPS لینوکسی تهیه کردهاید، تنظیم SSH Key یکی از اولین کارهایی است که بهتر است در کنار Update سیستم، ساخت User غیر Root، Firewall و Backup انجام دهید.
سوالات متداول درباره SSH Key در Windows
SSH Key در Windows کجا ذخیره میشود؟
در حالت پیشفرض معمولاً داخل پوشه:
C:\Users\USERNAME\.ssh\قرار میگیرد.
برای Ed25519 فایلها معمولاً:
id_ed25519
id_ed25519.pubهستند.
کدام فایل را باید روی Server قرار دهم؟
فقط Public Key، یعنی فایل دارای پسوند:
.pubPrivate Key بدون .pub را نباید Upload یا برای دیگران ارسال کنید.
آیا برای ساخت SSH Key در Windows به PuTTY نیاز داریم؟
خیر. Windows 10 و Windows 11 از OpenSSH پشتیبانی میکنند و میتوانید از ssh-keygen در PowerShell، CMD یا Windows Terminal استفاده کنید، مشروط به اینکه OpenSSH Client نصب باشد.
Ed25519 بهتر است یا RSA؟
برای بیشتر محیطهای مدرن Ed25519 انتخاب مناسبی است. اگر سرویس یا سیاست امنیتی مقصد نیاز به RSA داشته باشد، میتوانید RSA با Key Length مناسب ایجاد کنید.
آیا SSH Key بدون Passphrase امن است؟
میتواند کار کند، اما اگر Private Key سرقت شود محافظت کمتری دارد. برای Keyهای شخصی و سرورهای حساس، Passphrase لایه امنیتی مفیدی اضافه میکند.
چرا با وجود ثبت Public Key هنوز Password میخواهد؟
ممکن است Key صحیح انتخاب نشده باشد، Public Key برای User اشتباه ثبت شده باشد، authorized_keys یا Permissionها مشکل داشته باشند یا Server همچنان از روش Authentication دیگری استفاده کند. برای عیبیابی از:
ssh -vv user@SERVER_IPاستفاده کنید.




