لینوکس

آموزش ساخت SSH Key در ویندوز و اتصال امن به سرور لینوکس

با استفاده از ssh-keygen در Windows 10 و Windows 11 می‌توانید یک جفت کلید SSH بسازید و بدون وارد کردن پسورد سرور به VPS لینوکسی متصل شوید. در این آموزش ساخت Public Key و Private Key، انتقال کلید به سرور، اتصال با SSH و رفع خطاهای رایج را مرحله‌به‌مرحله بررسی می‌کنیم.

آموزش ساخت SSH Key در ویندوز و اتصال امن به سرور لینوکس
علیرضا عزیزی
علیرضا عزیزی
نویسنده و کارشناس
32 دقیقه • ۸ آبان ۱۴۰۵• ۱۰

برای اتصال به یک سرور لینوکسی با SSH الزاماً مجبور نیستید هر بار Password سرور را وارد کنید.

روش بهتر برای بسیاری از سرورها استفاده از SSH Key Authentication است؛ یعنی روی کامپیوتر ویندوزی خودتان یک جفت کلید می‌سازید:

Private Key + Public Key

Public 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 ارائه می‌کند.


تفاوت Public Key و Private Key در احراز هویت SSH

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_ed25519

Private Key است.

و:

id_ed25519.pub

Public Key است.

محل ذخیره فایل Public Key و Private Key در پوشه SSH ویندوز

مرحله ۴: برای 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:

  1. Public Key را از Windows می‌خواند

  2. با SSH به Server وصل می‌شود

  3. پوشه .ssh را در صورت نیاز می‌سازد

  4. Key را به authorized_keys اضافه می‌کند

  5. 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 ~/.ssh

Permission:

chmod 700 ~/.ssh

فایل را باز کنید:

nano ~/.ssh/authorized_keys

Public 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.10

OpenSSH 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_keys

Public Key موردنظر باید داخل آن وجود داشته باشد.


Permissionها اشتباه هستند

معمولاً:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

را بررسی کنید.


Private Key اشتباهی استفاده می‌کنید

آن را صریح مشخص کنید:

ssh -i "$env:USERPROFILE\.ssh\id_ed25519" user@SERVER_IP

Username اشتباه است

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 ed25519

Public 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 ed25519 Key ساختم

  • 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

جمع‌بندی

برای ساخت SSH Key در Windows 10 و Windows 11 لازم نیست ابزار پیچیده‌ای نصب کنید.

اگر OpenSSH Client روی سیستم فعال باشد، کافی است اجرا کنید:

ssh-keygen -t ed25519

سپس دو فایل خواهید داشت:

id_ed25519
→ Private Key

id_ed25519.pub
→ Public Key

Public 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، یعنی فایل دارای پسوند:

.pub

Private 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

استفاده کنید.

علیرضا عزیزی

نویسنده مقالات تخصصی و آموزشی در وبلاگ نتزو.

مشاهده تمام مقالات این نویسنده

مقالات مرتبط و پیشنهادی